geoblacklight 4.4.2 → 5.0.0

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 (579) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build-demo-app.yml +156 -0
  3. data/.github/workflows/prune-containers.yml +19 -0
  4. data/.github/workflows/ruby.yml +51 -52
  5. data/.gitignore +2 -2
  6. data/CONTRIBUTING.md +62 -44
  7. data/Gemfile +3 -28
  8. data/Rakefile +50 -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 -2
  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 +14 -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 +38 -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 -24
  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 +220 -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/controls/sleep.js +100 -0
  171. data/app/javascript/geoblacklight/leaflet/inspection.js +195 -0
  172. data/app/javascript/geoblacklight/leaflet/layer_index_map.js +120 -0
  173. data/app/javascript/geoblacklight/leaflet/layer_wmts.js +59 -0
  174. data/app/javascript/geoblacklight/leaflet/layers.js +153 -0
  175. data/app/javascript/geoblacklight/leaflet/utils.js +83 -0
  176. data/app/javascript/geoblacklight/openlayers/basemaps.js +47 -0
  177. data/app/javascript/geoblacklight/openlayers/layers.js +44 -0
  178. data/app/models/concerns/geoblacklight/solr_document/citation.rb +20 -8
  179. data/app/models/concerns/geoblacklight/solr_document.rb +22 -30
  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 +8 -7
  195. data/lib/generators/geoblacklight/assets/importmap_generator.rb +82 -0
  196. data/lib/generators/geoblacklight/assets/vite_generator.rb +92 -0
  197. data/lib/generators/geoblacklight/assets_generator.rb +12 -37
  198. data/lib/generators/geoblacklight/install_generator.rb +11 -49
  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 +6 -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/settings.yml +53 -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 +3 -28
  363. data/spec/test_app_templates/lib/generators/test_app_generator.rb +2 -20
  364. data/template.rb +20 -11
  365. data/test/leaflet/layers.test.js +17 -0
  366. data/vite.config.ts +34 -23
  367. metadata +306 -259
  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/facets.scss +0 -5
  506. data/app/assets/stylesheets/geoblacklight/modules/mixins.scss +0 -5
  507. data/app/helpers/arcgis_helper.rb +0 -14
  508. data/app/helpers/blacklight_helper.rb +0 -11
  509. data/app/helpers/carto_helper.rb +0 -31
  510. data/app/helpers/geoblacklight/geoblacklight_helper_behavior.rb +0 -18
  511. data/app/javascript/clover/clover_initializer.js +0 -29
  512. data/app/javascript/index.js +0 -7
  513. data/app/javascript/openlayers/basemaps.js +0 -47
  514. data/app/javascript/openlayers/ol_initializer.js +0 -106
  515. data/app/javascript/stylesheets/openlayers.css +0 -1
  516. data/app/models/concerns/geoblacklight/solr_document/carto.rb +0 -17
  517. data/app/views/catalog/_arcgis.html.erb +0 -4
  518. data/app/views/catalog/_carto.html.erb +0 -4
  519. data/app/views/catalog/_data_dictionary.html.erb +0 -5
  520. data/app/views/catalog/_downloads_collapse.html.erb +0 -27
  521. data/app/views/catalog/_header_icons.html.erb +0 -3
  522. data/app/views/catalog/_index_split_default.html.erb +0 -30
  523. data/app/views/catalog/_results_pagination.html.erb +0 -12
  524. data/app/views/catalog/_show_default_attribute_table.html.erb +0 -19
  525. data/app/views/catalog/_show_default_display_note.html.erb +0 -7
  526. data/app/views/catalog/_show_default_viewer_container.html.erb +0 -28
  527. data/app/views/catalog/_show_downloads.html.erb +0 -23
  528. data/app/views/catalog/_show_header_default.html.erb +0 -4
  529. data/app/views/catalog/_show_sidebar.html.erb +0 -16
  530. data/app/views/catalog/_show_sidebar_static_map.html.erb +0 -10
  531. data/app/views/catalog/_show_web_services.html.erb +0 -11
  532. data/app/views/catalog/_web_services.html.erb +0 -9
  533. data/app/views/catalog/_web_services_wms.html.erb +0 -13
  534. data/app/views/download/hgl.html.erb +0 -27
  535. data/app/views/relation/_relations.html.erb +0 -15
  536. data/app/views/shared/_header_navbar.html.erb +0 -46
  537. data/babel.config.json +0 -4
  538. data/jest.config.js +0 -25
  539. data/lib/generators/geoblacklight/templates/assets/_blacklight.scss +0 -1
  540. data/lib/generators/geoblacklight/templates/assets/_geoblacklight.scss +0 -1
  541. data/lib/generators/geoblacklight/templates/assets/geoblacklight.js +0 -9
  542. data/lib/generators/geoblacklight/templates/clover.js +0 -5
  543. data/lib/generators/geoblacklight/templates/ol.js +0 -6
  544. data/lib/generators/geoblacklight/templates/package-test.json +0 -10
  545. data/lib/generators/geoblacklight/templates/package.json +0 -10
  546. data/lib/generators/geoblacklight/templates/settings.gbl_v1.yml +0 -195
  547. data/lib/geoblacklight/download/hgl_download.rb +0 -20
  548. data/lib/geoblacklight/view_helper_override.rb +0 -16
  549. data/setupJest.js +0 -14
  550. data/spec/helpers/arcgis_helper_spec.rb +0 -16
  551. data/spec/helpers/carto_helper_spec.rb +0 -13
  552. data/spec/helpers/geoblacklight/geoblacklight_helper_behavior_spec.rb +0 -27
  553. data/spec/javascripts/util_spec.js +0 -10
  554. data/spec/lib/geoblacklight/download/hgl_download_spec.rb +0 -62
  555. data/spec/lib/geoblacklight/view_helper_override_spec.rb +0 -29
  556. data/spec/models/concerns/geoblacklight/solr_document/carto_spec.rb +0 -43
  557. data/spec/test_app_templates/Gemfile.extra +0 -2
  558. data/spec/views/catalog/_document_split.html.erb_spec.rb +0 -7
  559. data/spec/views/catalog/_index_split.html.erb_spec.rb +0 -7
  560. data/spec/views/catalog/_results_pagination.html.erb_spec.rb +0 -11
  561. data/spec/views/catalog/_show_downloads.html.erb_spec.rb +0 -43
  562. data/spec/views/catalog/_show_tools.html.erb_spec.rb +0 -38
  563. data/vendor/assets/images/fullscreen.png +0 -0
  564. data/vendor/assets/images/fullscreen@2x.png +0 -0
  565. data/vendor/assets/images/layers-2x.png +0 -0
  566. data/vendor/assets/images/layers.png +0 -0
  567. data/vendor/assets/images/marker-icon-2x.png +0 -0
  568. data/vendor/assets/images/marker-icon.png +0 -0
  569. data/vendor/assets/images/marker-shadow.png +0 -0
  570. data/vendor/assets/javascripts/Leaflet.fullscreen.js +0 -152
  571. data/vendor/assets/javascripts/esri-leaflet.js +0 -12
  572. data/vendor/assets/javascripts/esri-leaflet.js.map +0 -1
  573. data/vendor/assets/javascripts/leaflet-iiif.js +0 -323
  574. data/vendor/assets/javascripts/leaflet-src.js.erb +0 -14126
  575. data/vendor/assets/javascripts/leaflet-src.js.map +0 -1
  576. data/vendor/assets/javascripts/native.history.js +0 -1
  577. data/vendor/assets/stylesheets/leaflet.css +0 -640
  578. data/vendor/assets/stylesheets/leaflet.fullscreen.css +0 -40
  579. /data/app/{views/catalog/_show_default_viewer_information.html.erb → components/geoblacklight/index_map_inspect_component.html.erb} +0 -0
@@ -0,0 +1,153 @@
1
+ /** This file contains methods for creating the various types of leaflet and esri-leaflet layers required in leaflet_viewer_controller.
2
+ * If complex logic is needed for a certain layer type, it is broken out into its own file,
3
+ * such as layer_wmts.js for WMTS layers and layer_index_map.js for index map layers, at the same directory level as this file.
4
+ */
5
+ import { tileLayer, geoJson, circleMarker } from "leaflet";
6
+ import { dynamicMapLayer, featureLayer, tiledMapLayer } from "esri-leaflet";
7
+ import { parseWmtsCapabilities } from "geoblacklight/leaflet/layer_wmts";
8
+ import { availabilityStyle, updateInformation } from "geoblacklight/leaflet/layer_index_map";
9
+ import { getTileJsonBounds } from "geoblacklight/leaflet/utils";
10
+
11
+ // Create a leaflet tile layer for WMS
12
+ export const wmsLayer = (url, { layerId, opacity, detectRetina }) => {
13
+ return tileLayer.wms(url, {
14
+ layers: layerId,
15
+ format: "image/png",
16
+ transparent: true,
17
+ tiled: true,
18
+ CRS: "EPSG:3857",
19
+ opacity,
20
+ detectRetina,
21
+ });
22
+ };
23
+
24
+ // Fetch a WMTSCapabilities document and create a leaflet tileLayer using it
25
+ export const wmtsLayer = async (url, { opacity, detectRetina, layerId }) => {
26
+ const response = await fetch(url);
27
+ if (!response.ok)
28
+ throw new Error("Unable to fetch WMTSCapabilities document", url);
29
+
30
+ const wmtsCapabilities = await response.text();
31
+ if (!wmtsCapabilities)
32
+ throw new Error("Unable to parse WMTSCapabilities document", url);
33
+
34
+ const tileInfo = parseWmtsCapabilities(wmtsCapabilities, layerId);
35
+ const options = tileInfo.bounds ? { bounds: tileInfo.bounds } : {};
36
+ return tileLayer(tileInfo.url, {
37
+ opacity,
38
+ detectRetina,
39
+ ...options,
40
+ });
41
+ };
42
+
43
+ // Create an ESRI-leaflet dynamic map layer
44
+ export const esriDynamicMapLayer = (url, { opacity, detectRetina }) => {
45
+ // Remove any trailing slash and get the last segment from the URL
46
+ url = url.replace(/\/$/, "");
47
+ const pathArray = url.split("/");
48
+ const lastSegment = pathArray[pathArray.length - 1];
49
+
50
+ // If the last segment is an integer it's the layer ID
51
+ let layerId;
52
+ if (Number(lastSegment) === parseInt(lastSegment, 10)) {
53
+ layerId = lastSegment;
54
+ url = url.slice(0, -(lastSegment.length + 1));
55
+ }
56
+
57
+ const options = layerId ? { layers: [layerId] } : {};
58
+ return dynamicMapLayer({
59
+ url,
60
+ opacity,
61
+ detectRetina,
62
+ ...options,
63
+ });
64
+ };
65
+
66
+ // Create an ESRI-leaflet feature layer
67
+ export const esriFeatureLayer = (url, { opacity, detectRetina }) => {
68
+ return featureLayer({
69
+ url,
70
+ opacity,
71
+ detectRetina,
72
+ });
73
+ };
74
+
75
+ // Create an ESRI tiled map layer
76
+ export const esriTiledMapLayer = async (url, options) => {
77
+ const response = await fetch(url);
78
+
79
+ if (!response.ok)
80
+ throw new Error("Unable to fetch EsriTiledMapLayer document", url);
81
+
82
+ let layerInfo;
83
+ try {
84
+ layerInfo = await response.json();
85
+ } catch (error) {
86
+ throw new Error("Unable to parse TiledMapLayer document", response);
87
+ }
88
+
89
+ // For an example of tiledMapLayer data see nyu-test-soil-survey-map
90
+ // We aren't sure what the json structure looks like
91
+ // This is not rendering anything (and wasn't before we made changes) and the keys are not even present
92
+ // Check out this json: https://dnrmaps.wi.gov/arcgis2/rest/services/TS_AGOL_STAGING_SERVICES/EN_AGOL_STAGING_SurfaceWater_WTM/MapServer/2?f=pjson -- wrong protocol, now a feature map??
93
+ if (
94
+ layerInfo.singleFusedMapCache === true &&
95
+ layerInfo.spatialReference.wkid === 102100
96
+ ) {
97
+ return tiledMapLayer({ url, ...options });
98
+ }
99
+ };
100
+
101
+ // Create a leaflet tile layer
102
+ export const tileJsonLayer = async (url, options) => {
103
+ const response = await fetch(url);
104
+
105
+ if (!response.ok) {
106
+ throw new Error("Unable to fetch TiledJson document", url);
107
+ }
108
+
109
+ const layerInfo = await response.json();
110
+
111
+ const bounds = getTileJsonBounds(layerInfo);
112
+ if (bounds) options.bounds = bounds;
113
+ const tileUrl = layerInfo.tiles[0];
114
+ return tileLayer(tileUrl, options);
115
+ };
116
+
117
+ // Fetch an indexMapLayer document and create a leaflet geoJSON layer
118
+ export const indexMapLayer = async (url, leafletOptions) => {
119
+ let prevLayer = null;
120
+
121
+ const response = await fetch(url);
122
+
123
+ if (!response.ok) {
124
+ throw new Error("Unable to fetch indexMapLayer document", url);
125
+ }
126
+
127
+ const data = await response.json();
128
+
129
+ // name the const geoJSONLayer; we access it self-referentially within the method
130
+ const geoJSONLayer = geoJson(data, {
131
+ style: (feature) =>
132
+ availabilityStyle(feature.properties.available, leafletOptions),
133
+ onEachFeature: (feature, layer) => {
134
+ if (feature.properties.label !== null) {
135
+ layer.bindTooltip(feature.properties.label);
136
+ }
137
+ if (feature.properties.available !== null) {
138
+ layer.on("click", (e) => {
139
+ layer.setStyle(leafletOptions.LAYERS.INDEX.SELECTED);
140
+ if (prevLayer !== null) {
141
+ leafletOptions.opacity = layer.options.fillOpacity;
142
+ geoJSONLayer.resetStyle(prevLayer);
143
+ }
144
+ prevLayer = layer;
145
+ updateInformation(feature.properties);
146
+ });
147
+ }
148
+ },
149
+ pointToLayer: (feature, latlng) => circleMarker(latlng),
150
+ });
151
+
152
+ return geoJSONLayer;
153
+ };
@@ -0,0 +1,83 @@
1
+ import { latLngBounds, Util, geoJSON, latLng } from "leaflet";
2
+
3
+ export const bboxToBounds = (bbox) => {
4
+ bbox = bbox.split(" ");
5
+ if (bbox.length === 4) {
6
+ return latLngBounds([
7
+ [parseFloat(bbox[1]), parseFloat(bbox[0])],
8
+ [parseFloat(bbox[3]), parseFloat(bbox[2])],
9
+ ]);
10
+ } else {
11
+ throw new Error("Invalid bounding box string");
12
+ }
13
+ };
14
+
15
+ export const boundsToBbox = (bounds) => {
16
+ let sw = bounds.getSouthWest(),
17
+ ne = bounds.getNorthEast();
18
+
19
+ if (ne.lng - sw.lng >= 360) {
20
+ sw.lng = -180;
21
+ ne.lng = 180;
22
+ }
23
+ sw = sw.wrap();
24
+ ne = ne.wrap();
25
+ return [
26
+ Util.formatNum(sw.lng, 6),
27
+ Util.formatNum(sw.lat, 6),
28
+ Util.formatNum(ne.lng, 6),
29
+ Util.formatNum(ne.lat, 6),
30
+ ];
31
+ };
32
+
33
+ export const geoJSONToBounds = (geojson) => {
34
+ const layer = geoJSON(geojson);
35
+ return layer.getBounds();
36
+ };
37
+
38
+ export const debounce = (fn, delay) => {
39
+ let timeout = null;
40
+ return function (...args) {
41
+ clearTimeout(timeout);
42
+ timeout = setTimeout(() => {
43
+ fn.apply(this, args);
44
+ }, delay);
45
+ };
46
+ };
47
+
48
+ export const getTileJsonBounds = (doc) => {
49
+ const bounds = doc.bounds;
50
+ if (bounds) {
51
+ const corner1 = latLng(bounds[1], bounds[0]),
52
+ corner2 = latLng(bounds[3], bounds[2]);
53
+ return latLngBounds(corner1, corner2);
54
+ }
55
+ };
56
+
57
+ export const appendLoadingMessage = () => {
58
+ const spinner = `<tbody class="attribute-table-body"><tr><td colspan="2">
59
+ <span id="attribute-table">
60
+ <div class="spinner-border" role="status"><span class="visually-hidden">Inspecting</span></div>
61
+ </span>
62
+ </td></tr></tbody>`;
63
+
64
+ document.querySelector(".attribute-table-body").innerHTML = spinner;
65
+ };
66
+
67
+ export const appendErrorMessage = () => {
68
+ document.querySelector(
69
+ ".attribute-table-body"
70
+ ).innerHTML = `<tbody class="attribute-table-body">
71
+ <tr><td colspan="2">Could not find that feature</td></tr></tbody>`;
72
+ };
73
+
74
+ // Looks for strings that could be URLs and wraps them in <a> tags
75
+ export const linkify = (str) => {
76
+ if (!str) return '';
77
+ const urlRegEx = /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-]*)?\??(?:[\-\+=&;%@\.\w]*)#?(?:[\.\!\/\\\w]*))?)/g;
78
+ return str.toString().replace(urlRegEx, '<a href=\'$1\'>$1</a>');
79
+ }
80
+
81
+ export const getLayerOpacity = (layer) => {
82
+ return layer.options.fillOpacity ? layer.options.fillOpacity : layer.options.opacity;
83
+ }
@@ -0,0 +1,47 @@
1
+ export default {
2
+ darkMatter: {
3
+ url:'https://{a-d}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png',
4
+ attributions: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors, &copy; <a href="http://carto.com/attributionss">Carto</a>',
5
+ maxZoom: 18
6
+ },
7
+ positron: {
8
+ url: 'https://{a-d}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png',
9
+ attributions: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors, &copy; <a href="http://carto.com/attributionss">Carto</a>',
10
+ maxZoom: 18
11
+ },
12
+ positronLite: {
13
+ url: 'https://{a-d}.basemaps.cartocdn.com/light_nolabels/{z}/{x}/{y}.png',
14
+ attributions: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors, &copy; <a href="http://carto.com/attributionss">Carto</a>',
15
+ maxZoom: 18
16
+ },
17
+ worldAntique: {
18
+ url: 'https://cartocdn_{a-d}.global.ssl.fastly.net/base-antique/{z}/{x}/{y}.png',
19
+ attributions: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors, &copy; <a href="http://carto.com/attributionss">Carto</a>',
20
+ maxZoom: 18
21
+ },
22
+ worldEco: {
23
+ url: 'https://cartocdn_{a-d}.global.ssl.fastly.net/base-eco/{z}/{x}/{y}.png',
24
+ attributions: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors, &copy; <a href="http://carto.com/attributionss">Carto</a>',
25
+ maxZoom: 18
26
+ },
27
+ flatBlue: {
28
+ url: 'https://cartocdn_{a-d}.global.ssl.fastly.net/base-flatblue/{z}/{x}/{y}.png',
29
+ attributions: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors, &copy; <a href="http://carto.com/attributionss">Carto</a>',
30
+ maxZoom: 18
31
+ },
32
+ midnightCommander: {
33
+ url: 'https://cartocdn_{a-d}.global.ssl.fastly.net/base-midnight/{z}/{x}/{y}.png',
34
+ attributions: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors, &copy; <a href="http://carto.com/attributionss">Carto</a>',
35
+ maxZoom: 18
36
+ },
37
+ openstreetmapHot: {
38
+ url: 'https://{a-c}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',
39
+ attributions: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>, Tiles courtesy of <a href="http://hot.openstreetmap.org/" target="_blank">Humanitarian OpenStreetMap Team</a>',
40
+ maxZoom: 19
41
+ },
42
+ openstreetmapStandard: {
43
+ url: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png',
44
+ attributions: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',
45
+ maxZoom: 19
46
+ }
47
+ }
@@ -0,0 +1,44 @@
1
+ import VectorTile from "ol/layer/VectorTile";
2
+ import { Style, Stroke, Fill, Circle } from "ol/style";
3
+ import { PMTilesVectorSource } from "ol-pmtiles";
4
+ import { useGeographic } from "ol/proj";
5
+ import GeoTIFF from "ol/source/GeoTIFF";
6
+ import WebGLTileLayer from "ol/layer/WebGLTile";
7
+
8
+ // Create a new PMTiles layer
9
+ export const pmTilesLayer = (url) => {
10
+ useGeographic();
11
+ return new VectorTile({
12
+ declutter: true,
13
+ source: new PMTilesVectorSource({ url }),
14
+ style: new Style({
15
+ stroke: new Stroke({
16
+ color: "#7070B3",
17
+ width: 1,
18
+ }),
19
+ fill: new Fill({
20
+ color: "#FFFFFF",
21
+ }),
22
+ image: new Circle({
23
+ radius: 7,
24
+ fill: new Fill({
25
+ color: "#7070B3",
26
+ }),
27
+ stroke: new Stroke({
28
+ color: "#FFFFFF",
29
+ width: 2,
30
+ }),
31
+ }),
32
+ }),
33
+ });
34
+ };
35
+
36
+ // Create a new cloud-optimized GeoTIFF (COG) layer
37
+ export const cogLayer = (url) => {
38
+ return new WebGLTileLayer({
39
+ source: new GeoTIFF({
40
+ sources: [{ url }],
41
+ convertToRGB: true,
42
+ }),
43
+ });
44
+ };
@@ -7,23 +7,35 @@ module Geoblacklight
7
7
 
8
8
  def geoblacklight_citation(solr_document_url)
9
9
  [
10
- fetch(Settings.FIELDS.CREATOR, nil),
10
+ creator,
11
11
  ("(#{issued})" if issued),
12
- fetch(Settings.FIELDS.TITLE, nil),
12
+ title,
13
13
  ("[#{format}]" if format),
14
- fetch(Settings.FIELDS.PUBLISHER, nil),
15
- I18n.t("geoblacklight.citation.retrieved_from", document_url: solr_document_url)
14
+ publisher,
15
+ citation_link(solr_document_url)
16
16
  ].flatten.compact.join(". ")
17
17
  end
18
18
 
19
19
  private
20
20
 
21
- def issued
22
- fetch(Settings.FIELDS.DATE_ISSUED, nil)
21
+ # The actual citation link varies based on what is available in the document
22
+ # go through a list of potential links in order of preference, ending with the solr_document_url
23
+ def citation_link(solr_document_url)
24
+ identifier_url || reference_url || solr_document_url
23
25
  end
24
26
 
25
- def format
26
- fetch(Settings.FIELDS.FORMAT, nil)
27
+ # identifier url in solr document (if it exists)
28
+ def identifier_url
29
+ # find any identifier that look like a URL, return if found (could be DOI, Stanford PURL, etc)
30
+ identifiers.find { |identifier| identifier if identifier.starts_with?("https://") }
31
+ end
32
+
33
+ # Examine the list of references (in dct_references_s) to find a "schema.org/url"; return URL if found
34
+ # References are retrieved from the SolrDocument as an array of Geoblacklight::Reference
35
+ # where the "reference" attribute is an array of two elements, the first being the type and the second being the url
36
+ def reference_url
37
+ url = references.refs.find { |ref| ref.reference[0] == "http://schema.org/url" }
38
+ url.present? ? url.reference[1] : nil
27
39
  end
28
40
  end
29
41
  end
@@ -4,9 +4,8 @@ module Geoblacklight
4
4
  # Extends Blacklight::Solr::Document for GeoBlacklight specific functionality
5
5
  module SolrDocument
6
6
  extend Blacklight::Solr::Document
7
-
7
+ extend ActiveSupport::Concern
8
8
  include Geoblacklight::SolrDocument::Finder
9
- include Geoblacklight::SolrDocument::Carto
10
9
  include Geoblacklight::SolrDocument::Inspection
11
10
  include Geoblacklight::SolrDocument::Arcgis
12
11
  include Geoblacklight::SolrDocument::Citation
@@ -15,16 +14,33 @@ module Geoblacklight
15
14
  delegate :viewer_protocol, to: :item_viewer
16
15
  delegate :viewer_endpoint, to: :item_viewer
17
16
 
17
+ included do
18
+ attribute :display_note, :array, Settings.FIELDS.DISPLAY_NOTE
19
+ attribute :geom_field, :string, Settings.FIELDS.GEOMETRY
20
+ attribute :wxs_identifier, :string, Settings.FIELDS.WXS_IDENTIFIER
21
+ attribute :file_format, :string, Settings.FIELDS.FORMAT
22
+ attribute :rights_field_data, :string, Settings.FIELDS.ACCESS_RIGHTS
23
+ attribute :provider, :string, Settings.FIELDS.PROVIDER
24
+ attribute :resource_type, :array, Settings.FIELDS.RESOURCE_TYPE
25
+ attribute :resource_class, :array, Settings.FIELDS.RESOURCE_CLASS
26
+ attribute :title, :string, Settings.FIELDS.TITLE
27
+ attribute :creator, :array, Settings.FIELDS.CREATOR
28
+ attribute :publisher, :string, Settings.FIELDS.PUBLISHER
29
+ attribute :identifiers, :array, Settings.FIELDS.IDENTIFIER
30
+ attribute :issued, :string, Settings.FIELDS.DATE_ISSUED
31
+ attribute :format, :string, Settings.FIELDS.FORMAT
32
+ end
33
+
18
34
  def available?
19
35
  public? || same_institution?
20
36
  end
21
37
 
22
38
  def public?
23
- rights_field_data.present? && rights_field_data.casecmp("public").zero?
39
+ rights_field_data&.casecmp?("public")
24
40
  end
25
41
 
26
42
  def restricted?
27
- rights_field_data.blank? || rights_field_data.casecmp("restricted").zero?
43
+ !rights_field_data || rights_field_data.casecmp?("restricted")
28
44
  end
29
45
 
30
46
  def downloadable?
@@ -39,20 +55,12 @@ module Geoblacklight
39
55
  references.download.to_hash if references.download.present?
40
56
  end
41
57
 
42
- def display_note
43
- fetch(Settings.FIELDS.DISPLAY_NOTE, "")
44
- end
45
-
46
- def hgl_download
47
- references.hgl.to_hash if references.hgl.present?
48
- end
49
-
50
58
  def oembed
51
59
  references.oembed.endpoint if references.oembed.present?
52
60
  end
53
61
 
54
62
  def same_institution?
55
- fetch(Settings.FIELDS.PROVIDER, "").casecmp(Settings.INSTITUTION.downcase).zero?
63
+ provider&.casecmp?(Settings.INSTITUTION.downcase)
56
64
  end
57
65
 
58
66
  def iiif_download
@@ -75,38 +83,22 @@ module Geoblacklight
75
83
  "http://schema.org/Dataset"
76
84
  end
77
85
 
78
- def geom_field
79
- fetch(Settings.FIELDS.GEOMETRY, "")
80
- end
81
-
82
86
  def geometry
83
87
  @geometry ||= Geoblacklight::Geometry.new(geom_field)
84
88
  end
85
89
 
86
- def wxs_identifier
87
- fetch(Settings.FIELDS.WXS_IDENTIFIER, "")
88
- end
89
-
90
- def file_format
91
- fetch(Settings.FIELDS.FORMAT)
92
- end
93
-
94
90
  ##
95
91
  # Provides a convenience method to access a SolrDocument's References
96
92
  # endpoint url without having to check and see if it is available
97
93
  # :type => a string which if its a Geoblacklight::Constants::URI key
98
94
  # will return a coresponding Geoblacklight::Reference
99
95
  def checked_endpoint(type)
100
- type = references.send(type)
96
+ type = references.public_send(type)
101
97
  type.endpoint if type.present?
102
98
  end
103
99
 
104
100
  private
105
101
 
106
- def rights_field_data
107
- fetch(Settings.FIELDS.ACCESS_RIGHTS, "")
108
- end
109
-
110
102
  def method_missing(method, *args, &block)
111
103
  if /.*_url$/.match?(method.to_s)
112
104
  checked_endpoint(method.to_s.gsub("_url", ""))
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Geoblacklight
4
4
  class BboxItemPresenter < Blacklight::FacetItemPresenter
5
- def label
5
+ def value
6
6
  super.to_param
7
7
  end
8
8
  end
@@ -1,36 +1,19 @@
1
- <div data-controller="clipboard">
2
- <div class="modal-header">
3
- <h1><%= t('blacklight.tools.citation') %></h1>
4
- <button type="button" class="blacklight-modal-close close" data-dismiss="modal" aria-label="<%= t('blacklight.modal.close') %>">
5
- <span aria-hidden="true">&times;</span>
6
- </button>
7
- </div>
8
- <div class="modal-body" data-clipboard-target="source">
9
- <div class="alert alert-info d-none" role="alert">
1
+ <%= render Blacklight::System::ModalComponent.new do |component| %>
2
+ <% component.with_title do %>
3
+ <%= t('blacklight.tools.citation') %>
4
+ <% end %>
5
+ <div data-controller="clipboard">
6
+ <div class="alert alert-info alert-dismissible d-none" data-clipboard-target="alert" role="alert">
10
7
  <%= t('geoblacklight.clipboard.citation') %>
11
- <button type="button" class="close" data-dismiss="alert" aria-label="Close">
12
- <span aria-hidden="true">&times;</span>
13
- </button>
8
+ <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
9
+ </div>
10
+ <% citation = render Geoblacklight::Document::CitationComponent.with_collection(@documents) if @documents %>
11
+ <div class="d-inline">
12
+ <%= citation %>
13
+ </div>
14
+ <div class="modal-footer">
15
+ <button type="button" class="btn btn-primary" data-action="clipboard#copyToClipboard" data-clipboard-value-param="<%= citation %>"><%= t('geoblacklight.modal.copy-citation') %></button>
16
+ <button type="button" class="btn btn-secondary" data-bl-dismiss="modal"><%= t('blacklight.modal.close') %></button>
14
17
  </div>
15
-
16
- <%= t('blacklight.tools.citation_info') %>
17
- <% @documents&.each do |document| %>
18
- <%= document.geoblacklight_citation(solr_document_url(document)) %>
19
- <% end %>
20
- </div>
21
- <div class="modal-footer">
22
- <button type="button" class="btn btn-primary" data-action="copyToClipboard"><%= t('blacklight.modal.copy-citation') %></button>
23
- <button type="button" class="btn btn-secondary" data-dismiss="modal"><%= t('blacklight.modal.close') %></button>
24
18
  </div>
25
- </div>
26
-
27
- <script>
28
- $('[data-action="copyToClipboard"]').on('click', function() {
29
- let text = $('[data-clipboard-target="source"]').text().trim()
30
- navigator.clipboard.writeText(text)
31
- .then(() => {
32
- $('.alert').removeClass('d-none');
33
- })
34
- });
35
- </script>
36
-
19
+ <% end %>
@@ -1,6 +1,21 @@
1
1
  <div class='row'>
2
- <div id="documents" class="documents-list col-md-6">
3
- <%= render documents, :as => :document %>
2
+ <div
3
+ id="documents"
4
+ class="documents-list col-md-6"
5
+ data-controller="search-results"
6
+ data-action="leaflet-viewer:loaded@window->search-results#fitResultBounds"
7
+ data-search-results-leaflet-viewer-outlet=".leaflet-viewer"
8
+ >
9
+ <div id="documents-container">
10
+ <% document_presenters = documents.map { |doc| document_presenter(doc) } -%>
11
+ <% document_presenters.each_with_index do |presenter, index| %>
12
+ <%= render blacklight_config.index.document_component.new(document: presenter, document_counter: index) %>
13
+ <% end %>
14
+ </div>
4
15
  </div>
5
- <%= content_tag :div, '', id: 'map', class: 'col-md-6', aria: { label: t('geoblacklight.map.label') }, data: { map: results_js_map_selector(controller.controller_name), 'catalog-path'=> search_catalog_path , 'map-bbox' => params[:bbox], basemap: geoblacklight_basemap, leaflet_options: leaflet_options } %>
16
+ <% if results_js_map_selector(controller.controller_name) == "index" %>
17
+ <%= render(Geoblacklight::LocationLeafletMapComponent.new(page: 'index', geosearch: { dynamic: true }, classes: 'col-md-6 sticky-top position-sticky leaflet-viewer')) %>
18
+ <% else %>
19
+ <%= render(Geoblacklight::LocationLeafletMapComponent.new(page: 'index', classes: 'col-md-6 leaflet-viewer')) %>
20
+ <% end %>
6
21
  </div>
@@ -15,10 +15,10 @@
15
15
  </div>
16
16
  <div class='col-sm'>
17
17
  <%= content_tag :h3, t('geoblacklight.home.map_heading') %>
18
- <%= content_tag :div, '', id: 'map', aria: { label: t('geoblacklight.map.label') }, data: { map: 'home', 'catalog-path'=> search_catalog_path , 'map-geom' => Settings.HOMEPAGE_MAP_GEOM, basemap: geoblacklight_basemap, leaflet_options: leaflet_options } %>
18
+ <%= render(Geoblacklight::LocationLeafletMapComponent.new(page: 'home', geosearch: { dynamic: false })) %>
19
19
  </div>
20
20
  </div>
21
- <div id="geoblacklight-version" class="text-right">
21
+ <div id="geoblacklight-version" class="text-end">
22
22
  <%= t('geoblacklight.home.version', version: Geoblacklight::VERSION ) %>
23
23
  </div>
24
24
  </div>
@@ -9,7 +9,7 @@
9
9
  href="#<%= metadata.type %>"
10
10
  aria-controls="<%= metadata.type %>"
11
11
  role="tab"
12
- data-toggle="pill"
12
+ data-bs-toggle="pill"
13
13
  data-ref-endpoint="<%= metadata.endpoint %>"
14
14
  data-ref-download="#btn-metadata-download"><%= formatted_name_reference(metadata.type) %></a>
15
15
  </li>
@@ -1,7 +1,5 @@
1
- <% content_for(:sidebar) do %>
2
- <% if has_search_parameters? %>
3
- <%= render 'search_sidebar' %>
4
- <% end %>
1
+ <% content_for(:head) do %>
2
+ <meta name="blacklight-search-storage" content="<%= blacklight_config.track_search_session.storage %>">
5
3
  <% end %>
6
4
 
7
5
  <% unless has_search_parameters? %>
@@ -9,5 +7,11 @@
9
7
  <%= render 'home' %>
10
8
  <%= render 'shared/sitelinks_search_box' %>
11
9
  <% else %>
10
+ <% content_for(:sidebar) do %>
11
+ <% conf = blacklight_config.view_config(document_index_view_type) %>
12
+ <%= render conf.sidebar_component.new(blacklight_config: blacklight_config,
13
+ response: @response,
14
+ view_config: conf) %>
15
+ <% end %>
12
16
  <%= render 'search_results' %>
13
17
  <% end %>
@@ -1,7 +1,7 @@
1
1
  <div id="metadata-markup-container" class="container-fluid">
2
2
  <div class="alert alert-warning" role="alert">
3
3
  <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
4
- <span class="sr-only">Error:</span>
4
+ <span class="visually-hidden">Error:</span>
5
5
  <span><%= t('geoblacklight.metadata.metadata_error')%></span>
6
6
  </div>
7
7
  <%= CodeRay.scan(content, :xml).div.html_safe %>
@@ -1,13 +1,14 @@
1
- <div class="modal-header">
2
- <h3 class="modal-title"><%= t('geoblacklight.metadata.view_metadata')%></h3>
3
- <button type="button" class="blacklight-modal-close close" data-dismiss="modal" aria-label="<%= t('blacklight.modal.close') %>">
4
- <span aria-hidden="true">&times;</span>
5
- </button>
6
- </div>
7
- <div class="modal-body metadata-body">
8
- <%= render partial: 'metadata' %>
9
- </div>
10
- <div class="modal-footer">
11
- <button type="button" class="btn btn-default hide-without-js" data-dismiss="modal">Close</button>
12
- <a href="#" target="_blank" rel="noopener noreferrer" id="btn-metadata-download" class="btn btn-primary">Download</a>
13
- </div>
1
+ <%= render Blacklight::System::ModalComponent.new do |component| %>
2
+ <% component.with_title do %>
3
+ <%= t('geoblacklight.metadata.view_metadata') %>
4
+ <% end %>
5
+ <% component.with_body do %>
6
+ <div class="modal-body metadata-body">
7
+ <%= render partial: 'metadata' %>
8
+ </div>
9
+ <% end %>
10
+ <% component.with_footer do %>
11
+ <a href="#" target="_blank" rel="noopener noreferrer" id="btn-metadata-download" class="btn btn-primary">Download</a>
12
+ <button type="button" class="btn btn-secondary" data-bl-dismiss="modal"><%= t('blacklight.modal.close') %></button>
13
+ <% end %>
14
+ <% end %>