geoblacklight 4.4.1 → 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 (577) 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 -52
  5. data/.gitignore +2 -2
  6. data/CONTRIBUTING.md +62 -44
  7. data/Gemfile +3 -28
  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/{presenters/geoblacklight/document_presenter.rb → components/geoblacklight/search_result_component.rb} +9 -6
  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 +10 -26
  151. data/app/helpers/geoblacklight_helper.rb +10 -194
  152. data/app/javascript/geoblacklight/controllers/clipboard_controller.js +11 -0
  153. data/app/javascript/geoblacklight/controllers/clover_viewer_controller.js +47 -0
  154. data/app/javascript/geoblacklight/controllers/downloads_controller.js +56 -0
  155. data/app/javascript/geoblacklight/controllers/leaflet_viewer_controller.js +217 -0
  156. data/app/javascript/geoblacklight/controllers/oembed_viewer_controller.js +18 -0
  157. data/app/javascript/geoblacklight/controllers/openlayers_viewer_controller.js +63 -0
  158. data/app/javascript/geoblacklight/controllers/search_results_controller.js +50 -0
  159. data/app/javascript/geoblacklight/core.js +69 -0
  160. data/app/javascript/geoblacklight/index.js +29 -0
  161. data/app/javascript/geoblacklight/initializers/metadata_download.js +54 -0
  162. data/app/javascript/geoblacklight/initializers/popovers.js +11 -0
  163. data/app/javascript/geoblacklight/initializers/relations.js +40 -0
  164. data/app/javascript/geoblacklight/initializers/tooltips.js +55 -0
  165. data/app/javascript/geoblacklight/initializers/truncation.js +45 -0
  166. data/app/javascript/geoblacklight/leaflet/basemaps.js +74 -0
  167. data/app/javascript/geoblacklight/leaflet/constants.js +18 -0
  168. data/app/javascript/geoblacklight/leaflet/controls/geosearch.js +160 -0
  169. data/app/javascript/geoblacklight/leaflet/controls/layer_opacity.js +120 -0
  170. data/app/javascript/geoblacklight/leaflet/inspection.js +195 -0
  171. data/app/javascript/geoblacklight/leaflet/layer_index_map.js +120 -0
  172. data/app/javascript/geoblacklight/leaflet/layer_wmts.js +59 -0
  173. data/app/javascript/geoblacklight/leaflet/layers.js +153 -0
  174. data/app/javascript/geoblacklight/leaflet/utils.js +83 -0
  175. data/app/javascript/geoblacklight/openlayers/basemaps.js +47 -0
  176. data/app/javascript/geoblacklight/openlayers/layers.js +44 -0
  177. data/app/models/concerns/geoblacklight/solr_document/citation.rb +20 -8
  178. data/app/models/concerns/geoblacklight/solr_document.rb +22 -30
  179. data/app/presenters/geoblacklight/bbox_item_presenter.rb +1 -1
  180. data/app/views/catalog/_citation.html.erb +16 -33
  181. data/app/views/catalog/_document_split.html.erb +18 -3
  182. data/app/views/catalog/_home_text.html.erb +2 -2
  183. data/app/views/catalog/_metadata.html.erb +1 -1
  184. data/app/views/catalog/index.html.erb +8 -4
  185. data/app/views/catalog/metadata/_markup.html.erb +1 -1
  186. data/app/views/catalog/metadata.html.erb +14 -13
  187. data/app/views/catalog/web_services.html.erb +19 -28
  188. data/app/views/relation/index.html.erb +2 -12
  189. data/app/views/relation/index.json.jbuilder +1 -1
  190. data/compose.yml +14 -0
  191. data/config/importmap.rb +20 -0
  192. data/config/locales/geoblacklight.en.yml +15 -24
  193. data/geoblacklight.gemspec +7 -7
  194. data/lib/generators/geoblacklight/assets/importmap_generator.rb +87 -0
  195. data/lib/generators/geoblacklight/assets/vite_generator.rb +90 -0
  196. data/lib/generators/geoblacklight/assets_generator.rb +12 -37
  197. data/lib/generators/geoblacklight/install_generator.rb +11 -49
  198. data/lib/generators/geoblacklight/templates/assets/_customizations.scss +13 -19
  199. data/lib/generators/geoblacklight/templates/assets/application.js +17 -0
  200. data/lib/generators/geoblacklight/templates/assets/application.scss +9 -4
  201. data/lib/generators/geoblacklight/templates/assets/geoblacklight.scss +11 -0
  202. data/lib/generators/geoblacklight/templates/base.html.erb +9 -12
  203. data/lib/generators/geoblacklight/templates/catalog_controller.rb +7 -15
  204. data/lib/generators/geoblacklight/templates/demo-app/Dockerfile +31 -0
  205. data/lib/generators/geoblacklight/templates/demo-app/compose.yml +26 -0
  206. data/lib/generators/geoblacklight/templates/demo-app/start-server.sh +21 -0
  207. data/lib/generators/geoblacklight/templates/package.json +7 -1
  208. data/lib/generators/geoblacklight/templates/settings.yml +45 -40
  209. data/lib/generators/geoblacklight/templates/vite.config.ts +22 -7
  210. data/lib/geoblacklight/bounding_box.rb +16 -0
  211. data/lib/geoblacklight/constants.rb +0 -1
  212. data/lib/geoblacklight/download/csv_download.rb +22 -0
  213. data/lib/geoblacklight/download/geojson_download.rb +1 -1
  214. data/lib/geoblacklight/download/geotiff_download.rb +1 -1
  215. data/lib/geoblacklight/download/kmz_download.rb +1 -1
  216. data/lib/geoblacklight/download/shapefile_download.rb +1 -1
  217. data/lib/geoblacklight/download.rb +1 -1
  218. data/lib/geoblacklight/engine.rb +15 -6
  219. data/lib/geoblacklight/item_viewer.rb +1 -1
  220. data/lib/geoblacklight/metadata/base.rb +2 -1
  221. data/lib/geoblacklight/references.rb +27 -8
  222. data/lib/geoblacklight/routes/downloadable.rb +0 -1
  223. data/lib/geoblacklight/routes.rb +0 -3
  224. data/lib/geoblacklight/version.rb +1 -1
  225. data/lib/geoblacklight/wms_layer/feature_info_response.rb +9 -6
  226. data/lib/geoblacklight.rb +6 -30
  227. data/lib/tasks/geoblacklight.rake +24 -60
  228. data/package.json +24 -17
  229. data/solr/conf/schema.xml +15 -13
  230. data/solr/conf/solrconfig.xml +6 -4
  231. data/spec/components/blacklight/icons/american_geographical_society_library_uwm_libraries_component_spec.rb +15 -0
  232. data/spec/components/blacklight/icons/arizona_component_spec.rb +15 -0
  233. data/spec/components/blacklight/icons/arrow_circle_down_component_spec.rb +15 -0
  234. data/spec/components/blacklight/icons/baruch_cuny_component_spec.rb +15 -0
  235. data/spec/components/blacklight/icons/book_component_spec.rb +15 -0
  236. data/spec/components/blacklight/icons/bookmark_component_spec.rb +15 -0
  237. data/spec/components/blacklight/icons/cd_rom_component_spec.rb +15 -0
  238. data/spec/components/blacklight/icons/child_item_component_spec.rb +15 -0
  239. data/spec/components/blacklight/icons/circle_info_solid_component_spec.rb +15 -0
  240. data/spec/components/blacklight/icons/citation_component_spec.rb +15 -0
  241. data/spec/components/blacklight/icons/collection_component_spec.rb +15 -0
  242. data/spec/components/blacklight/icons/collections_component_spec.rb +15 -0
  243. data/spec/components/blacklight/icons/columbia_component_spec.rb +15 -0
  244. data/spec/components/blacklight/icons/cornell_component_spec.rb +15 -0
  245. data/spec/components/blacklight/icons/datasets_component_spec.rb +15 -0
  246. data/spec/components/blacklight/icons/dvd_rom_component_spec.rb +15 -0
  247. data/spec/components/blacklight/icons/email_component_spec.rb +15 -0
  248. data/spec/components/blacklight/icons/esri_globe_component_spec.rb +15 -0
  249. data/spec/components/blacklight/icons/fire_solid_component_spec.rb +15 -0
  250. data/spec/components/blacklight/icons/george_mason_component_spec.rb +15 -0
  251. data/spec/components/blacklight/icons/globe_component_spec.rb +15 -0
  252. data/spec/components/blacklight/icons/harvard_component_spec.rb +15 -0
  253. data/spec/components/blacklight/icons/home_component_spec.rb +15 -0
  254. data/spec/components/blacklight/icons/iiif_drag_drop_component_spec.rb +15 -0
  255. data/spec/components/blacklight/icons/image_component_spec.rb +15 -0
  256. data/spec/components/blacklight/icons/imagery_component_spec.rb +15 -0
  257. data/spec/components/blacklight/icons/indiana_component_spec.rb +15 -0
  258. data/spec/components/blacklight/icons/leaf_component_spec.rb +15 -0
  259. data/spec/components/blacklight/icons/lewis_clark_component_spec.rb +15 -0
  260. data/spec/components/blacklight/icons/lightbulb_solid_component_spec.rb +15 -0
  261. data/spec/components/blacklight/icons/line_component_spec.rb +15 -0
  262. data/spec/components/blacklight/icons/map_component_spec.rb +15 -0
  263. data/spec/components/blacklight/icons/map_marker_component_spec.rb +15 -0
  264. data/spec/components/blacklight/icons/maps_component_spec.rb +15 -0
  265. data/spec/components/blacklight/icons/massgis_component_spec.rb +15 -0
  266. data/spec/components/blacklight/icons/metadata_component_spec.rb +15 -0
  267. data/spec/components/blacklight/icons/michigan_state_university_component_spec.rb +15 -0
  268. data/spec/components/blacklight/icons/mit_component_spec.rb +15 -0
  269. data/spec/components/blacklight/icons/mixed_component_spec.rb +15 -0
  270. data/spec/components/blacklight/icons/multilinestring_component_spec.rb +15 -0
  271. data/spec/components/blacklight/icons/multipoint_component_spec.rb +15 -0
  272. data/spec/components/blacklight/icons/multipolygon_component_spec.rb +15 -0
  273. data/spec/components/blacklight/icons/northwestern_university_component_spec.rb +15 -0
  274. data/spec/components/blacklight/icons/nyu_component_spec.rb +15 -0
  275. data/spec/components/blacklight/icons/pagelines_brands_component_spec.rb +15 -0
  276. data/spec/components/blacklight/icons/paper_map_component_spec.rb +15 -0
  277. data/spec/components/blacklight/icons/parent_item_component_spec.rb +15 -0
  278. data/spec/components/blacklight/icons/pennsylvania_state_university_component_spec.rb +15 -0
  279. data/spec/components/blacklight/icons/point_component_spec.rb +15 -0
  280. data/spec/components/blacklight/icons/polygon_component_spec.rb +15 -0
  281. data/spec/components/blacklight/icons/polyline_component_spec.rb +15 -0
  282. data/spec/components/blacklight/icons/princeton_component_spec.rb +15 -0
  283. data/spec/components/blacklight/icons/public_component_spec.rb +15 -0
  284. data/spec/components/blacklight/icons/purdue_university_component_spec.rb +15 -0
  285. data/spec/components/blacklight/icons/raster_component_spec.rb +15 -0
  286. data/spec/components/blacklight/icons/restricted_component_spec.rb +15 -0
  287. data/spec/components/blacklight/icons/rutgers_component_spec.rb +15 -0
  288. data/spec/components/blacklight/icons/sms_component_spec.rb +15 -0
  289. data/spec/components/blacklight/icons/stanford_component_spec.rb +15 -0
  290. data/spec/components/blacklight/icons/table_component_spec.rb +15 -0
  291. data/spec/components/blacklight/icons/tags_component_spec.rb +15 -0
  292. data/spec/components/blacklight/icons/texas_component_spec.rb +15 -0
  293. data/spec/components/blacklight/icons/the_ohio_state_university_component_spec.rb +15 -0
  294. data/spec/components/blacklight/icons/triangle_exclamation_solid_component_spec.rb +15 -0
  295. data/spec/components/blacklight/icons/tufts_component_spec.rb +15 -0
  296. data/spec/components/blacklight/icons/ucla_component_spec.rb +15 -0
  297. data/spec/components/blacklight/icons/university_of_california_berkeley_component_spec.rb +15 -0
  298. data/spec/components/blacklight/icons/university_of_chicago_component_spec.rb +15 -0
  299. data/spec/components/blacklight/icons/university_of_colorado_boulder_component_spec.rb +15 -0
  300. data/spec/components/blacklight/icons/university_of_illinois_urbana_champaign_component_spec.rb +15 -0
  301. data/spec/components/blacklight/icons/university_of_iowa_component_spec.rb +15 -0
  302. data/spec/components/blacklight/icons/university_of_maryland_component_spec.rb +15 -0
  303. data/spec/components/blacklight/icons/university_of_michigan_component_spec.rb +15 -0
  304. data/spec/components/blacklight/icons/university_of_minnesota_component_spec.rb +15 -0
  305. data/spec/components/blacklight/icons/university_of_nebraska_lincoln_component_spec.rb +15 -0
  306. data/spec/components/blacklight/icons/university_of_wisconsin_madison_component_spec.rb +15 -0
  307. data/spec/components/blacklight/icons/uva_component_spec.rb +15 -0
  308. data/spec/components/blacklight/icons/web_services_component_spec.rb +15 -0
  309. data/spec/components/blacklight/icons/websites_component_spec.rb +15 -0
  310. data/spec/components/geoblacklight/arcgis_component_spec.rb +31 -0
  311. data/spec/components/geoblacklight/attribute_table_component_spec.rb +37 -0
  312. data/spec/components/geoblacklight/citation_component_spec.rb +37 -0
  313. data/spec/components/geoblacklight/document_component_spec.rb +92 -0
  314. data/spec/components/geoblacklight/download_links_component_spec.rb +102 -0
  315. data/spec/components/geoblacklight/header_icons_component_spec.rb +56 -0
  316. data/spec/components/geoblacklight/iiif_drag_drop_component_spec.rb +30 -0
  317. data/spec/components/geoblacklight/index_map_legend_component_spec.rb +42 -0
  318. data/spec/components/geoblacklight/item_map_viewer_component_spec.rb +36 -0
  319. data/spec/components/geoblacklight/login_link_component_spec.rb +33 -0
  320. data/spec/{lib/geoblacklight/document_presenter_spec.rb → components/geoblacklight/search_result_component_spec.rb} +19 -11
  321. data/spec/components/geoblacklight/static_map_component_spec.rb +22 -0
  322. data/spec/components/geoblacklight/viewer_help_text_component_spec.rb +28 -0
  323. data/spec/components/geoblacklight/web_services_component_spec.rb +45 -0
  324. data/spec/controllers/download_controller_spec.rb +12 -35
  325. data/spec/features/axe_spec.rb +66 -0
  326. data/spec/features/bookmarks_spec.rb +1 -1
  327. data/spec/features/citations_spec.rb +7 -3
  328. data/spec/features/download_layer_spec.rb +24 -39
  329. data/spec/features/esri_viewer_spec.rb +1 -1
  330. data/spec/features/exports_spec.rb +0 -15
  331. data/spec/features/{full_screen_controll_spec.rb → full_screen_control_spec.rb} +6 -6
  332. data/spec/features/home_page_spec.rb +12 -7
  333. data/spec/features/iiif_viewer_spec.rb +1 -1
  334. data/spec/features/index_map_spec.rb +16 -9
  335. data/spec/features/{split_view.html.erb_spec.rb → index_view_spec.rb} +15 -13
  336. data/spec/features/layer_inspection_spec.rb +2 -2
  337. data/spec/features/layer_preview_spec.rb +1 -1
  338. data/spec/features/missing_metadata_spec.rb +5 -5
  339. data/spec/features/oembed_spec.rb +2 -2
  340. data/spec/features/saved_searches_spec.rb +4 -1
  341. data/spec/features/search_results_complex_geometry_spec.rb +2 -2
  342. data/spec/features/search_results_icons_spec.rb +3 -3
  343. data/spec/features/search_results_map_spec.rb +4 -36
  344. data/spec/features/search_results_overlap_ratio_spec.rb +1 -1
  345. data/spec/features/show_page_download_spec.rb +0 -8
  346. data/spec/features/tilejson_spec.rb +2 -2
  347. data/spec/features/web_services_modal_spec.rb +57 -39
  348. data/spec/features/wmts_spec.rb +4 -4
  349. data/spec/fixtures/solr_documents/README.md +2 -1
  350. data/spec/fixtures/solr_documents/complex-geom.json +61 -0
  351. data/spec/fixtures/solr_documents/esri-tiled_map_layer.json +45 -24
  352. data/spec/fixtures/solr_documents/harvard_raster.json +1 -1
  353. data/spec/fixtures/solr_documents/multiple-downloads.json +1 -0
  354. data/spec/helpers/geoblacklight_helper_spec.rb +8 -173
  355. data/spec/lib/geoblacklight/download/csv_download_spec.rb +21 -0
  356. data/spec/lib/geoblacklight/reference_spec.rb +17 -19
  357. data/spec/lib/geoblacklight/references_spec.rb +31 -17
  358. data/spec/lib/geoblacklight/wms_layer/feature_info_response_spec.rb +8 -6
  359. data/spec/lib/geoblacklight/wms_layer_spec.rb +14 -0
  360. data/spec/models/concerns/geoblacklight/solr_document/citation_spec.rb +1 -1
  361. data/spec/models/concerns/geoblacklight/solr_document_spec.rb +1 -21
  362. data/spec/spec_helper.rb +2 -28
  363. data/spec/test_app_templates/lib/generators/test_app_generator.rb +4 -12
  364. data/template.rb +13 -11
  365. data/test/leaflet/layers.test.js +17 -0
  366. data/vite.config.ts +34 -23
  367. metadata +304 -256
  368. data/.hound.yml +0 -8
  369. data/.jshintignore +0 -2
  370. data/.jshintrc +0 -67
  371. data/.solr_wrapper +0 -6
  372. data/app/assets/images/blacklight/american-geographical-society-library-uwm-libraries.svg +0 -26
  373. data/app/assets/images/blacklight/arizona.svg +0 -4
  374. data/app/assets/images/blacklight/arrow-circle-down.svg +0 -3
  375. data/app/assets/images/blacklight/baruch-cuny.svg +0 -3
  376. data/app/assets/images/blacklight/book.svg +0 -3
  377. data/app/assets/images/blacklight/bookmark.svg +0 -3
  378. data/app/assets/images/blacklight/cd-rom.svg +0 -3
  379. data/app/assets/images/blacklight/chicago.svg +0 -4
  380. data/app/assets/images/blacklight/child-item.svg +0 -3
  381. data/app/assets/images/blacklight/circle-info-solid.svg +0 -1
  382. data/app/assets/images/blacklight/citation.svg +0 -3
  383. data/app/assets/images/blacklight/collection.svg +0 -3
  384. data/app/assets/images/blacklight/collections.svg +0 -4
  385. data/app/assets/images/blacklight/columbia.svg +0 -3
  386. data/app/assets/images/blacklight/cornell.svg +0 -5
  387. data/app/assets/images/blacklight/datasets.svg +0 -7
  388. data/app/assets/images/blacklight/dvd-rom.svg +0 -3
  389. data/app/assets/images/blacklight/email.svg +0 -3
  390. data/app/assets/images/blacklight/esri-globe.svg +0 -31
  391. data/app/assets/images/blacklight/fire-solid.svg +0 -1
  392. data/app/assets/images/blacklight/geoblacklight-icons.json +0 -3312
  393. data/app/assets/images/blacklight/george-mason.svg +0 -4
  394. data/app/assets/images/blacklight/globe.svg +0 -3
  395. data/app/assets/images/blacklight/harvard.svg +0 -3
  396. data/app/assets/images/blacklight/home.svg +0 -3
  397. data/app/assets/images/blacklight/illinois.svg +0 -4
  398. data/app/assets/images/blacklight/image.svg +0 -3
  399. data/app/assets/images/blacklight/imagery.svg +0 -4
  400. data/app/assets/images/blacklight/indiana.svg +0 -3
  401. data/app/assets/images/blacklight/iowa.svg +0 -3
  402. data/app/assets/images/blacklight/leaf.svg +0 -3
  403. data/app/assets/images/blacklight/lewis-clark.svg +0 -5
  404. data/app/assets/images/blacklight/lightbulb-solid.svg +0 -1
  405. data/app/assets/images/blacklight/line.svg +0 -4
  406. data/app/assets/images/blacklight/map-marker.svg +0 -3
  407. data/app/assets/images/blacklight/map.svg +0 -3
  408. data/app/assets/images/blacklight/maps.svg +0 -4
  409. data/app/assets/images/blacklight/maryland.svg +0 -3
  410. data/app/assets/images/blacklight/massgis.svg +0 -3
  411. data/app/assets/images/blacklight/metadata.svg +0 -3
  412. data/app/assets/images/blacklight/michigan-state-university.svg +0 -5
  413. data/app/assets/images/blacklight/michigan-state.svg +0 -4
  414. data/app/assets/images/blacklight/michigan.svg +0 -3
  415. data/app/assets/images/blacklight/minnesota.svg +0 -3
  416. data/app/assets/images/blacklight/mit.svg +0 -3
  417. data/app/assets/images/blacklight/mixed.svg +0 -5
  418. data/app/assets/images/blacklight/multilinestring.svg +0 -6
  419. data/app/assets/images/blacklight/multipoint.svg +0 -3
  420. data/app/assets/images/blacklight/multipolygon.svg +0 -6
  421. data/app/assets/images/blacklight/nebraska.svg +0 -4
  422. data/app/assets/images/blacklight/northwestern-university.svg +0 -5
  423. data/app/assets/images/blacklight/nyu.svg +0 -6
  424. data/app/assets/images/blacklight/ohio-state.svg +0 -5
  425. data/app/assets/images/blacklight/pagelines-brands.svg +0 -3
  426. data/app/assets/images/blacklight/paper-map.svg +0 -3
  427. data/app/assets/images/blacklight/parent-item.svg +0 -3
  428. data/app/assets/images/blacklight/penn-state.svg +0 -4
  429. data/app/assets/images/blacklight/pennsylvania-state-university.svg +0 -5
  430. data/app/assets/images/blacklight/point.svg +0 -3
  431. data/app/assets/images/blacklight/polygon.svg +0 -4
  432. data/app/assets/images/blacklight/polyline.svg +0 -6
  433. data/app/assets/images/blacklight/princeton.svg +0 -3
  434. data/app/assets/images/blacklight/public.svg +0 -3
  435. data/app/assets/images/blacklight/purdue-university.svg +0 -5
  436. data/app/assets/images/blacklight/purdue.svg +0 -4
  437. data/app/assets/images/blacklight/raster.svg +0 -3
  438. data/app/assets/images/blacklight/restricted.svg +0 -3
  439. data/app/assets/images/blacklight/rutgers.svg +0 -5
  440. data/app/assets/images/blacklight/sms.svg +0 -3
  441. data/app/assets/images/blacklight/stanford.svg +0 -3
  442. data/app/assets/images/blacklight/table.svg +0 -3
  443. data/app/assets/images/blacklight/tags.svg +0 -3
  444. data/app/assets/images/blacklight/texas.svg +0 -3
  445. data/app/assets/images/blacklight/the-ohio-state-university.svg +0 -6
  446. data/app/assets/images/blacklight/triangle-exclamation-solid.svg +0 -1
  447. data/app/assets/images/blacklight/tufts.svg +0 -3
  448. data/app/assets/images/blacklight/ucla.svg +0 -3
  449. data/app/assets/images/blacklight/university-of-california-berkeley.svg +0 -4
  450. data/app/assets/images/blacklight/university-of-chicago.svg +0 -5
  451. data/app/assets/images/blacklight/university-of-colorado-boulder.svg +0 -6
  452. data/app/assets/images/blacklight/university-of-illinois-urbana-champaign.svg +0 -5
  453. data/app/assets/images/blacklight/university-of-iowa.svg +0 -4
  454. data/app/assets/images/blacklight/university-of-maryland.svg +0 -4
  455. data/app/assets/images/blacklight/university-of-michigan.svg +0 -4
  456. data/app/assets/images/blacklight/university-of-minnesota.svg +0 -4
  457. data/app/assets/images/blacklight/university-of-nebraska-lincoln.svg +0 -7
  458. data/app/assets/images/blacklight/university-of-wisconsin-madison.svg +0 -4
  459. data/app/assets/images/blacklight/uva.svg +0 -3
  460. data/app/assets/images/blacklight/web_services.svg +0 -3
  461. data/app/assets/images/blacklight/websites.svg +0 -4
  462. data/app/assets/images/blacklight/wisconsin.svg +0 -3
  463. data/app/assets/javascripts/geoblacklight/basemaps.js +0 -85
  464. data/app/assets/javascripts/geoblacklight/controls/fullscreen.js +0 -8
  465. data/app/assets/javascripts/geoblacklight/controls/opacity.js +0 -6
  466. data/app/assets/javascripts/geoblacklight/controls.js +0 -1
  467. data/app/assets/javascripts/geoblacklight/downloaders/downloader.js +0 -61
  468. data/app/assets/javascripts/geoblacklight/downloaders/hgl_downloader.js +0 -32
  469. data/app/assets/javascripts/geoblacklight/downloaders.js +0 -1
  470. data/app/assets/javascripts/geoblacklight/geoblacklight.js +0 -60
  471. data/app/assets/javascripts/geoblacklight/modules/bookmarks.js +0 -43
  472. data/app/assets/javascripts/geoblacklight/modules/download.js +0 -11
  473. data/app/assets/javascripts/geoblacklight/modules/geosearch.js +0 -133
  474. data/app/assets/javascripts/geoblacklight/modules/help_text.js +0 -7
  475. data/app/assets/javascripts/geoblacklight/modules/home.js +0 -16
  476. data/app/assets/javascripts/geoblacklight/modules/item.js +0 -32
  477. data/app/assets/javascripts/geoblacklight/modules/layer_opacity.js +0 -68
  478. data/app/assets/javascripts/geoblacklight/modules/metadata.js +0 -15
  479. data/app/assets/javascripts/geoblacklight/modules/metadata_download_button.js +0 -58
  480. data/app/assets/javascripts/geoblacklight/modules/relations.js +0 -14
  481. data/app/assets/javascripts/geoblacklight/modules/results.js +0 -81
  482. data/app/assets/javascripts/geoblacklight/modules/svg_tooltips.js +0 -31
  483. data/app/assets/javascripts/geoblacklight/modules/util.js +0 -48
  484. data/app/assets/javascripts/geoblacklight/modules.js +0 -1
  485. data/app/assets/javascripts/geoblacklight/templates/index_map_download.hbs +0 -19
  486. data/app/assets/javascripts/geoblacklight/templates/index_map_info.hbs +0 -61
  487. data/app/assets/javascripts/geoblacklight/viewers/cog.js +0 -5
  488. data/app/assets/javascripts/geoblacklight/viewers/esri/dynamic_map_layer.js +0 -85
  489. data/app/assets/javascripts/geoblacklight/viewers/esri/feature_layer.js +0 -76
  490. data/app/assets/javascripts/geoblacklight/viewers/esri/image_map_layer.js +0 -14
  491. data/app/assets/javascripts/geoblacklight/viewers/esri/tiled_map_layer.js +0 -50
  492. data/app/assets/javascripts/geoblacklight/viewers/esri.js +0 -78
  493. data/app/assets/javascripts/geoblacklight/viewers/iiif.js +0 -25
  494. data/app/assets/javascripts/geoblacklight/viewers/index_map.js +0 -71
  495. data/app/assets/javascripts/geoblacklight/viewers/map.js +0 -77
  496. data/app/assets/javascripts/geoblacklight/viewers/oembed.js +0 -13
  497. data/app/assets/javascripts/geoblacklight/viewers/pmtiles.js +0 -5
  498. data/app/assets/javascripts/geoblacklight/viewers/tilejson.js +0 -33
  499. data/app/assets/javascripts/geoblacklight/viewers/tms.js +0 -10
  500. data/app/assets/javascripts/geoblacklight/viewers/viewer.js +0 -68
  501. data/app/assets/javascripts/geoblacklight/viewers/wms.js +0 -74
  502. data/app/assets/javascripts/geoblacklight/viewers/wmts.js +0 -85
  503. data/app/assets/javascripts/geoblacklight/viewers/xyz.js +0 -10
  504. data/app/assets/javascripts/geoblacklight/viewers.js +0 -1
  505. data/app/assets/stylesheets/geoblacklight/modules/mixins.scss +0 -5
  506. data/app/helpers/arcgis_helper.rb +0 -14
  507. data/app/helpers/blacklight_helper.rb +0 -11
  508. data/app/helpers/carto_helper.rb +0 -31
  509. data/app/helpers/geoblacklight/geoblacklight_helper_behavior.rb +0 -18
  510. data/app/javascript/clover/clover_initializer.js +0 -29
  511. data/app/javascript/index.js +0 -7
  512. data/app/javascript/openlayers/basemaps.js +0 -47
  513. data/app/javascript/openlayers/ol_initializer.js +0 -106
  514. data/app/javascript/stylesheets/openlayers.css +0 -1
  515. data/app/models/concerns/geoblacklight/solr_document/carto.rb +0 -17
  516. data/app/views/catalog/_arcgis.html.erb +0 -4
  517. data/app/views/catalog/_carto.html.erb +0 -4
  518. data/app/views/catalog/_data_dictionary.html.erb +0 -5
  519. data/app/views/catalog/_downloads_collapse.html.erb +0 -27
  520. data/app/views/catalog/_header_icons.html.erb +0 -3
  521. data/app/views/catalog/_index_split_default.html.erb +0 -30
  522. data/app/views/catalog/_results_pagination.html.erb +0 -12
  523. data/app/views/catalog/_show_default_attribute_table.html.erb +0 -19
  524. data/app/views/catalog/_show_default_display_note.html.erb +0 -7
  525. data/app/views/catalog/_show_default_viewer_container.html.erb +0 -28
  526. data/app/views/catalog/_show_downloads.html.erb +0 -23
  527. data/app/views/catalog/_show_header_default.html.erb +0 -4
  528. data/app/views/catalog/_show_sidebar.html.erb +0 -16
  529. data/app/views/catalog/_show_sidebar_static_map.html.erb +0 -10
  530. data/app/views/catalog/_show_web_services.html.erb +0 -11
  531. data/app/views/catalog/_web_services.html.erb +0 -9
  532. data/app/views/catalog/_web_services_wms.html.erb +0 -13
  533. data/app/views/download/hgl.html.erb +0 -27
  534. data/app/views/relation/_relations.html.erb +0 -15
  535. data/app/views/shared/_header_navbar.html.erb +0 -46
  536. data/babel.config.json +0 -4
  537. data/jest.config.js +0 -25
  538. data/lib/generators/geoblacklight/templates/assets/_blacklight.scss +0 -1
  539. data/lib/generators/geoblacklight/templates/assets/_geoblacklight.scss +0 -1
  540. data/lib/generators/geoblacklight/templates/assets/geoblacklight.js +0 -9
  541. data/lib/generators/geoblacklight/templates/clover.js +0 -5
  542. data/lib/generators/geoblacklight/templates/ol.js +0 -6
  543. data/lib/generators/geoblacklight/templates/package-test.json +0 -10
  544. data/lib/generators/geoblacklight/templates/settings.gbl_v1.yml +0 -195
  545. data/lib/geoblacklight/download/hgl_download.rb +0 -20
  546. data/lib/geoblacklight/view_helper_override.rb +0 -16
  547. data/setupJest.js +0 -14
  548. data/spec/helpers/arcgis_helper_spec.rb +0 -16
  549. data/spec/helpers/carto_helper_spec.rb +0 -13
  550. data/spec/helpers/geoblacklight/geoblacklight_helper_behavior_spec.rb +0 -27
  551. data/spec/javascripts/util_spec.js +0 -10
  552. data/spec/lib/geoblacklight/download/hgl_download_spec.rb +0 -62
  553. data/spec/lib/geoblacklight/view_helper_override_spec.rb +0 -29
  554. data/spec/models/concerns/geoblacklight/solr_document/carto_spec.rb +0 -43
  555. data/spec/test_app_templates/Gemfile.extra +0 -2
  556. data/spec/views/catalog/_document_split.html.erb_spec.rb +0 -7
  557. data/spec/views/catalog/_index_split.html.erb_spec.rb +0 -7
  558. data/spec/views/catalog/_results_pagination.html.erb_spec.rb +0 -11
  559. data/spec/views/catalog/_show_downloads.html.erb_spec.rb +0 -43
  560. data/spec/views/catalog/_show_tools.html.erb_spec.rb +0 -38
  561. data/vendor/assets/images/fullscreen.png +0 -0
  562. data/vendor/assets/images/fullscreen@2x.png +0 -0
  563. data/vendor/assets/images/layers-2x.png +0 -0
  564. data/vendor/assets/images/layers.png +0 -0
  565. data/vendor/assets/images/marker-icon-2x.png +0 -0
  566. data/vendor/assets/images/marker-icon.png +0 -0
  567. data/vendor/assets/images/marker-shadow.png +0 -0
  568. data/vendor/assets/javascripts/Leaflet.fullscreen.js +0 -152
  569. data/vendor/assets/javascripts/esri-leaflet.js +0 -12
  570. data/vendor/assets/javascripts/esri-leaflet.js.map +0 -1
  571. data/vendor/assets/javascripts/leaflet-iiif.js +0 -323
  572. data/vendor/assets/javascripts/leaflet-src.js.erb +0 -14126
  573. data/vendor/assets/javascripts/leaflet-src.js.map +0 -1
  574. data/vendor/assets/javascripts/native.history.js +0 -1
  575. data/vendor/assets/stylesheets/leaflet.css +0 -640
  576. data/vendor/assets/stylesheets/leaflet.fullscreen.css +0 -40
  577. /data/app/{views/catalog/_show_default_viewer_information.html.erb → components/geoblacklight/index_map_inspect_component.html.erb} +0 -0
@@ -0,0 +1,14 @@
1
+ <div class="index-map-legend pb-2">
2
+ <div class="index-map-legend-info">
3
+ <span class="index-map-legend-default" style="background: <%= Settings.LEAFLET.LAYERS.INDEX.DEFAULT.color %>"></span>
4
+ <p><span class="visually-hidden"><%= Settings.LEAFLET.LAYERS.INDEX.DEFAULT.sr_color_name %> tile indicates </span>Map held by collection</p>
5
+ </div>
6
+ <div class="index-map-legend-info">
7
+ <span class="index-map-legend-unavailable" style="background: <%= Settings.LEAFLET.LAYERS.INDEX.UNAVAILABLE.color %>"></span>
8
+ <p><span class="visually-hidden"><%= Settings.LEAFLET.LAYERS.INDEX.UNAVAILABLE.sr_color_name %> tile indicates </span>Map not held by collection</p>
9
+ </div>
10
+ <div class="index-map-legend-info">
11
+ <span class="index-map-legend-selected" style="background: <%= Settings.LEAFLET.LAYERS.INDEX.SELECTED.color %>"></span>
12
+ <p><span class="visually-hidden"><%= Settings.LEAFLET.LAYERS.INDEX.SELECTED.sr_color_name %> tile indicates </span>Selected map tile</p>
13
+ </div>
14
+ </div>
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Geoblacklight
4
+ ##
5
+ # A component for rendering legend for the index map
6
+ #
7
+ class IndexMapLegendComponent < ViewComponent::Base
8
+ def initialize(document:)
9
+ super
10
+ @document = document
11
+ end
12
+
13
+ def render?
14
+ @document.item_viewer.index_map
15
+ end
16
+ end
17
+ end
@@ -0,0 +1 @@
1
+ <%= display_tag %>
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Geoblacklight
4
+ class ItemMapViewerComponent < ViewComponent::Base
5
+ def initialize(document:)
6
+ super
7
+ @document = document
8
+ end
9
+
10
+ # If the conditions for this being IIIF content are met, dislay the IIIF viewer
11
+ # If it is oembed content, display the oembed viewer
12
+ # Otherwise display the base viewer which will take into account if it is open layers
13
+ # or generic content.
14
+ def display_tag
15
+ return iiif_tag if iiif?
16
+ return oembed_tag if oembed?
17
+
18
+ base_tag
19
+ end
20
+
21
+ def render?
22
+ @document
23
+ end
24
+
25
+ private
26
+
27
+ def protocol
28
+ @document.viewer_protocol&.camelize
29
+ end
30
+
31
+ def openlayers?
32
+ %w[Cog Pmtiles].include?(protocol)
33
+ end
34
+
35
+ def iiif?
36
+ %w[Iiif IiifManifest].include?(protocol)
37
+ end
38
+
39
+ def oembed?
40
+ protocol == "Oembed"
41
+ end
42
+
43
+ # Generate the viewer HTML for IIIF content
44
+ def iiif_tag
45
+ tag.div(nil,
46
+ id: "clover-viewer",
47
+ class: "viewer",
48
+ data: {
49
+ controller: "clover-viewer",
50
+ "clover-viewer-protocol-value": protocol,
51
+ "clover-viewer-url-value": @document.viewer_endpoint
52
+ })
53
+ end
54
+
55
+ # Generate the viewer HTML for oEmbed content
56
+ def oembed_tag
57
+ tag.div(nil,
58
+ id: "oembed-viewer",
59
+ class: "viewer",
60
+ data: {
61
+ controller: "oembed-viewer",
62
+ oembed_viewer_url_value: @document.viewer_endpoint
63
+ })
64
+ end
65
+
66
+ # The leaflet and openlayers viewers share a lot of the same data attributes
67
+ # so we can use a base tag for both of them and just vary a few names
68
+ def base_tag
69
+ viewer_name = openlayers? ? "openlayers-viewer" : "leaflet-viewer"
70
+ tag.div(nil,
71
+ id: viewer_name,
72
+ class: "viewer",
73
+ data: {
74
+ "controller" => viewer_name,
75
+ "#{viewer_name}-available-value" => helpers.document_available?(@document),
76
+ "#{viewer_name}-basemap-value" => helpers.geoblacklight_basemap,
77
+ "#{viewer_name}-protocol-value" => protocol,
78
+ "#{viewer_name}-url-value" => @document.viewer_endpoint,
79
+ "#{viewer_name}-map-geom-value" => @document.geometry.geojson,
80
+ "#{viewer_name}-layer-id-value" => @document.wxs_identifier,
81
+ "#{viewer_name}-options-value" => helpers.leaflet_options,
82
+ "#{viewer_name}-page-value" => params[:action]&.upcase,
83
+ "#{viewer_name}-draw-initial-bounds-value" => true
84
+ }.compact)
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Geoblacklight
4
+ class LocationLeafletMapComponent < ViewComponent::Base
5
+ def initialize(
6
+ id: "leaflet-viewer",
7
+ map_geometry: Settings.HOMEPAGE_MAP_GEOM,
8
+ classes: "",
9
+ page: nil,
10
+ geosearch: nil
11
+ )
12
+ @id = id
13
+ @classes = classes
14
+ @map_geometry = map_geometry if map_geometry != "null"
15
+ @page = page
16
+ @geosearch = geosearch
17
+ super
18
+ end
19
+
20
+ def search_bbox
21
+ return unless params[:bbox].present?
22
+
23
+ bbox = Geoblacklight::BoundingBox.new(*params[:bbox].split(" "))
24
+ bbox.to_geojson
25
+ end
26
+
27
+ # Add top-level geosearch control to leaflet options if configured
28
+ def leaflet_options
29
+ options = helpers.leaflet_options.deep_dup
30
+ options["CONTROLS"] = {"Geosearch" => @geosearch} if @geosearch
31
+ options.to_json
32
+ end
33
+
34
+ def viewer_tag
35
+ tag.div(nil,
36
+ id: @id,
37
+ class: @classes,
38
+ data: {
39
+ "controller" => "leaflet-viewer",
40
+ "leaflet-viewer-basemap-value" => helpers.geoblacklight_basemap,
41
+ "leaflet-viewer-map-geom-value" => search_bbox || @map_geometry,
42
+ "leaflet-viewer-data-map-value" => @data_map,
43
+ "leaflet-viewer-page-value" => params[:action]&.upcase,
44
+ "leaflet-viewer-options-value" => leaflet_options,
45
+ "leaflet-viewer-catalog-base-url-value" => (helpers.search_catalog_url if @geosearch)
46
+ }.compact)
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,5 @@
1
+ <div class="card authentication">
2
+ <div class="card-header">
3
+ <%= link_to t('geoblacklight.tools.login_to_view'), new_user_session_path(referrer: request.original_url), class: ['btn', 'btn-default', 'sidebar-btn'] %>
4
+ </div>
5
+ </div>
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Geoblacklight
4
+ # Display login link
5
+ class LoginLinkComponent < ViewComponent::Base
6
+ attr_reader :document
7
+
8
+ def initialize(document:)
9
+ @document = document
10
+ super
11
+ end
12
+
13
+ def render?
14
+ document.restricted? && document.same_institution? && !helpers.document_available?
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,23 @@
1
+ <div class="card relations relationship-<%= relationship_type.downcase %>">
2
+ <div class="card-header">
3
+ <h2 class="mb-0 h6"><%= t("#{rel_type_info.label}") %></h2>
4
+ </div>
5
+
6
+ <ul class="list-group list-group-flush">
7
+ <% relationship_type_results['docs'][0..2].map { |hash| SolrDocument.new(hash) }.each do |doc| %>
8
+ <li class="list-group-item border-bottom-0">
9
+ <%= link_to solr_document_path(doc) do %>
10
+ <%= relations_icon(doc, rel_type_info.icon) unless rel_type_info.icon.nil? %>
11
+ <%= doc.title %>
12
+ <% end %>
13
+ </li>
14
+ <% end %>
15
+ <% unless (relationship_type_results['numFound'].to_i <= 3) %>
16
+ <li class="list-group-item border-bottom-0">
17
+ <%= link_to search_catalog_path({f: {"#{Settings.RELATIONSHIPS_SHOWN.public_send(relationship_type).field}" => [relations.link_id]}}) do %>
18
+ <%= t('geoblacklight.relations.browse_all', count: relationship_type_results['numFound']) %>
19
+ <% end %>
20
+ </li>
21
+ <% end %>
22
+ </ul>
23
+ </div>
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Geoblacklight
4
+ # Display expandable file download links in sidebar
5
+ class RelationsComponent < ViewComponent::Base
6
+ attr_reader :relations, :relationship_type, :rel_type_info
7
+
8
+ def initialize(relations:, relationship_type:, rel_type_info:)
9
+ @relations = relations
10
+ @relationship_type = relationship_type
11
+ @rel_type_info = rel_type_info
12
+ super
13
+ end
14
+
15
+ def render?
16
+ relationship_type_results["numFound"].to_i.positive?
17
+ end
18
+
19
+ private
20
+
21
+ def relationship_type_results
22
+ @relationship_type_results ||= relations.public_send(relationship_type)
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,44 @@
1
+ <%# This template copies from Blacklight's components/document_component.html.erb
2
+ # for the wrapping `content_tag @component` structure
3
+ # and adds custom layout within for the document header, status-icons and more-info areas %>
4
+
5
+ <%= content_tag @component,
6
+ id: @id,
7
+ data: {
8
+ 'document-id': @document.id.to_s.parameterize,
9
+ 'document-counter': @counter,
10
+ 'search-results-target': 'result',
11
+ 'action': 'mouseenter->search-results#previewResultOnMap mouseleave->search-results#clearPreview'
12
+ },
13
+ itemscope: true,
14
+ itemtype: @document.itemtype,
15
+ class: classes.flatten.join(' ') do %>
16
+
17
+ <%= content_tag :div, class: 'documentHeader index-split d-flex flex-grow-1', data: { layer_id: @document.id, geom: @document.geometry.geojson } do %>
18
+ <h3 class="index_title d-flex flex-grow-1">
19
+ <span class="document-counter">
20
+ <%= t('blacklight.search.documents.counter', :counter => @counter) if @counter %>
21
+ </span>
22
+ <%= helpers.link_to_document(@document, counter: @counter, itemprop: "name") %>
23
+ </h3>
24
+
25
+ <span class='status-icons'>
26
+ <%= render Geoblacklight::HeaderIconsComponent.new(document: @document) %>
27
+ <button
28
+ class="btn dropdown-toggle collapsed"
29
+ data-bs-toggle="collapse"
30
+ data-bs-target="#doc-<%= @document.id %>-fields-collapse"
31
+ aria-label="<%= t('geoblacklight.metadata.toggle_summary') %>"
32
+ aria-expanded="false"
33
+ aria-controls="doc-<%= @document.id %>-fields-collapse">
34
+ </button>
35
+ </span>
36
+ <% end %>
37
+ <% end %>
38
+ <div class='more-info-area border-bottom'>
39
+ <div id="doc-<%= @document.id %>-fields-collapse" class='collapse'>
40
+ <small itemprop="description">
41
+ <%= index_fields_display %>
42
+ </small>
43
+ </div>
44
+ </div>
@@ -2,18 +2,21 @@
2
2
 
3
3
  module Geoblacklight
4
4
  ##
5
- # Adds custom functionality for Geoblacklight document presentation
6
- class DocumentPresenter < Blacklight::IndexPresenter
7
- include ActionView::Helpers::OutputSafetyHelper
8
- ##
5
+ # A component for rendering a single document
6
+ #
7
+ # @note when subclassing Blacklight::DocumentComponent, if you override the initializer,
8
+ # you must explicitly specify the counter variable `document_counter` even if you don't use it.
9
+ # Otherwise view_component will not provide the count value when calling the component.
10
+ #
11
+ class SearchResultComponent < Blacklight::DocumentComponent
9
12
  # Presents configured index fields in search results. Passes values through
10
13
  # configured helper_method. Multivalued fields separated by presenter
11
14
  # field_value_separator (default: comma). Fields separated by period.
12
15
  # @return [String]
13
16
  def index_fields_display
14
17
  fields_values = []
15
- @configuration.index_fields.each do |_field_name, field_config|
16
- val = field_value(field_config)
18
+ @presenter.configuration.index_fields.each do |_field_name, field_config|
19
+ val = @presenter.field_value(field_config).to_s
17
20
  if val.present?
18
21
  val += "." unless val.end_with?(".")
19
22
  fields_values << val
@@ -0,0 +1,9 @@
1
+ <div class="card">
2
+ <div class="card-header">
3
+ <%= @label %>
4
+ </div>
5
+
6
+ <div class="card-body">
7
+ <%= viewer_tag %>
8
+ </div>
9
+ </div>
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Geoblacklight
4
+ class StaticMapComponent < ViewComponent::Base
5
+ attr_reader :document
6
+
7
+ def initialize(document:, **)
8
+ @document = document
9
+ super
10
+ end
11
+
12
+ def render?
13
+ Settings.SIDEBAR_STATIC_MAP&.any? { |vp| @document.viewer_protocol == vp }
14
+ end
15
+
16
+ def before_render
17
+ @label ||= t("geoblacklight.location")
18
+ end
19
+
20
+ def viewer_tag
21
+ tag.div(nil,
22
+ id: "static-map",
23
+ aria: {
24
+ label: @label
25
+ },
26
+ data: {
27
+ "controller" => "leaflet-viewer",
28
+ "leaflet-viewer-basemap-value" => helpers.geoblacklight_basemap,
29
+ "leaflet-viewer-page-value" => "STATIC_MAP",
30
+ "leaflet-viewer-map-geom-value" => @document.geometry.geojson,
31
+ "leaflet-viewer-options-value" => helpers.leaflet_options,
32
+ "leaflet-viewer-draw-initial-bounds-value" => true
33
+ })
34
+ end
35
+ end
36
+ end
@@ -0,0 +1 @@
1
+ <%= display_text %>
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Geoblacklight
4
+ ##
5
+ # A component for rendering the help text for the viewer container
6
+ #
7
+ class ViewerHelpTextComponent < ViewComponent::Base
8
+ def initialize(feature, key)
9
+ @feature = feature
10
+ @key = key
11
+ super
12
+ end
13
+
14
+ # Retrieve i18n value
15
+ def help_text_exists?
16
+ I18n.exists?("geoblacklight.help_text.#{@feature}.#{@key}", locale)
17
+ end
18
+
19
+ def help_text_value
20
+ I18n.t("geoblacklight.help_text.#{@feature}.#{@key}")
21
+ end
22
+
23
+ def help_text_tag
24
+ help_text = help_text_value
25
+ tag.h2 class: "help-text viewer_protocol h6" do
26
+ tag.a data: {bs_toggle: "popover", bs_title: help_text[:title], bs_content: help_text[:content]} do
27
+ help_text[:title]
28
+ end
29
+ end
30
+ end
31
+
32
+ def help_text_missing_tag
33
+ tag.span class: "help-text translation-missing"
34
+ end
35
+
36
+ def display_text
37
+ return help_text_tag if help_text_exists?
38
+
39
+ help_text_missing_tag
40
+ end
41
+
42
+ def render?
43
+ Settings&.HELP_TEXT&.public_send(@feature)&.include?(@key)
44
+ end
45
+ end
46
+ end
@@ -0,0 +1 @@
1
+ <%= render_web_services %>
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Geoblacklight
4
+ class WebServicesComponent < ViewComponent::Base
5
+ with_collection_parameter :ref
6
+
7
+ def initialize(ref:, document:)
8
+ @ref = ref
9
+ @document = document
10
+ @type = ref.type.to_s
11
+ super
12
+ end
13
+
14
+ def render?
15
+ Settings.WEBSERVICES_SHOWN.include? @type
16
+ end
17
+
18
+ def render_web_services
19
+ component_class_name = "Geoblacklight::WebServices#{@type.camelize}Component"
20
+ component_class = component_class_name.constantize
21
+ render component_class.new(reference: @ref, document: @document)
22
+ rescue
23
+ render Geoblacklight::WebServicesDefaultComponent.new(reference: @ref)
24
+ end
25
+ end
26
+ end
@@ -1,13 +1,11 @@
1
- <% document ||= @document %>
2
-
3
- <div class='form-group web-services-form'>
1
+ <div class='mb-3 web-services-form'>
4
2
  <label for='<%= reference.type%>_webservice'>
5
3
  <%= "#{formatted_name_reference(reference.type)}" %>
6
4
  </label>
7
5
  <div class='input-group'>
8
- <input type='text' id='<%= reference.type%>_webservice' value='<%= reference.endpoint %>' readonly='readonly' class='form-control'>
6
+ <input type='text' id='<%= reference.type%>_webservice' value='<%= reference.endpoint %>' class='form-control'>
9
7
  <div class="input-group-append">
10
- <button button type="button" class="btn btn-primary" data-action="copyToClipboard" data-clipboard-value='<%= reference.endpoint %>'><%= t('blacklight.modal.copy') %></button>
8
+ <button button type="button" class="btn btn-primary" data-action="clipboard#copyToClipboard" data-clipboard-value-param='<%= reference.endpoint %>'><%= t('blacklight.modal.copy') %></button>
11
9
  </div>
12
10
  </div>
13
11
  </div>
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Geoblacklight
4
+ class WebServicesDefaultComponent < ViewComponent::Base
5
+ attr_reader :reference
6
+ def initialize(reference:)
7
+ @reference = reference
8
+ super
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ <div class="web-services-sidebar">
2
+ <%= web_services_link %>
3
+ </div>
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Geoblacklight
4
+ class WebServicesLinkComponent < ViewComponent::Base
5
+ def initialize(document:)
6
+ @document = document
7
+ super
8
+ end
9
+
10
+ def render?
11
+ (Settings.WEBSERVICES_SHOWN & @document.references.refs.map(&:type).map(&:to_s)).any?
12
+ end
13
+
14
+ def web_services_link
15
+ link_to "Web services",
16
+ helpers.web_services_solr_document_path(id: @document.id),
17
+ class: ["btn", "btn-primary", "sidebar-btn"],
18
+ id: "web-services-button",
19
+ data: {blacklight_modal: "trigger"}
20
+ end
21
+ end
22
+ end
@@ -1,13 +1,10 @@
1
- <% document ||= @documents.first %>
2
-
3
- <%= render partial: 'web_services_default', locals: { reference: reference } %>
4
-
5
- <div class="form-group form-inline">
6
- <label for="wfs_abv_webservice" class="mr-2"><%= t('geoblacklight.references.wfs_abv')%> <code><%= t('geoblacklight.references.wfs_label')%></code></label>
1
+ <%= render Geoblacklight::WebServicesDefaultComponent.new(reference:) %>
2
+ <div class="mb-3 d-flex align-items-center">
3
+ <label for="wfs_abv_webservice" class="me-2"><%= t('geoblacklight.references.wfs_abv')%> <code><%= t('geoblacklight.references.wfs_label')%></code></label>
7
4
  <div class='input-group'>
8
5
  <input id="wfs_abv_webservice" type='text' value='<%= document.wxs_identifier %>' readonly='readonly' class="form-control">
9
6
  <div class="input-group-append">
10
- <button button type="button" class="btn btn-primary" data-action="copyToClipboard" data-clipboard-value='<%= document.wxs_identifier %>'><%= t('blacklight.modal.copy') %></button>
7
+ <button button type="button" class="btn btn-primary" data-action="clipboard#copyToClipboard" data-clipboard-value-param='<%= document.wxs_identifier %>'><%= t('blacklight.modal.copy') %></button>
11
8
  </div>
12
9
  </div>
13
10
  </div>
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Geoblacklight
4
+ class WebServicesWfsComponent < ViewComponent::Base
5
+ attr_reader :reference, :document
6
+ def initialize(reference:, document:)
7
+ @reference = reference
8
+ @document = document
9
+ super
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,10 @@
1
+ <%= render Geoblacklight::WebServicesDefaultComponent.new(reference:) %>
2
+ <div class="mb-3 d-flex align-items-center">
3
+ <label for="wms_abv_webservice" class="me-2"><%= t('geoblacklight.references.wms_abv')%> <code><%= t('geoblacklight.references.wms_label')%></code></label>
4
+ <div class='input-group'>
5
+ <input id="wms_abv_webservice" type='text' value='<%= document.wxs_identifier %>' class="form-control">
6
+ <div class="input-group-append">
7
+ <button button type="button" class="btn btn-primary" data-action="clipboard#copyToClipboard" data-clipboard-value-param='<%= document.wxs_identifier %>'><%= t('blacklight.modal.copy') %></button>
8
+ </div>
9
+ </div>
10
+ </div>
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Geoblacklight
4
+ class WebServicesWmsComponent < ViewComponent::Base
5
+ attr_reader :reference, :document
6
+ def initialize(reference:, document:)
7
+ @reference = reference
8
+ @document = document
9
+ super
10
+ end
11
+ end
12
+ end
@@ -6,7 +6,7 @@ class DownloadController < ApplicationController
6
6
 
7
7
  rescue_from Geoblacklight::Exceptions::ExternalDownloadFailed do |exception|
8
8
  Geoblacklight.logger.error exception.message + " " + exception.url
9
- flash[:danger] = view_context
9
+ flash.now[:danger] = view_context
10
10
  .tag.span(t("geoblacklight.download.error"),
11
11
  data: {
12
12
  download: "error",
@@ -14,47 +14,29 @@ class DownloadController < ApplicationController
14
14
  download_type: "generated-#{params[:type]}"
15
15
  })
16
16
  respond_to do |format|
17
- format.json { render json: flash, response: response }
18
- format.html { render json: flash, response: response }
17
+ format.json { render json: [flash, ""], response: response, status: 500 }
18
+ format.html { render json: [flash, ""], response: response, status: 500 }
19
19
  end
20
20
  end
21
21
 
22
22
  def show
23
- @response, @document = search_service.fetch params[:id]
23
+ @document = search_service.fetch params[:id]
24
24
  restricted_should_authenticate
25
25
  response = check_type
26
26
  validate response
27
27
  respond_to do |format|
28
- format.json { render json: flash, response: response }
29
- format.html { render json: flash, response: response }
28
+ format.json { render json: [flash, download_file_path(response)], response: response }
29
+ format.html { render json: [flash, download_file_path(response)], response: response }
30
30
  end
31
31
  end
32
32
 
33
33
  def file
34
34
  # Grab the solr document to check if it should be public or not
35
- @response, @document = search_service.fetch(file_name_to_id(params[:id]))
35
+ @document = search_service.fetch(file_name_to_id(params[:id]))
36
36
  restricted_should_authenticate
37
37
  send_file download_file_path_and_name, x_sendfile: true
38
38
  end
39
39
 
40
- def hgl
41
- @response, @document = search_service.fetch params[:id]
42
- if params[:email]
43
- response = Geoblacklight::HglDownload.new(@document, params[:email]).get
44
- if response.nil?
45
- flash[:danger] = t "geoblacklight.download.error"
46
- else
47
- flash[:success] = t "geoblacklight.download.hgl_success"
48
- end
49
- respond_to do |format|
50
- format.json { render json: flash, response: response }
51
- format.html { render json: flash, response: response }
52
- end
53
- else
54
- render layout: false
55
- end
56
- end
57
-
58
40
  private
59
41
 
60
42
  def download_file_path_and_name
@@ -71,11 +53,13 @@ class DownloadController < ApplicationController
71
53
  Geoblacklight::GeojsonDownload.new(@document).get
72
54
  when "geotiff"
73
55
  Geoblacklight::GeotiffDownload.new(@document).get
56
+ when "csv"
57
+ Geoblacklight::CsvDownload.new(@document).get
74
58
  end
75
59
  end
76
60
 
77
61
  def validate(response)
78
- flash[:success] = view_context.link_to(t("geoblacklight.download.success", title: response),
62
+ flash.now[:success] = view_context.link_to(t("geoblacklight.download.success", title: response),
79
63
  download_file_path(response),
80
64
  data: {download: "trigger",
81
65
  download_id: params[:id],