geoblacklight 4.6.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 (584) 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 -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/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/helpers/geoblacklight_helper.rb +10 -247
  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 -15
  178. data/app/models/concerns/geoblacklight/solr_document/inspection.rb +1 -1
  179. data/app/models/concerns/geoblacklight/solr_document.rb +23 -59
  180. data/app/presenters/geoblacklight/bbox_item_presenter.rb +1 -1
  181. data/app/views/catalog/_citation.html.erb +16 -33
  182. data/app/views/catalog/_document_split.html.erb +18 -3
  183. data/app/views/catalog/_home_text.html.erb +2 -2
  184. data/app/views/catalog/_metadata.html.erb +1 -1
  185. data/app/views/catalog/index.html.erb +8 -4
  186. data/app/views/catalog/metadata/_markup.html.erb +1 -1
  187. data/app/views/catalog/metadata.html.erb +14 -13
  188. data/app/views/catalog/web_services.html.erb +19 -28
  189. data/app/views/relation/index.html.erb +2 -12
  190. data/app/views/relation/index.json.jbuilder +1 -1
  191. data/compose.yml +14 -0
  192. data/config/importmap.rb +20 -0
  193. data/config/locales/geoblacklight.en.yml +15 -24
  194. data/geoblacklight.gemspec +6 -6
  195. data/lib/generators/geoblacklight/assets/importmap_generator.rb +87 -0
  196. data/lib/generators/geoblacklight/assets/vite_generator.rb +90 -0
  197. data/lib/generators/geoblacklight/assets_generator.rb +12 -37
  198. data/lib/generators/geoblacklight/install_generator.rb +11 -63
  199. data/lib/generators/geoblacklight/templates/assets/_customizations.scss +13 -19
  200. data/lib/generators/geoblacklight/templates/assets/application.js +17 -0
  201. data/lib/generators/geoblacklight/templates/assets/application.scss +9 -4
  202. data/lib/generators/geoblacklight/templates/assets/geoblacklight.scss +11 -0
  203. data/lib/generators/geoblacklight/templates/base.html.erb +9 -12
  204. data/lib/generators/geoblacklight/templates/catalog_controller.rb +7 -15
  205. data/lib/generators/geoblacklight/templates/demo-app/Dockerfile +31 -0
  206. data/lib/generators/geoblacklight/templates/demo-app/compose.yml +26 -0
  207. data/lib/generators/geoblacklight/templates/demo-app/start-server.sh +21 -0
  208. data/lib/generators/geoblacklight/templates/package.json +7 -1
  209. data/lib/generators/geoblacklight/templates/settings.yml +45 -40
  210. data/lib/generators/geoblacklight/templates/vite.config.ts +22 -7
  211. data/lib/geoblacklight/bounding_box.rb +16 -0
  212. data/lib/geoblacklight/constants.rb +0 -1
  213. data/lib/geoblacklight/download/csv_download.rb +22 -0
  214. data/lib/geoblacklight/download/geojson_download.rb +1 -1
  215. data/lib/geoblacklight/download/geotiff_download.rb +1 -1
  216. data/lib/geoblacklight/download/kmz_download.rb +1 -1
  217. data/lib/geoblacklight/download/shapefile_download.rb +1 -1
  218. data/lib/geoblacklight/download.rb +1 -1
  219. data/lib/geoblacklight/engine.rb +15 -20
  220. data/lib/geoblacklight/geometry.rb +0 -7
  221. data/lib/geoblacklight/item_viewer.rb +1 -8
  222. data/lib/geoblacklight/metadata/base.rb +2 -1
  223. data/lib/geoblacklight/references.rb +27 -23
  224. data/lib/geoblacklight/routes/downloadable.rb +0 -1
  225. data/lib/geoblacklight/routes.rb +0 -3
  226. data/lib/geoblacklight/version.rb +1 -1
  227. data/lib/geoblacklight/wms_layer/feature_info_response.rb +9 -6
  228. data/lib/geoblacklight.rb +6 -47
  229. data/lib/tasks/geoblacklight.rake +24 -77
  230. data/package.json +22 -16
  231. data/solr/conf/schema.xml +15 -13
  232. data/solr/conf/solrconfig.xml +6 -4
  233. data/spec/components/blacklight/icons/american_geographical_society_library_uwm_libraries_component_spec.rb +15 -0
  234. data/spec/components/blacklight/icons/arizona_component_spec.rb +15 -0
  235. data/spec/components/blacklight/icons/arrow_circle_down_component_spec.rb +15 -0
  236. data/spec/components/blacklight/icons/baruch_cuny_component_spec.rb +15 -0
  237. data/spec/components/blacklight/icons/book_component_spec.rb +15 -0
  238. data/spec/components/blacklight/icons/bookmark_component_spec.rb +15 -0
  239. data/spec/components/blacklight/icons/cd_rom_component_spec.rb +15 -0
  240. data/spec/components/blacklight/icons/child_item_component_spec.rb +15 -0
  241. data/spec/components/blacklight/icons/circle_info_solid_component_spec.rb +15 -0
  242. data/spec/components/blacklight/icons/citation_component_spec.rb +15 -0
  243. data/spec/components/blacklight/icons/collection_component_spec.rb +15 -0
  244. data/spec/components/blacklight/icons/collections_component_spec.rb +15 -0
  245. data/spec/components/blacklight/icons/columbia_component_spec.rb +15 -0
  246. data/spec/components/blacklight/icons/cornell_component_spec.rb +15 -0
  247. data/spec/components/blacklight/icons/datasets_component_spec.rb +15 -0
  248. data/spec/components/blacklight/icons/dvd_rom_component_spec.rb +15 -0
  249. data/spec/components/blacklight/icons/email_component_spec.rb +15 -0
  250. data/spec/components/blacklight/icons/esri_globe_component_spec.rb +15 -0
  251. data/spec/components/blacklight/icons/fire_solid_component_spec.rb +15 -0
  252. data/spec/components/blacklight/icons/george_mason_component_spec.rb +15 -0
  253. data/spec/components/blacklight/icons/globe_component_spec.rb +15 -0
  254. data/spec/components/blacklight/icons/harvard_component_spec.rb +15 -0
  255. data/spec/components/blacklight/icons/home_component_spec.rb +15 -0
  256. data/spec/components/blacklight/icons/iiif_drag_drop_component_spec.rb +15 -0
  257. data/spec/components/blacklight/icons/image_component_spec.rb +15 -0
  258. data/spec/components/blacklight/icons/imagery_component_spec.rb +15 -0
  259. data/spec/components/blacklight/icons/indiana_component_spec.rb +15 -0
  260. data/spec/components/blacklight/icons/leaf_component_spec.rb +15 -0
  261. data/spec/components/blacklight/icons/lewis_clark_component_spec.rb +15 -0
  262. data/spec/components/blacklight/icons/lightbulb_solid_component_spec.rb +15 -0
  263. data/spec/components/blacklight/icons/line_component_spec.rb +15 -0
  264. data/spec/components/blacklight/icons/map_component_spec.rb +15 -0
  265. data/spec/components/blacklight/icons/map_marker_component_spec.rb +15 -0
  266. data/spec/components/blacklight/icons/maps_component_spec.rb +15 -0
  267. data/spec/components/blacklight/icons/massgis_component_spec.rb +15 -0
  268. data/spec/components/blacklight/icons/metadata_component_spec.rb +15 -0
  269. data/spec/components/blacklight/icons/michigan_state_university_component_spec.rb +15 -0
  270. data/spec/components/blacklight/icons/mit_component_spec.rb +15 -0
  271. data/spec/components/blacklight/icons/mixed_component_spec.rb +15 -0
  272. data/spec/components/blacklight/icons/multilinestring_component_spec.rb +15 -0
  273. data/spec/components/blacklight/icons/multipoint_component_spec.rb +15 -0
  274. data/spec/components/blacklight/icons/multipolygon_component_spec.rb +15 -0
  275. data/spec/components/blacklight/icons/northwestern_university_component_spec.rb +15 -0
  276. data/spec/components/blacklight/icons/nyu_component_spec.rb +15 -0
  277. data/spec/components/blacklight/icons/pagelines_brands_component_spec.rb +15 -0
  278. data/spec/components/blacklight/icons/paper_map_component_spec.rb +15 -0
  279. data/spec/components/blacklight/icons/parent_item_component_spec.rb +15 -0
  280. data/spec/components/blacklight/icons/pennsylvania_state_university_component_spec.rb +15 -0
  281. data/spec/components/blacklight/icons/point_component_spec.rb +15 -0
  282. data/spec/components/blacklight/icons/polygon_component_spec.rb +15 -0
  283. data/spec/components/blacklight/icons/polyline_component_spec.rb +15 -0
  284. data/spec/components/blacklight/icons/princeton_component_spec.rb +15 -0
  285. data/spec/components/blacklight/icons/public_component_spec.rb +15 -0
  286. data/spec/components/blacklight/icons/purdue_university_component_spec.rb +15 -0
  287. data/spec/components/blacklight/icons/raster_component_spec.rb +15 -0
  288. data/spec/components/blacklight/icons/restricted_component_spec.rb +15 -0
  289. data/spec/components/blacklight/icons/rutgers_component_spec.rb +15 -0
  290. data/spec/components/blacklight/icons/sms_component_spec.rb +15 -0
  291. data/spec/components/blacklight/icons/stanford_component_spec.rb +15 -0
  292. data/spec/components/blacklight/icons/table_component_spec.rb +15 -0
  293. data/spec/components/blacklight/icons/tags_component_spec.rb +15 -0
  294. data/spec/components/blacklight/icons/texas_component_spec.rb +15 -0
  295. data/spec/components/blacklight/icons/the_ohio_state_university_component_spec.rb +15 -0
  296. data/spec/components/blacklight/icons/triangle_exclamation_solid_component_spec.rb +15 -0
  297. data/spec/components/blacklight/icons/tufts_component_spec.rb +15 -0
  298. data/spec/components/blacklight/icons/ucla_component_spec.rb +15 -0
  299. data/spec/components/blacklight/icons/university_of_california_berkeley_component_spec.rb +15 -0
  300. data/spec/components/blacklight/icons/university_of_chicago_component_spec.rb +15 -0
  301. data/spec/components/blacklight/icons/university_of_colorado_boulder_component_spec.rb +15 -0
  302. data/spec/components/blacklight/icons/university_of_illinois_urbana_champaign_component_spec.rb +15 -0
  303. data/spec/components/blacklight/icons/university_of_iowa_component_spec.rb +15 -0
  304. data/spec/components/blacklight/icons/university_of_maryland_component_spec.rb +15 -0
  305. data/spec/components/blacklight/icons/university_of_michigan_component_spec.rb +15 -0
  306. data/spec/components/blacklight/icons/university_of_minnesota_component_spec.rb +15 -0
  307. data/spec/components/blacklight/icons/university_of_nebraska_lincoln_component_spec.rb +15 -0
  308. data/spec/components/blacklight/icons/university_of_wisconsin_madison_component_spec.rb +15 -0
  309. data/spec/components/blacklight/icons/uva_component_spec.rb +15 -0
  310. data/spec/components/blacklight/icons/web_services_component_spec.rb +15 -0
  311. data/spec/components/blacklight/icons/websites_component_spec.rb +15 -0
  312. data/spec/components/geoblacklight/arcgis_component_spec.rb +31 -0
  313. data/spec/components/geoblacklight/attribute_table_component_spec.rb +37 -0
  314. data/spec/components/geoblacklight/citation_component_spec.rb +37 -0
  315. data/spec/components/geoblacklight/document_component_spec.rb +92 -0
  316. data/spec/components/geoblacklight/download_links_component_spec.rb +102 -0
  317. data/spec/components/geoblacklight/header_icons_component_spec.rb +56 -0
  318. data/spec/components/geoblacklight/iiif_drag_drop_component_spec.rb +30 -0
  319. data/spec/components/geoblacklight/index_map_legend_component_spec.rb +42 -0
  320. data/spec/components/geoblacklight/item_map_viewer_component_spec.rb +36 -0
  321. data/spec/components/geoblacklight/login_link_component_spec.rb +33 -0
  322. data/spec/{lib/geoblacklight/document_presenter_spec.rb → components/geoblacklight/search_result_component_spec.rb} +19 -11
  323. data/spec/components/geoblacklight/static_map_component_spec.rb +22 -0
  324. data/spec/components/geoblacklight/viewer_help_text_component_spec.rb +28 -0
  325. data/spec/components/geoblacklight/web_services_component_spec.rb +45 -0
  326. data/spec/controllers/download_controller_spec.rb +12 -35
  327. data/spec/features/axe_spec.rb +66 -0
  328. data/spec/features/bookmarks_spec.rb +1 -1
  329. data/spec/features/citations_spec.rb +7 -3
  330. data/spec/features/download_layer_spec.rb +24 -39
  331. data/spec/features/esri_viewer_spec.rb +1 -1
  332. data/spec/features/exports_spec.rb +0 -15
  333. data/spec/features/{full_screen_controll_spec.rb → full_screen_control_spec.rb} +6 -6
  334. data/spec/features/home_page_spec.rb +12 -7
  335. data/spec/features/iiif_viewer_spec.rb +1 -1
  336. data/spec/features/index_map_spec.rb +16 -9
  337. data/spec/features/{split_view.html.erb_spec.rb → index_view_spec.rb} +15 -13
  338. data/spec/features/layer_inspection_spec.rb +2 -2
  339. data/spec/features/layer_preview_spec.rb +1 -1
  340. data/spec/features/missing_metadata_spec.rb +5 -5
  341. data/spec/features/oembed_spec.rb +2 -2
  342. data/spec/features/saved_searches_spec.rb +4 -1
  343. data/spec/features/search_results_complex_geometry_spec.rb +2 -2
  344. data/spec/features/search_results_icons_spec.rb +3 -3
  345. data/spec/features/search_results_map_spec.rb +4 -36
  346. data/spec/features/search_results_overlap_ratio_spec.rb +1 -1
  347. data/spec/features/show_page_download_spec.rb +0 -8
  348. data/spec/features/tilejson_spec.rb +2 -2
  349. data/spec/features/web_services_modal_spec.rb +57 -39
  350. data/spec/features/wmts_spec.rb +4 -4
  351. data/spec/fixtures/solr_documents/README.md +2 -1
  352. data/spec/fixtures/solr_documents/complex-geom.json +61 -0
  353. data/spec/fixtures/solr_documents/esri-tiled_map_layer.json +45 -24
  354. data/spec/fixtures/solr_documents/harvard_raster.json +1 -1
  355. data/spec/fixtures/solr_documents/multiple-downloads.json +1 -0
  356. data/spec/helpers/geoblacklight_helper_spec.rb +8 -173
  357. data/spec/lib/geoblacklight/download/csv_download_spec.rb +21 -0
  358. data/spec/lib/geoblacklight/geometry_spec.rb +0 -15
  359. data/spec/lib/geoblacklight/reference_spec.rb +17 -19
  360. data/spec/lib/geoblacklight/references_spec.rb +30 -40
  361. data/spec/lib/geoblacklight/wms_layer/feature_info_response_spec.rb +8 -6
  362. data/spec/lib/geoblacklight/wms_layer_spec.rb +14 -0
  363. data/spec/models/concerns/geoblacklight/solr_document/citation_spec.rb +1 -17
  364. data/spec/models/concerns/geoblacklight/solr_document_spec.rb +1 -69
  365. data/spec/spec_helper.rb +2 -31
  366. data/spec/test_app_templates/lib/generators/test_app_generator.rb +4 -4
  367. data/template.rb +13 -11
  368. data/test/leaflet/layers.test.js +17 -0
  369. data/vite.config.ts +34 -23
  370. metadata +308 -266
  371. data/.hound.yml +0 -8
  372. data/.jshintignore +0 -2
  373. data/.jshintrc +0 -67
  374. data/.solr_wrapper +0 -7
  375. data/app/assets/images/blacklight/american-geographical-society-library-uwm-libraries.svg +0 -26
  376. data/app/assets/images/blacklight/arrow-circle-down.svg +0 -3
  377. data/app/assets/images/blacklight/baruch-cuny.svg +0 -3
  378. data/app/assets/images/blacklight/book.svg +0 -3
  379. data/app/assets/images/blacklight/bookmark.svg +0 -3
  380. data/app/assets/images/blacklight/cd-rom.svg +0 -3
  381. data/app/assets/images/blacklight/chicago.svg +0 -4
  382. data/app/assets/images/blacklight/child-item.svg +0 -3
  383. data/app/assets/images/blacklight/circle-info-solid.svg +0 -1
  384. data/app/assets/images/blacklight/citation.svg +0 -3
  385. data/app/assets/images/blacklight/collection.svg +0 -3
  386. data/app/assets/images/blacklight/collections.svg +0 -4
  387. data/app/assets/images/blacklight/columbia.svg +0 -3
  388. data/app/assets/images/blacklight/cornell.svg +0 -5
  389. data/app/assets/images/blacklight/datasets.svg +0 -7
  390. data/app/assets/images/blacklight/dvd-rom.svg +0 -3
  391. data/app/assets/images/blacklight/email.svg +0 -3
  392. data/app/assets/images/blacklight/esri-globe.svg +0 -31
  393. data/app/assets/images/blacklight/fire-solid.svg +0 -1
  394. data/app/assets/images/blacklight/geoblacklight-icons.json +0 -3312
  395. data/app/assets/images/blacklight/george-mason.svg +0 -4
  396. data/app/assets/images/blacklight/globe.svg +0 -3
  397. data/app/assets/images/blacklight/harvard.svg +0 -3
  398. data/app/assets/images/blacklight/home.svg +0 -3
  399. data/app/assets/images/blacklight/illinois.svg +0 -4
  400. data/app/assets/images/blacklight/image.svg +0 -3
  401. data/app/assets/images/blacklight/imagery.svg +0 -4
  402. data/app/assets/images/blacklight/indiana.svg +0 -3
  403. data/app/assets/images/blacklight/iowa.svg +0 -3
  404. data/app/assets/images/blacklight/leaf.svg +0 -3
  405. data/app/assets/images/blacklight/lewis-clark.svg +0 -5
  406. data/app/assets/images/blacklight/lightbulb-solid.svg +0 -1
  407. data/app/assets/images/blacklight/line.svg +0 -4
  408. data/app/assets/images/blacklight/map-marker.svg +0 -3
  409. data/app/assets/images/blacklight/map.svg +0 -3
  410. data/app/assets/images/blacklight/maps.svg +0 -4
  411. data/app/assets/images/blacklight/maryland.svg +0 -3
  412. data/app/assets/images/blacklight/massgis.svg +0 -3
  413. data/app/assets/images/blacklight/metadata.svg +0 -3
  414. data/app/assets/images/blacklight/michigan-state-university.svg +0 -5
  415. data/app/assets/images/blacklight/michigan-state.svg +0 -4
  416. data/app/assets/images/blacklight/michigan.svg +0 -3
  417. data/app/assets/images/blacklight/minnesota.svg +0 -3
  418. data/app/assets/images/blacklight/mit.svg +0 -3
  419. data/app/assets/images/blacklight/mixed.svg +0 -5
  420. data/app/assets/images/blacklight/multilinestring.svg +0 -6
  421. data/app/assets/images/blacklight/multipoint.svg +0 -3
  422. data/app/assets/images/blacklight/multipolygon.svg +0 -6
  423. data/app/assets/images/blacklight/nebraska.svg +0 -4
  424. data/app/assets/images/blacklight/northwestern-university.svg +0 -5
  425. data/app/assets/images/blacklight/nyu.svg +0 -6
  426. data/app/assets/images/blacklight/ohio-state.svg +0 -5
  427. data/app/assets/images/blacklight/pagelines-brands.svg +0 -3
  428. data/app/assets/images/blacklight/paper-map.svg +0 -3
  429. data/app/assets/images/blacklight/parent-item.svg +0 -3
  430. data/app/assets/images/blacklight/penn-state.svg +0 -4
  431. data/app/assets/images/blacklight/pennsylvania-state-university.svg +0 -5
  432. data/app/assets/images/blacklight/point.svg +0 -3
  433. data/app/assets/images/blacklight/polygon.svg +0 -4
  434. data/app/assets/images/blacklight/polyline.svg +0 -6
  435. data/app/assets/images/blacklight/princeton.svg +0 -3
  436. data/app/assets/images/blacklight/public.svg +0 -3
  437. data/app/assets/images/blacklight/purdue-university.svg +0 -5
  438. data/app/assets/images/blacklight/purdue.svg +0 -4
  439. data/app/assets/images/blacklight/raster.svg +0 -3
  440. data/app/assets/images/blacklight/restricted.svg +0 -3
  441. data/app/assets/images/blacklight/rutgers.svg +0 -5
  442. data/app/assets/images/blacklight/search.svg +0 -5
  443. data/app/assets/images/blacklight/sms.svg +0 -3
  444. data/app/assets/images/blacklight/stanford.svg +0 -3
  445. data/app/assets/images/blacklight/table.svg +0 -3
  446. data/app/assets/images/blacklight/tags.svg +0 -3
  447. data/app/assets/images/blacklight/texas.svg +0 -3
  448. data/app/assets/images/blacklight/the-ohio-state-university.svg +0 -6
  449. data/app/assets/images/blacklight/triangle-exclamation-solid.svg +0 -1
  450. data/app/assets/images/blacklight/tufts.svg +0 -3
  451. data/app/assets/images/blacklight/ucla.svg +0 -3
  452. data/app/assets/images/blacklight/university-of-arizona.svg +0 -4
  453. data/app/assets/images/blacklight/university-of-california-berkeley.svg +0 -4
  454. data/app/assets/images/blacklight/university-of-chicago.svg +0 -5
  455. data/app/assets/images/blacklight/university-of-colorado-boulder.svg +0 -6
  456. data/app/assets/images/blacklight/university-of-illinois-urbana-champaign.svg +0 -5
  457. data/app/assets/images/blacklight/university-of-iowa.svg +0 -4
  458. data/app/assets/images/blacklight/university-of-maryland.svg +0 -4
  459. data/app/assets/images/blacklight/university-of-michigan.svg +0 -4
  460. data/app/assets/images/blacklight/university-of-minnesota.svg +0 -4
  461. data/app/assets/images/blacklight/university-of-nebraska-lincoln.svg +0 -7
  462. data/app/assets/images/blacklight/university-of-wisconsin-madison.svg +0 -4
  463. data/app/assets/images/blacklight/uva.svg +0 -3
  464. data/app/assets/images/blacklight/web_services.svg +0 -3
  465. data/app/assets/images/blacklight/websites.svg +0 -4
  466. data/app/assets/images/blacklight/wisconsin.svg +0 -3
  467. data/app/assets/javascripts/geoblacklight/basemaps.js +0 -85
  468. data/app/assets/javascripts/geoblacklight/controls/fullscreen.js +0 -8
  469. data/app/assets/javascripts/geoblacklight/controls/opacity.js +0 -6
  470. data/app/assets/javascripts/geoblacklight/controls.js +0 -1
  471. data/app/assets/javascripts/geoblacklight/downloaders/downloader.js +0 -61
  472. data/app/assets/javascripts/geoblacklight/downloaders/hgl_downloader.js +0 -32
  473. data/app/assets/javascripts/geoblacklight/downloaders.js +0 -1
  474. data/app/assets/javascripts/geoblacklight/geoblacklight.js +0 -60
  475. data/app/assets/javascripts/geoblacklight/modules/bookmarks.js +0 -43
  476. data/app/assets/javascripts/geoblacklight/modules/download.js +0 -11
  477. data/app/assets/javascripts/geoblacklight/modules/geosearch.js +0 -133
  478. data/app/assets/javascripts/geoblacklight/modules/help_text.js +0 -7
  479. data/app/assets/javascripts/geoblacklight/modules/home.js +0 -16
  480. data/app/assets/javascripts/geoblacklight/modules/item.js +0 -32
  481. data/app/assets/javascripts/geoblacklight/modules/layer_opacity.js +0 -68
  482. data/app/assets/javascripts/geoblacklight/modules/metadata.js +0 -15
  483. data/app/assets/javascripts/geoblacklight/modules/metadata_download_button.js +0 -58
  484. data/app/assets/javascripts/geoblacklight/modules/relations.js +0 -14
  485. data/app/assets/javascripts/geoblacklight/modules/results.js +0 -81
  486. data/app/assets/javascripts/geoblacklight/modules/svg_tooltips.js +0 -31
  487. data/app/assets/javascripts/geoblacklight/modules/util.js +0 -48
  488. data/app/assets/javascripts/geoblacklight/modules.js +0 -1
  489. data/app/assets/javascripts/geoblacklight/templates/index_map_download.hbs +0 -19
  490. data/app/assets/javascripts/geoblacklight/templates/index_map_info.hbs +0 -61
  491. data/app/assets/javascripts/geoblacklight/viewers/cog.js +0 -5
  492. data/app/assets/javascripts/geoblacklight/viewers/esri/dynamic_map_layer.js +0 -85
  493. data/app/assets/javascripts/geoblacklight/viewers/esri/feature_layer.js +0 -76
  494. data/app/assets/javascripts/geoblacklight/viewers/esri/image_map_layer.js +0 -14
  495. data/app/assets/javascripts/geoblacklight/viewers/esri/tiled_map_layer.js +0 -50
  496. data/app/assets/javascripts/geoblacklight/viewers/esri.js +0 -78
  497. data/app/assets/javascripts/geoblacklight/viewers/iiif.js +0 -25
  498. data/app/assets/javascripts/geoblacklight/viewers/index_map.js +0 -71
  499. data/app/assets/javascripts/geoblacklight/viewers/map.js +0 -77
  500. data/app/assets/javascripts/geoblacklight/viewers/oembed.js +0 -13
  501. data/app/assets/javascripts/geoblacklight/viewers/pmtiles.js +0 -5
  502. data/app/assets/javascripts/geoblacklight/viewers/tilejson.js +0 -33
  503. data/app/assets/javascripts/geoblacklight/viewers/tms.js +0 -10
  504. data/app/assets/javascripts/geoblacklight/viewers/viewer.js +0 -68
  505. data/app/assets/javascripts/geoblacklight/viewers/wms.js +0 -74
  506. data/app/assets/javascripts/geoblacklight/viewers/wmts.js +0 -85
  507. data/app/assets/javascripts/geoblacklight/viewers/xyz.js +0 -10
  508. data/app/assets/javascripts/geoblacklight/viewers.js +0 -1
  509. data/app/assets/stylesheets/geoblacklight/modules/mixins.scss +0 -5
  510. data/app/helpers/arcgis_helper.rb +0 -17
  511. data/app/helpers/blacklight_helper.rb +0 -15
  512. data/app/helpers/carto_helper.rb +0 -36
  513. data/app/helpers/geoblacklight/geoblacklight_helper_behavior.rb +0 -24
  514. data/app/javascript/clover/clover_initializer.js +0 -29
  515. data/app/javascript/index.js +0 -7
  516. data/app/javascript/openlayers/basemaps.js +0 -47
  517. data/app/javascript/openlayers/ol_initializer.js +0 -106
  518. data/app/javascript/stylesheets/openlayers.css +0 -1
  519. data/app/models/concerns/geoblacklight/solr_document/carto.rb +0 -24
  520. data/app/presenters/geoblacklight/document_presenter.rb +0 -33
  521. data/app/views/catalog/_arcgis.html.erb +0 -4
  522. data/app/views/catalog/_carto.html.erb +0 -4
  523. data/app/views/catalog/_data_dictionary.html.erb +0 -5
  524. data/app/views/catalog/_downloads_collapse.html.erb +0 -30
  525. data/app/views/catalog/_header_icons.html.erb +0 -3
  526. data/app/views/catalog/_index_split_default.html.erb +0 -30
  527. data/app/views/catalog/_results_pagination.html.erb +0 -12
  528. data/app/views/catalog/_show_default_attribute_table.html.erb +0 -19
  529. data/app/views/catalog/_show_default_display_note.html.erb +0 -7
  530. data/app/views/catalog/_show_default_viewer_container.html.erb +0 -28
  531. data/app/views/catalog/_show_downloads.html.erb +0 -26
  532. data/app/views/catalog/_show_header_default.html.erb +0 -4
  533. data/app/views/catalog/_show_sidebar.html.erb +0 -16
  534. data/app/views/catalog/_show_sidebar_static_map.html.erb +0 -13
  535. data/app/views/catalog/_show_web_services.html.erb +0 -11
  536. data/app/views/catalog/_web_services.html.erb +0 -9
  537. data/app/views/catalog/_web_services_wms.html.erb +0 -13
  538. data/app/views/download/hgl.html.erb +0 -27
  539. data/app/views/relation/_relations.html.erb +0 -15
  540. data/app/views/shared/_header_navbar.html.erb +0 -46
  541. data/babel.config.json +0 -4
  542. data/jest.config.js +0 -25
  543. data/lib/generators/geoblacklight/templates/assets/_blacklight.scss +0 -1
  544. data/lib/generators/geoblacklight/templates/assets/_geoblacklight.scss +0 -1
  545. data/lib/generators/geoblacklight/templates/assets/geoblacklight.js +0 -9
  546. data/lib/generators/geoblacklight/templates/clover.js +0 -5
  547. data/lib/generators/geoblacklight/templates/ol.js +0 -6
  548. data/lib/generators/geoblacklight/templates/package-test.json +0 -10
  549. data/lib/generators/geoblacklight/templates/settings.gbl_v1.yml +0 -195
  550. data/lib/geoblacklight/deprecated_configuration.rb +0 -519
  551. data/lib/geoblacklight/download/hgl_download.rb +0 -25
  552. data/lib/geoblacklight/view_helper_override.rb +0 -27
  553. data/setupJest.js +0 -14
  554. data/spec/helpers/arcgis_helper_spec.rb +0 -16
  555. data/spec/helpers/carto_helper_spec.rb +0 -13
  556. data/spec/helpers/geoblacklight/geoblacklight_helper_behavior_spec.rb +0 -27
  557. data/spec/javascripts/util_spec.js +0 -10
  558. data/spec/lib/geoblacklight/deprecated_configuration_spec.rb +0 -597
  559. data/spec/lib/geoblacklight/download/hgl_download_spec.rb +0 -62
  560. data/spec/lib/geoblacklight/view_helper_override_spec.rb +0 -29
  561. data/spec/models/concerns/geoblacklight/solr_document/carto_spec.rb +0 -43
  562. data/spec/test_app_templates/Gemfile.extra +0 -2
  563. data/spec/views/catalog/_document_split.html.erb_spec.rb +0 -7
  564. data/spec/views/catalog/_index_split.html.erb_spec.rb +0 -7
  565. data/spec/views/catalog/_results_pagination.html.erb_spec.rb +0 -11
  566. data/spec/views/catalog/_show_downloads.html.erb_spec.rb +0 -43
  567. data/spec/views/catalog/_show_tools.html.erb_spec.rb +0 -38
  568. data/vendor/assets/images/fullscreen.png +0 -0
  569. data/vendor/assets/images/fullscreen@2x.png +0 -0
  570. data/vendor/assets/images/layers-2x.png +0 -0
  571. data/vendor/assets/images/layers.png +0 -0
  572. data/vendor/assets/images/marker-icon-2x.png +0 -0
  573. data/vendor/assets/images/marker-icon.png +0 -0
  574. data/vendor/assets/images/marker-shadow.png +0 -0
  575. data/vendor/assets/javascripts/Leaflet.fullscreen.js +0 -152
  576. data/vendor/assets/javascripts/esri-leaflet.js +0 -12
  577. data/vendor/assets/javascripts/esri-leaflet.js.map +0 -1
  578. data/vendor/assets/javascripts/leaflet-iiif.js +0 -323
  579. data/vendor/assets/javascripts/leaflet-src.js.erb +0 -14126
  580. data/vendor/assets/javascripts/leaflet-src.js.map +0 -1
  581. data/vendor/assets/javascripts/native.history.js +0 -1
  582. data/vendor/assets/stylesheets/leaflet.css +0 -640
  583. data/vendor/assets/stylesheets/leaflet.fullscreen.css +0 -40
  584. /data/app/{views/catalog/_show_default_viewer_information.html.erb → components/geoblacklight/index_map_inspect_component.html.erb} +0 -0
@@ -1,85 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GeoblacklightHelper
4
- def document_available?
5
- @document.public? || (@document.same_institution? && user_signed_in?)
4
+ def document_available?(document = @document)
5
+ document.public? || (document.same_institution? && user_signed_in?)
6
6
  end
7
7
 
8
- # @deprecated
9
- def document_downloadable?
10
- document_available? && @document.downloadable?
11
- end
12
-
13
- # @deprecated
14
8
  def iiif_jpg_url
15
9
  @document.references.iiif.endpoint.sub! "info.json", "full/full/0/default.jpg"
16
10
  end
17
- Geoblacklight.deprecation.deprecate_methods(GeoblacklightHelper,
18
- document_downloadable?: "use Geoblacklight::DownloadLinksComponent instead",
19
- iiif_jpg_url: "use Geoblacklight::DownloadLinksComponent instead")
20
-
21
- # @deprecated
22
- def download_link_file(label, id, url)
23
- link_to(
24
- label,
25
- url,
26
- "contentUrl" => url,
27
- :data => {
28
- download: "trigger",
29
- download_type: "direct",
30
- download_id: id
31
- }
32
- )
33
- end
34
-
35
- # @deprecated
36
- def download_link_hgl(text, document)
37
- link_to(
38
- text,
39
- download_hgl_path(id: document),
40
- data: {
41
- blacklight_modal: "trigger",
42
- download: "trigger",
43
- download_type: "harvard-hgl",
44
- download_id: document.id
45
- }
46
- )
47
- end
48
-
49
- # Generates the link markup for the IIIF JPEG download
50
- # @return [String]
51
- # @deprecated
52
- def download_link_iiif
53
- Geoblacklight.deprecation.silence do
54
- link_to(
55
- download_text("JPG"),
56
- iiif_jpg_url,
57
- "contentUrl" => iiif_jpg_url,
58
- :data => {
59
- download: "trigger"
60
- }
61
- )
62
- end
63
- end
64
-
65
- # @deprecated
66
- def download_link_generated(download_type, document)
67
- link_to(
68
- t("geoblacklight.download.export_link", download_format: Geoblacklight.deprecation.silence { export_format_label(download_type) }),
69
- "",
70
- data: {
71
- download_path: download_path(document.id, type: download_type),
72
- download: "trigger",
73
- download_type: download_type,
74
- download_id: document.id
75
- }
76
- )
77
- end
78
- Geoblacklight.deprecation.deprecate_methods(GeoblacklightHelper,
79
- download_link_file: "use Geoblacklight::DownloadLinksComponent instead",
80
- download_link_iiif: "use Geoblacklight::DownloadLinksComponent instead",
81
- download_link_generated: "use Geoblacklight::DownloadLinksComponent instead",
82
- download_link_hgl: "the Harvard Geospatial Library download integration is removed without replacement in GeoBlacklight 5")
83
11
 
84
12
  ##
85
13
  # Blacklight catalog controller helper method to truncate field value to 150 chars
@@ -92,34 +20,16 @@ module GeoblacklightHelper
92
20
  ##
93
21
  # Returns an SVG icon or empty HTML span element
94
22
  # @return [SVG or HTML tag]
95
- # standard:disable Style/ArgumentsForwarding
96
- # TODO: Remove linter disable after lowest supported Ruby version >= 3.2
97
23
  def geoblacklight_icon(name, **args)
98
24
  icon_name = name ? name.to_s.parameterize : "none"
25
+ icon_name = Settings.ICON_MAPPING && Settings.ICON_MAPPING[icon_name] || icon_name
26
+ camel_icon = icon_name.tr("-", "_").camelize.delete(" ")
99
27
  begin
100
- blacklight_icon(icon_name, **args)
101
- rescue Blacklight::Exceptions::IconNotFound
28
+ render "Blacklight::Icons::#{camel_icon}Component".constantize.new(name: icon_name, **args)
29
+ rescue NameError
102
30
  tag.span class: "icon-missing geoblacklight-none"
103
31
  end
104
32
  end
105
- # standard:enable Style/ArgumentsForwarding
106
-
107
- ##
108
- # Looks up properly formatted names for formats
109
- #
110
- # @deprecated
111
- def proper_case_format(format)
112
- t("geoblacklight.formats.#{format.to_s.parameterize(separator: "_")}")
113
- end
114
-
115
- # Format labels are customized for exports - look up the appropriate key.
116
- # @deprecated
117
- def export_format_label(format)
118
- t("geoblacklight.download.export_#{format.to_s.parameterize(separator: "_")}_link")
119
- end
120
- Geoblacklight.deprecation.deprecate_methods(GeoblacklightHelper,
121
- proper_case_format: "use Geoblacklight::DownloadLinksComponent instead",
122
- export_format_label: "use Geoblacklight::DownloadLinksComponent instead")
123
33
 
124
34
  ##
125
35
  # Looks up formatted names for references
@@ -129,66 +39,6 @@ module GeoblacklightHelper
129
39
  t "geoblacklight.references.#{reference}"
130
40
  end
131
41
 
132
- ##
133
- # Wraps download text with proper_case_format
134
- #
135
- # @deprecated
136
- def download_text(format)
137
- download_format = Geoblacklight.deprecation.silence { proper_case_format(format) }
138
- value = t("geoblacklight.download.download_link", download_format: download_format)
139
- value.html_safe
140
- end
141
- Geoblacklight.deprecation.deprecate_methods(GeoblacklightHelper,
142
- download_text: "use Geoblacklight::DownloadLinksComponent instead")
143
-
144
- ##
145
- # Deteremines if a feature should include help text popover
146
- # @return [Boolean]
147
- # @deprecated
148
- def show_help_text?(feature, key)
149
- Settings&.HELP_TEXT&.send(feature)&.include?(key)
150
- end
151
-
152
- ##
153
- # Render help text popover for a given feature and translation key
154
- # @return [HTML tag]
155
- # @deprecated
156
- def render_help_text_entry(feature, key)
157
- if I18n.exists?("geoblacklight.help_text.#{feature}.#{key}", locale)
158
- help_text = I18n.t("geoblacklight.help_text.#{feature}.#{key}")
159
- tag.h3 class: "help-text viewer_protocol h6" do
160
- tag.a data: {toggle: "popover", title: help_text[:title], content: help_text[:content]} do
161
- help_text[:title]
162
- end
163
- end
164
- else
165
- tag.span class: "help-text translation-missing"
166
- end
167
- end
168
- Geoblacklight.deprecation.deprecate_methods(GeoblacklightHelper,
169
- show_help_text?: "use Geoblacklight::ViewerHelpTextComponent instead",
170
- render_help_text_entry: "use Geoblacklight::ViewerHelpTextComponent instead")
171
-
172
- ##
173
- # Determines if item view should render the sidebar static map
174
- # @return [Boolean]
175
- # @deprecated
176
- def render_sidebar_map?(document)
177
- Geoblacklight.deprecation.silence { Settings.SIDEBAR_STATIC_MAP&.any? { |vp| document.viewer_protocol == vp } }
178
- end
179
- Geoblacklight.deprecation.deprecate_methods(GeoblacklightHelper,
180
- render_sidebar_map?: "use Geoblacklight::StaticMapComponent instead")
181
-
182
- ##
183
- # Deteremines if item view should include attribute table
184
- # @return [Boolean]
185
- # @deprecated
186
- def show_attribute_table?
187
- document_available? && @document.inspectable?
188
- end
189
- Geoblacklight.deprecation.deprecate_methods(GeoblacklightHelper,
190
- show_attribute_table?: "use Geoblacklight::AttributeTableComponent instead")
191
-
192
42
  ##
193
43
  # Render value for a document's field as a truncate abstract
194
44
  # div. Arguments come from Blacklight::DocumentPresenter's
@@ -207,22 +57,6 @@ module GeoblacklightHelper
207
57
  blacklight_config.basemap_provider || "positron"
208
58
  end
209
59
 
210
- ##
211
- # Renders the partials for a Geoblacklight::Reference in the web services
212
- # modal
213
- # @param [Geoblacklight::Reference]
214
- # @deprecated
215
- def render_web_services(reference)
216
- render(
217
- partial: "web_services_#{reference.type}",
218
- locals: {reference: reference}
219
- )
220
- rescue ActionView::MissingTemplate
221
- render partial: "web_services_default", locals: {reference: reference}
222
- end
223
- Geoblacklight.deprecation.deprecate_methods(GeoblacklightHelper,
224
- render_web_services: "use Geoblacklight::WebServicesComponent instead")
225
-
226
60
  ##
227
61
  # Returns a hash of the leaflet plugin settings to pass to the viewer.
228
62
  # @return[Hash]
@@ -267,14 +101,12 @@ module GeoblacklightHelper
267
101
 
268
102
  ## Returns the icon used based off a Settings strategy
269
103
  def relations_icon(document, icon)
270
- icon_name = document[Settings.FIELDS.GEOM_TYPE] if Settings.USE_GEOM_FOR_RELATIONS_ICON
271
- icon_name = icon if icon_name.blank?
272
- icon_options = {}
273
- icon_options = {classes: "svg_tooltip"} if Settings.USE_GEOM_FOR_RELATIONS_ICON
274
- geoblacklight_icon(icon_name, **icon_options)
104
+ icon_html = render Geoblacklight::HeaderIconsComponent.new(document: document, fields: [Settings.FIELDS.GEOM_TYPE]) if Settings.USE_GEOM_FOR_RELATIONS_ICON
105
+ return icon_html unless !Settings.USE_GEOM_FOR_RELATIONS_ICON || icon_html.include?("icon-missing")
106
+ geoblacklight_icon(icon, **{})
275
107
  end
276
108
 
277
- ## Returns the data-map attribute value used as the JS map selector
109
+ ## Returns the data-page attribute value used as the JS map selector
278
110
  def results_js_map_selector(controller_name)
279
111
  case controller_name
280
112
  when "bookmarks"
@@ -283,73 +115,4 @@ module GeoblacklightHelper
283
115
  "index"
284
116
  end
285
117
  end
286
-
287
- # @deprecated
288
- def viewer_container
289
- Geoblacklight.deprecation.silence do
290
- if openlayers_container?
291
- ol_viewer
292
- elsif iiif_manifest_container?
293
- iiif_manifest_viewer
294
- else
295
- leaflet_viewer
296
- end
297
- end
298
- end
299
-
300
- # @deprecated
301
- def openlayers_container?
302
- return false unless @document
303
- @document.item_viewer.pmtiles || @document.item_viewer.cog
304
- end
305
-
306
- # @deprecated
307
- def leaflet_viewer
308
- tag.div(nil,
309
- id: "map",
310
- data: {
311
- :map => "item", :protocol => Geoblacklight.deprecation.silence { @document.viewer_protocol }.camelize,
312
- :url => @document.viewer_endpoint,
313
- "layer-id" => Geoblacklight.deprecation.silence { @document.wxs_identifier },
314
- "map-geom" => @document.geometry.geojson,
315
- "catalog-path" => search_catalog_path,
316
- :available => document_available?,
317
- :basemap => geoblacklight_basemap,
318
- :leaflet_options => leaflet_options
319
- })
320
- end
321
-
322
- # @deprecated
323
- def ol_viewer
324
- tag.div(nil,
325
- id: "ol-map",
326
- data: {
327
- :map => "item", :protocol => Geoblacklight.deprecation.silence { @document.viewer_protocol }.camelize,
328
- :url => @document.viewer_endpoint,
329
- "layer-id" => Geoblacklight.deprecation.silence { @document.wxs_identifier },
330
- "map-geom" => @document.geometry.geojson,
331
- "catalog-path" => search_catalog_path,
332
- :available => document_available?,
333
- :basemap => geoblacklight_basemap,
334
- :leaflet_options => leaflet_options
335
- })
336
- end
337
-
338
- # @deprecated
339
- def iiif_manifest_container?
340
- return false unless @document
341
- @document&.item_viewer&.viewer_preference&.key?(:iiif_manifest)
342
- end
343
-
344
- # @deprecated
345
- def iiif_manifest_viewer
346
- tag.div(nil, id: "clover-viewer", iiif_content: @document.viewer_endpoint)
347
- end
348
- Geoblacklight.deprecation.deprecate_methods(GeoblacklightHelper,
349
- viewer_container: "use Geoblacklight::ItemMapViewerComponent instead",
350
- openlayers_container?: "use Geoblacklight::ItemMapViewerComponent instead",
351
- leaflet_viewer: "use Geoblacklight::ItemMapViewerComponent instead",
352
- ol_viewer: "use Geoblacklight::ItemMapViewerComponent instead",
353
- iiif_manifest_container?: "use Geoblacklight::ItemMapViewerComponent instead",
354
- iiif_manifest_viewer: "use Geoblacklight::ItemMapViewerComponent instead")
355
118
  end
@@ -0,0 +1,11 @@
1
+ import { Controller } from "@hotwired/stimulus"
2
+
3
+ export default class extends Controller {
4
+ static targets = ["alert"];
5
+
6
+ async copyToClipboard(event) {
7
+ let text = event.params.value;
8
+ await navigator.clipboard.writeText(text)
9
+ this.alertTarget.classList.remove('d-none');
10
+ }
11
+ }
@@ -0,0 +1,47 @@
1
+ import { createElement } from "react";
2
+ import { createRoot } from "react-dom/client";
3
+ import Viewer from "@samvera/clover-iiif/viewer";
4
+ import Image from "@samvera/clover-iiif/image";
5
+ import { Controller } from "@hotwired/stimulus";
6
+
7
+ const viewerOptions = {
8
+ showTitle: false,
9
+ showIIIFBadge: false,
10
+ informationPanel: {
11
+ renderToggle: false,
12
+ renderAbout: false,
13
+ },
14
+ };
15
+
16
+ export default class CloverViewerController extends Controller {
17
+ static values = {
18
+ url: String,
19
+ protocol: String,
20
+ };
21
+
22
+ connect() {
23
+ const root = createRoot(this.element);
24
+ root.render(this.getViewer(this.protocolValue, this.urlValue));
25
+ }
26
+
27
+ getViewer(protocol, url) {
28
+ if (protocol == "Iiif") {
29
+ // Create a wrapper div with inline style, as recommended in the docs:
30
+ // https://samvera-labs.github.io/clover-iiif/docs/image#react
31
+ return createElement(
32
+ "div",
33
+ { style: { height: 400 } },
34
+ createElement(Image, {
35
+ src: url.replace(/\/info\.json$/, ""),
36
+ isTiledImage: true,
37
+ })
38
+ );
39
+ }
40
+ if (protocol == "IiifManifest")
41
+ return createElement(Viewer, {
42
+ iiifContent: url,
43
+ options: viewerOptions,
44
+ });
45
+ console.error(`Unsupported protocol name: "${protocol}"`);
46
+ }
47
+ }
@@ -0,0 +1,56 @@
1
+ import { Controller } from "@hotwired/stimulus"
2
+
3
+ export default class extends Controller {
4
+ download(ev) {
5
+ ev.preventDefault();
6
+ if (this.downloading) {
7
+ return;
8
+ }
9
+ this.downloading = true;
10
+ ev.target.classList.add('download-in-progress');
11
+ const url = ev.target.dataset.downloadPath;
12
+ ev.target.removeAttribute('href');
13
+ ev.target.innerHTML = '<div class="spinner-border spinner-border-sm float-end"></div> Preparing download...';
14
+
15
+ fetch(url)
16
+ .then((response) => {
17
+ if (!response.ok) {
18
+ return response.json().then((errorData) => {
19
+ const exception = new Error("Network response was not ok");
20
+ exception.data = errorData; // Attach the parsed JSON data to the error object
21
+ throw exception;
22
+ });
23
+ }
24
+ return response.json();
25
+ })
26
+ .then((data) => this.complete(data, ev.target))
27
+ .catch((error) => this.error(error, ev.target));
28
+ }
29
+
30
+ complete(data, target) {
31
+ this.downloading = false;
32
+ target.classList.remove('download-in-progress');
33
+ target.classList.add('download-complete');
34
+ target.innerHTML = `Download ready (${target.dataset.downloadType})`;
35
+ target.href = data[1];
36
+ this.renderMessage(data[0]);
37
+ //target.click();
38
+ }
39
+
40
+ error(exception, target) {
41
+ this.downloading = false;
42
+ target.classList.remove('download-in-progress');
43
+ target.classList.add('download-complete');
44
+ target.innerHTML = `Download failed (${target.dataset.downloadType})`;
45
+ this.renderMessage(exception.data[0]);
46
+ }
47
+
48
+ renderMessage(message) {
49
+ Object.entries(message).forEach(([idx, msg]) => {
50
+ const flash = document.createElement("div");
51
+ flash.className = `alert alert-${msg[0]}`;
52
+ flash.innerHTML = `<button type="button" class="close" data-bs-dismiss="alert" aria-hidden="true">&times;</button>${msg[1]}`;
53
+ document.querySelector("div.flash_messages").appendChild(flash);
54
+ });
55
+ }
56
+ }
@@ -0,0 +1,217 @@
1
+ import { Icon, Control } from "leaflet";
2
+ import "leaflet-fullscreen";
3
+ import { layerGroup, polygon, map, tileLayer } from "leaflet";
4
+ import { imageMapLayer } from "esri-leaflet";
5
+ import { Controller } from "@hotwired/stimulus";
6
+ import basemaps from "geoblacklight/leaflet/basemaps";
7
+ import LayerOpacityControl from "geoblacklight/leaflet/controls/layer_opacity";
8
+ import GeoSearchControl from "geoblacklight/leaflet/controls/geosearch";
9
+ import { wmsInspection,
10
+ tiledMapLayerInspection,
11
+ featureLayerInspection,
12
+ dynamicMapLayerInspection
13
+ } from "geoblacklight/leaflet/inspection";
14
+ import {
15
+ esriDynamicMapLayer,
16
+ esriFeatureLayer,
17
+ esriTiledMapLayer,
18
+ tileJsonLayer,
19
+ wmsLayer,
20
+ wmtsLayer,
21
+ indexMapLayer,
22
+ } from "geoblacklight/leaflet/layers";
23
+ import { geoJSONToBounds } from "geoblacklight/leaflet/utils";
24
+ import { DEFAULT_BOUNDS, DEFAULT_OPACITY, DEFAULT_GEOM_OVERLAY_OPTIONS } from "geoblacklight/leaflet/constants";
25
+
26
+ export default class LeafletViewerController extends Controller {
27
+ static values = {
28
+ url: String,
29
+ catalogBaseUrl: String,
30
+ protocol: String,
31
+ available: Boolean,
32
+ options: Object,
33
+ basemap: String,
34
+ mapGeom: Object,
35
+ page: String,
36
+ layerId: String,
37
+ drawInitialBounds: Boolean,
38
+ };
39
+
40
+ connect() {
41
+ // Sets leaflet icon paths to ex. /assets/marker-icon-2x-rails-fingerprint
42
+ // TODO: figure out why vite @leaftlet_images alias is not working.
43
+ Icon.Default.imagePath = "https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.9.4/images/";
44
+
45
+ // Set up layers
46
+ this.basemap = this.getBasemap();
47
+ this.overlay = layerGroup();
48
+
49
+ // Calculate bounds
50
+ this.bounds = DEFAULT_BOUNDS;
51
+ if (this.hasMapGeomValue) this.bounds = geoJSONToBounds(this.mapGeomValue);
52
+
53
+ // Load the map
54
+ this.loadMap();
55
+ }
56
+
57
+ get config() {
58
+
59
+ if (!this.optionsValue.VIEWERS || !this.hasProtocolValue) return {};
60
+ return this.optionsValue.VIEWERS[this.protocolValue.toUpperCase()];
61
+ }
62
+
63
+ // Create the map, add layers, fit the bounds
64
+ async loadMap() {
65
+ if (this.map) return;
66
+
67
+ // Set up the map and fit to bounds
68
+ this.map = map(this.element);
69
+ this.map.addLayer(this.basemap);
70
+ this.map.addLayer(this.overlay);
71
+ this.fitBounds(this.bounds);
72
+ this.map.options.selected_color = this.optionsValue.SELECTED_COLOR || 'blue';
73
+
74
+ // If the data is available, add the preview and set up inspection
75
+ // Otherwise just draw the bounds, if configured to do so
76
+ if (this.availableValue && this.protocolValue) {
77
+ await this.addPreviewOverlay();
78
+ this.addInspection();
79
+ } else if (this.drawInitialBoundsValue && this.bounds) {
80
+ this.addBoundsOverlay(this.bounds);
81
+ }
82
+
83
+ // Add configured controls
84
+ this.addControls();
85
+
86
+ if (this.protocolValue == "IndexMap"){
87
+ this.fitBounds(this.previewOverlay.getBounds())
88
+ }
89
+
90
+ // Enable geosearch handler, if available
91
+ if (this.map.geosearch) this.map.geosearch.enable();
92
+
93
+ // Emit an event for other controllers to listen to
94
+ this.dispatch("loaded");
95
+ }
96
+
97
+ // Set the bounds of the map to an L.LatLngBounds object
98
+ fitBounds(bounds) {
99
+ // prevent map from moving when setting bounds, if relevant
100
+ if (this.map.geosearch) this.map.geosearch.disable();
101
+ this.map.fitBounds(bounds, { animate: false, noMoveStart: true });
102
+ this.bounds = bounds;
103
+ if (this.map.geosearch) this.map.geosearch.enable();
104
+ this.element.dataset.bounds = this.bounds.toBBoxString();
105
+ }
106
+
107
+ // Select the configured basemap to use
108
+ getBasemap() {
109
+ const basemapName = this.basemapValue || "positron";
110
+ return tileLayer(basemaps[basemapName].url, {
111
+ ...basemaps[basemapName],
112
+ detectRetina: this.optionsValue.LAYERS.DETECT_RETINA || false,
113
+ });
114
+ }
115
+
116
+ // Add the configured controls to the map
117
+ addControls() {
118
+ // Add any top-level controls (e.g. geosearch) first
119
+ const globalControls = this.optionsValue.CONTROLS || {};
120
+ Object.entries(globalControls).forEach(([controlName, controlOptions]) => {
121
+ const control = this.getControl(controlName, controlOptions);
122
+ if (control) this.addControl(control);
123
+ });
124
+
125
+ // Add opacity and fullscreen controls for all layers
126
+ if (this.hasProtocolValue) {
127
+ if (this.availableValue){
128
+ const opacityControl = this.getControl("Opacity");
129
+ this.addControl(opacityControl);
130
+ }
131
+ const fullscreenControl = this.getControl("Fullscreen");
132
+ this.addControl(fullscreenControl);
133
+ }
134
+ }
135
+
136
+ // Add a pre-configured L.Control instance to the map
137
+ addControl(control) {
138
+ this.map.addControl(control);
139
+ }
140
+
141
+ // Look up the control name and return the corresponding L.Control instance
142
+ getControl(controlName, controlOptions) {
143
+ if (controlName == "Opacity")
144
+ return new LayerOpacityControl(this.previewOverlay);
145
+ if (controlName == "Fullscreen")
146
+ return new Control.Fullscreen({ position: "topright", ...controlOptions });
147
+ if (controlName == "Geosearch")
148
+ return new GeoSearchControl({ baseUrl: this.catalogBaseUrlValue, ...controlOptions });
149
+ console.error(`Unsupported control name: "${controlName}"`);
150
+ }
151
+
152
+ // Add the bounding box to the map
153
+ addBoundsOverlay(bounds) {
154
+ const hasMapGeomValue = Object.keys(this.mapGeomValue).length > 0 && !this.map.geosearch;
155
+ var defaultOptions = hasMapGeomValue ? DEFAULT_GEOM_OVERLAY_OPTIONS : {};
156
+ const overlayOptions = this.optionsValue.BOUNDSOVERLAY || {};
157
+ const options = {...defaultOptions, ...overlayOptions[this.pageValue]}
158
+ const boundsOverlay = polygon([
159
+ bounds.getSouthWest(),
160
+ bounds.getSouthEast(),
161
+ bounds.getNorthEast(),
162
+ bounds.getNorthWest(),
163
+ ], options
164
+ );
165
+
166
+ // Render geometry layer if available
167
+ if (hasMapGeomValue) this.map.addLayer(L.geoJSON(this.mapGeomValue, overlayOptions[this.pageValue]));
168
+
169
+ // Render the bounds overlay
170
+ this.boundsOverlay = boundsOverlay;
171
+ this.overlay.addLayer(boundsOverlay);
172
+ }
173
+
174
+ // Remove the bounding box overlay
175
+ removeBoundsOverlay() {
176
+ if (this.boundsOverlay) this.overlay.removeLayer(this.boundsOverlay);
177
+ }
178
+
179
+ addInspection() {
180
+ if (this.protocolValue == "Wms") return wmsInspection(this.map, this.urlValue, this.layerIdValue, this.previewOverlay);
181
+ if (this.protocolValue == "FeatureLayer") return featureLayerInspection(this.map, this.previewOverlay);
182
+ if (this.protocolValue == "DynamicMapLayer") return dynamicMapLayerInspection(this.map, this.previewOverlay, this.layerIdValue)
183
+ // TODO: TiledMapLayer is converted but seems busted -- see layers.js. Don't know what to test it with, need a fixture.
184
+ // if (this.protocolValue == "TiledMapLayer") return tiledMapLayerInspection(this.map, this.previewOverlay);
185
+ }
186
+
187
+ // Add the actual data to the map as a layer
188
+ async addPreviewOverlay() {
189
+ this.previewOverlay = await this.getPreviewOverlay(
190
+ this.protocolValue,
191
+ this.urlValue,
192
+ {
193
+ layerId: this.layerIdValue,
194
+ opacity: this.optionsValue.opacity || DEFAULT_OPACITY,
195
+ detectRetina: this.optionsValue.LAYERS.DETECT_RETINA || false,
196
+ }
197
+ );
198
+ if (this.previewOverlay) this.overlay.addLayer(this.previewOverlay);
199
+ }
200
+
201
+ // Generate a layer based on the protocol
202
+ async getPreviewOverlay(protocol, url, options) {
203
+ if (protocol == "DynamicMapLayer") return esriDynamicMapLayer(url, options);
204
+ if (protocol == "FeatureLayer") return esriFeatureLayer(url, options);
205
+ // imageMapLayer is a built-in method from esri-leaflet
206
+ if (protocol == "ImageMapLayer") return imageMapLayer({url, ...options});
207
+ if (protocol == "IndexMap") return await indexMapLayer(url, this.optionsValue);
208
+ if (protocol == "TiledMapLayer") return await esriTiledMapLayer(url, options);
209
+ if (protocol == "Tilejson") return await tileJsonLayer(url, options);
210
+ // tileLayer is a built-in method from leaflet
211
+ if (protocol == "Tms") return tileLayer(url, { tms: true, ...options });
212
+ if (protocol == "Wms") return wmsLayer(url, options);
213
+ if (protocol == "Wmts") return await wmtsLayer(url, options);
214
+ if (protocol == "Xyz") return tileLayer(url, options);
215
+ console.error(`Unsupported protocol name: "${protocol}"`);
216
+ }
217
+ }
@@ -0,0 +1,18 @@
1
+ import { Controller } from "@hotwired/stimulus";
2
+
3
+ export default class OembedViewerController extends Controller {
4
+ static values = {
5
+ url: String,
6
+ };
7
+
8
+ connect() {
9
+ fetch(this.urlValue)
10
+ .then((response) => response.json())
11
+ .then((data) => {
12
+ if (data) this.element.innerHTML = data.html;
13
+ })
14
+ .catch((error) => {
15
+ console.error("Error loading oEmbed data:", error);
16
+ });
17
+ }
18
+ }