geoblacklight 5.3.0 → 6.0.0.pre.alpha.1

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 (453) hide show
  1. checksums.yaml +4 -4
  2. data/.engine_cart.yml +14 -0
  3. data/.github/workflows/ruby.yml +24 -25
  4. data/.gitignore +0 -9
  5. data/.prettierignore +4 -0
  6. data/.prettierrc +5 -0
  7. data/CONTRIBUTING.md +2 -4
  8. data/Gemfile +4 -2
  9. data/README.md +4 -4
  10. data/Rakefile +0 -22
  11. data/app/assets/stylesheets/geoblacklight/global.css +7 -0
  12. data/app/assets/stylesheets/geoblacklight/home.css +22 -0
  13. data/app/assets/stylesheets/geoblacklight/index_maps.css +36 -0
  14. data/app/assets/stylesheets/geoblacklight/record.css +39 -0
  15. data/app/assets/stylesheets/geoblacklight/search.css +56 -0
  16. data/app/assets/stylesheets/geoblacklight/viewers.css +50 -0
  17. data/app/assets/stylesheets/geoblacklight.css +14 -0
  18. data/app/components/blacklight/icons/web_services_component.rb +3 -3
  19. data/app/components/geoblacklight/accordion_component.html.erb +3 -3
  20. data/app/components/geoblacklight/accordion_component.rb +4 -0
  21. data/app/components/geoblacklight/arcgis_component.html.erb +1 -1
  22. data/app/components/geoblacklight/arcgis_component.rb +1 -1
  23. data/app/components/geoblacklight/attribute_table_component.html.erb +3 -3
  24. data/app/components/geoblacklight/data_dictionary_download_component.html.erb +1 -1
  25. data/app/components/geoblacklight/display_note_component.html.erb +1 -1
  26. data/app/components/geoblacklight/display_note_component.rb +2 -1
  27. data/app/components/geoblacklight/document/citation_component.html.erb +1 -1
  28. data/app/components/geoblacklight/document/sidebar_component.html.erb +1 -1
  29. data/app/components/geoblacklight/document/sidebar_component.rb +0 -1
  30. data/app/components/geoblacklight/document_component.html.erb +1 -2
  31. data/app/components/geoblacklight/header_component.html.erb +4 -4
  32. data/app/components/geoblacklight/header_icons_component.rb +4 -2
  33. data/app/components/geoblacklight/homepage_feature_facet_component.html.erb +3 -7
  34. data/app/components/geoblacklight/homepage_feature_facet_component.rb +12 -3
  35. data/app/components/geoblacklight/iiif_drag_drop_component.html.erb +2 -2
  36. data/app/components/geoblacklight/iiif_drag_drop_component.rb +2 -2
  37. data/app/components/geoblacklight/index_map_inspect_component.html.erb +3 -3
  38. data/app/components/geoblacklight/index_map_legend_component.html.erb +7 -7
  39. data/app/components/geoblacklight/index_map_legend_component.rb +7 -0
  40. data/app/components/geoblacklight/item_map_viewer_component.rb +8 -4
  41. data/app/components/geoblacklight/location_leaflet_map_component.rb +28 -15
  42. data/app/components/geoblacklight/relations_component.html.erb +2 -2
  43. data/app/components/geoblacklight/search_result_component.html.erb +28 -26
  44. data/app/components/geoblacklight/search_result_component.rb +2 -2
  45. data/app/components/geoblacklight/static_map_component.rb +5 -4
  46. data/app/components/geoblacklight/viewer_help_text_component.html.erb +1 -1
  47. data/app/components/geoblacklight/viewer_help_text_component.rb +1 -1
  48. data/app/components/geoblacklight/web_services_component.html.erb +1 -1
  49. data/app/components/geoblacklight/web_services_component.rb +1 -1
  50. data/app/components/geoblacklight/web_services_default_component.html.erb +6 -6
  51. data/app/components/geoblacklight/web_services_link_component.rb +12 -9
  52. data/app/components/geoblacklight/web_services_wfs_component.html.erb +4 -4
  53. data/app/components/geoblacklight/web_services_wms_component.html.erb +4 -4
  54. data/app/controllers/download_controller.rb +0 -1
  55. data/app/controllers/wms_controller.rb +1 -1
  56. data/app/helpers/geoblacklight_helper.rb +0 -15
  57. data/app/javascript/geoblacklight/controllers/clipboard_controller.js +6 -6
  58. data/app/javascript/geoblacklight/controllers/downloads_controller.js +37 -29
  59. data/app/javascript/geoblacklight/controllers/leaflet_viewer_controller.js +108 -117
  60. data/app/javascript/geoblacklight/controllers/oembed_viewer_controller.js +5 -5
  61. data/app/javascript/geoblacklight/controllers/openlayers_viewer_controller.js +27 -30
  62. data/app/javascript/geoblacklight/controllers/search_results_controller.js +18 -18
  63. data/app/javascript/geoblacklight/core.js +35 -36
  64. data/app/javascript/geoblacklight/index.js +10 -10
  65. data/app/javascript/geoblacklight/initializers/metadata_download.js +23 -25
  66. data/app/javascript/geoblacklight/initializers/popovers.js +4 -4
  67. data/app/javascript/geoblacklight/initializers/relations.js +20 -20
  68. data/app/javascript/geoblacklight/initializers/tooltips.js +19 -23
  69. data/app/javascript/geoblacklight/initializers/truncation.js +18 -18
  70. data/app/javascript/geoblacklight/leaflet/basemaps.js +2 -3
  71. data/app/javascript/geoblacklight/leaflet/constants.js +7 -7
  72. data/app/javascript/geoblacklight/leaflet/controls/geosearch.js +80 -74
  73. data/app/javascript/geoblacklight/leaflet/controls/layer_opacity.js +74 -73
  74. data/app/javascript/geoblacklight/leaflet/controls/sidebar.js +31 -29
  75. data/app/javascript/geoblacklight/leaflet/controls/sleep.js +54 -51
  76. data/app/javascript/geoblacklight/leaflet/inspection.js +77 -68
  77. data/app/javascript/geoblacklight/leaflet/layer_index_map.js +74 -69
  78. data/app/javascript/geoblacklight/leaflet/layer_wmts.js +14 -16
  79. data/app/javascript/geoblacklight/leaflet/layers.js +59 -66
  80. data/app/javascript/geoblacklight/leaflet/utils.js +37 -43
  81. data/app/javascript/geoblacklight/openlayers/basemaps.js +35 -27
  82. data/app/javascript/geoblacklight/openlayers/inspection.js +23 -23
  83. data/app/javascript/geoblacklight/openlayers/layers.js +11 -11
  84. data/app/models/concerns/geoblacklight/bbox_filter_query.rb +7 -9
  85. data/app/models/concerns/geoblacklight/solr_document.rb +16 -39
  86. data/app/models/concerns/geoblacklight/suppressed_records_search_behavior.rb +3 -3
  87. data/app/views/catalog/_document_split.html.erb +3 -3
  88. data/app/views/catalog/_home_text.html.erb +22 -14
  89. data/app/views/catalog/_metadata.html.erb +1 -1
  90. data/app/views/catalog/_relations_container.html.erb +1 -1
  91. data/app/views/catalog/index.html.erb +0 -1
  92. data/app/views/catalog/metadata/_markup.html.erb +1 -2
  93. data/app/views/catalog/metadata/_missing.html.erb +2 -2
  94. data/app/views/catalog/web_services.html.erb +1 -1
  95. data/app/views/relation/index.html.erb +1 -1
  96. data/app/views/relation/index.json.jbuilder +1 -1
  97. data/config/initializers/rails_config.rb +0 -3
  98. data/config/locales/geoblacklight.en.yml +79 -78
  99. data/geoblacklight.gemspec +1 -2
  100. data/lib/generators/geoblacklight/assets_generator.rb +35 -26
  101. data/lib/generators/geoblacklight/install_generator.rb +6 -11
  102. data/lib/generators/geoblacklight/templates/assets/customizations.css +6 -0
  103. data/lib/generators/geoblacklight/templates/catalog_controller.rb +97 -73
  104. data/lib/generators/geoblacklight/templates/settings.yml +97 -113
  105. data/lib/geoblacklight/configuration/default_settings_builder.rb +18 -0
  106. data/lib/geoblacklight/configuration/display_note_shown_config.rb +13 -0
  107. data/lib/geoblacklight/configuration/fields_config.rb +51 -0
  108. data/lib/geoblacklight/configuration/leaflet_config.rb +73 -0
  109. data/lib/geoblacklight/configuration/leaflet_layers_config.rb +21 -0
  110. data/lib/geoblacklight/configuration/leaflet_sleep_config.rb +20 -0
  111. data/lib/geoblacklight/configuration/legacy_settings_builder.rb +94 -0
  112. data/lib/geoblacklight/configuration.rb +148 -0
  113. data/lib/geoblacklight/download.rb +2 -2
  114. data/lib/geoblacklight/engine.rb +7 -5
  115. data/lib/geoblacklight/metadata/base.rb +0 -2
  116. data/lib/geoblacklight/metadata_transformer.rb +0 -2
  117. data/lib/geoblacklight/references.rb +5 -4
  118. data/lib/geoblacklight/relation/ancestors.rb +3 -2
  119. data/lib/geoblacklight/relation/descendants.rb +2 -1
  120. data/lib/geoblacklight/relation/relation_response.rb +4 -4
  121. data/lib/geoblacklight/version.rb +1 -1
  122. data/lib/geoblacklight/wms_layer.rb +3 -3
  123. data/lib/geoblacklight.rb +7 -1
  124. data/package.json +10 -31
  125. data/schema/geoblacklight-schema-aardvark.json +1 -9
  126. data/schema/readme.md +3 -4
  127. data/solr/conf/_rest_managed.json +3 -2
  128. data/solr/conf/schema.xml +1 -1
  129. data/spec/components/geoblacklight/arcgis_component_spec.rb +6 -6
  130. data/spec/components/geoblacklight/attribute_table_component_spec.rb +6 -7
  131. data/spec/components/geoblacklight/citation_component_spec.rb +7 -4
  132. data/spec/components/geoblacklight/display_note_component_spec.rb +8 -8
  133. data/spec/components/geoblacklight/document_component_spec.rb +13 -13
  134. data/spec/components/geoblacklight/download_links_component_spec.rb +17 -14
  135. data/spec/components/geoblacklight/header_icons_component_spec.rb +6 -11
  136. data/spec/components/geoblacklight/homepage_feature_facet_component_spec.rb +22 -30
  137. data/spec/components/geoblacklight/iiif_drag_drop_component_spec.rb +3 -3
  138. data/spec/components/geoblacklight/index_map_legend_component_spec.rb +5 -18
  139. data/spec/components/geoblacklight/item_map_viewer_component_spec.rb +5 -5
  140. data/spec/components/geoblacklight/login_link_component_spec.rb +4 -5
  141. data/spec/components/geoblacklight/search_result_component_spec.rb +2 -6
  142. data/spec/components/geoblacklight/static_map_component_spec.rb +2 -2
  143. data/spec/components/geoblacklight/viewer_help_text_component_spec.rb +4 -6
  144. data/spec/components/geoblacklight/web_services_component_spec.rb +11 -10
  145. data/spec/controllers/catalog_controller_spec.rb +7 -7
  146. data/spec/controllers/download_controller_spec.rb +1 -1
  147. data/spec/controllers/relation_controller_spec.rb +1 -1
  148. data/spec/controllers/wms_controller_spec.rb +1 -1
  149. data/spec/features/axe_spec.rb +4 -4
  150. data/spec/features/bookmarks_spec.rb +1 -1
  151. data/spec/features/citations_spec.rb +1 -1
  152. data/spec/features/configurable_basemap_spec.rb +1 -1
  153. data/spec/features/data_dictionary_download_spec.rb +1 -1
  154. data/spec/features/download_layer_spec.rb +1 -1
  155. data/spec/features/empty_search_spec.rb +1 -1
  156. data/spec/features/esri_viewer_spec.rb +1 -1
  157. data/spec/features/exports_spec.rb +1 -1
  158. data/spec/features/full_screen_control_spec.rb +3 -10
  159. data/spec/features/help_text_spec.rb +1 -1
  160. data/spec/features/home_page_spec.rb +1 -1
  161. data/spec/features/index_map_spec.rb +3 -3
  162. data/spec/features/index_view_spec.rb +7 -7
  163. data/spec/features/layer_inspection_spec.rb +1 -1
  164. data/spec/features/layer_opacity_spec.rb +1 -1
  165. data/spec/features/layer_preview_spec.rb +1 -1
  166. data/spec/features/layer_with_no_references_spec.rb +1 -1
  167. data/spec/features/linkified_attribute_table_spec.rb +1 -1
  168. data/spec/features/metadata_panel_spec.rb +1 -1
  169. data/spec/features/missing_metadata_spec.rb +1 -1
  170. data/spec/features/multiple_downloads_spec.rb +1 -1
  171. data/spec/features/oembed_spec.rb +1 -1
  172. data/spec/features/relations_spec.rb +2 -2
  173. data/spec/features/saved_searches_spec.rb +1 -1
  174. data/spec/features/search_bar_spec.rb +1 -1
  175. data/spec/features/search_results_complex_geometry_spec.rb +1 -1
  176. data/spec/features/search_results_icons_spec.rb +3 -4
  177. data/spec/features/search_results_map_spec.rb +1 -1
  178. data/spec/features/search_results_overlap_ratio_spec.rb +3 -3
  179. data/spec/features/search_spec.rb +1 -1
  180. data/spec/features/show_page_download_spec.rb +1 -1
  181. data/spec/features/show_page_metadata_spec.rb +2 -2
  182. data/spec/features/show_page_sidebar_static_map_spec.rb +1 -1
  183. data/spec/features/sms_spec.rb +1 -1
  184. data/spec/features/suppressed_records_spec.rb +1 -1
  185. data/spec/features/tilejson_spec.rb +1 -1
  186. data/spec/features/tms_spec.rb +1 -1
  187. data/spec/features/web_services_modal_spec.rb +1 -1
  188. data/spec/features/wmts_spec.rb +1 -1
  189. data/spec/features/xyz_spec.rb +1 -1
  190. data/spec/fixtures/manifests/tilejson.json +10 -19
  191. data/spec/fixtures/metadata/fgdc.html +1 -1
  192. data/spec/fixtures/metadata/iso.html +1 -1
  193. data/spec/fixtures/solr_documents/README.md +0 -1
  194. data/spec/fixtures/solr_documents/actual-papermap1.json +9 -28
  195. data/spec/fixtures/solr_documents/actual-point1.json +12 -39
  196. data/spec/fixtures/solr_documents/actual-polygon1.json +10 -30
  197. data/spec/fixtures/solr_documents/actual-raster1.json +14 -46
  198. data/spec/fixtures/solr_documents/all-relationships.json +12 -36
  199. data/spec/fixtures/solr_documents/b1g_iiif_manifest.json +33 -62
  200. data/spec/fixtures/solr_documents/b1g_wabash_child_15.json +13 -40
  201. data/spec/fixtures/solr_documents/b1g_wabash_child_16.json +13 -40
  202. data/spec/fixtures/solr_documents/b1g_wabash_child_17.json +13 -40
  203. data/spec/fixtures/solr_documents/b1g_wabash_child_18.json +13 -40
  204. data/spec/fixtures/solr_documents/b1g_wabash_parent.json +13 -40
  205. data/spec/fixtures/solr_documents/baruch_ancestor1.json +13 -40
  206. data/spec/fixtures/solr_documents/baruch_ancestor2.json +13 -40
  207. data/spec/fixtures/solr_documents/baruch_documentation_download.json +14 -46
  208. data/spec/fixtures/solr_documents/bbox-spans-180.json +7 -21
  209. data/spec/fixtures/solr_documents/complex-geom.json +11 -37
  210. data/spec/fixtures/solr_documents/cornell_html_metadata.json +12 -37
  211. data/spec/fixtures/solr_documents/display-note.json +11 -33
  212. data/spec/fixtures/solr_documents/esri-dynamic-layer-all-layers.json +13 -39
  213. data/spec/fixtures/solr_documents/esri-dynamic-layer-single-layer.json +13 -40
  214. data/spec/fixtures/solr_documents/esri-feature-layer.json +13 -39
  215. data/spec/fixtures/solr_documents/esri-image-map-layer.json +13 -40
  216. data/spec/fixtures/solr_documents/esri-tiled_map_layer.json +16 -54
  217. data/spec/fixtures/solr_documents/esri-wms-layer.json +12 -36
  218. data/spec/fixtures/solr_documents/harvard_raster.json +12 -37
  219. data/spec/fixtures/solr_documents/iiif-eastern-hemisphere.json +9 -27
  220. data/spec/fixtures/solr_documents/index-map-polygon-no-downloadurl.json +12 -41
  221. data/spec/fixtures/solr_documents/index-map-polygon.json +12 -41
  222. data/spec/fixtures/solr_documents/index-map-stanford.json +14 -45
  223. data/spec/fixtures/solr_documents/index-map-v1-complex.json +13 -38
  224. data/spec/fixtures/solr_documents/index_map_point.json +13 -42
  225. data/spec/fixtures/solr_documents/metadata_no_geom.json +4 -14
  226. data/spec/fixtures/solr_documents/metadata_no_provider.json +8 -25
  227. data/spec/fixtures/solr_documents/multiple-downloads.json +6 -18
  228. data/spec/fixtures/solr_documents/no_locn_geometry.json +4 -12
  229. data/spec/fixtures/solr_documents/no_spatial.json +4 -12
  230. data/spec/fixtures/solr_documents/oembed.json +8 -25
  231. data/spec/fixtures/solr_documents/princeton-child1.json +9 -29
  232. data/spec/fixtures/solr_documents/princeton-child2.json +9 -29
  233. data/spec/fixtures/solr_documents/princeton-child3.json +9 -29
  234. data/spec/fixtures/solr_documents/princeton-child4.json +9 -29
  235. data/spec/fixtures/solr_documents/princeton-parent.json +10 -33
  236. data/spec/fixtures/solr_documents/public_cog_princeton.json +9 -27
  237. data/spec/fixtures/solr_documents/public_iiif_princeton.json +13 -43
  238. data/spec/fixtures/solr_documents/public_pmtiles_princeton.json +29 -39
  239. data/spec/fixtures/solr_documents/public_polygon_mit.json +9 -30
  240. data/spec/fixtures/solr_documents/restricted-line.json +14 -47
  241. data/spec/fixtures/solr_documents/the-related-record.json +4 -12
  242. data/spec/fixtures/solr_documents/tilejson.json +23 -46
  243. data/spec/fixtures/solr_documents/tms.json +7 -21
  244. data/spec/fixtures/solr_documents/umn_metro_result1.json +13 -41
  245. data/spec/fixtures/solr_documents/umn_state_result1.json +13 -39
  246. data/spec/fixtures/solr_documents/umn_state_result2.json +13 -39
  247. data/spec/fixtures/solr_documents/uva_slug_colon.json +10 -30
  248. data/spec/fixtures/solr_documents/wmts-multiple.json +23 -39
  249. data/spec/fixtures/solr_documents/wmts-single-layer.json +23 -46
  250. data/spec/fixtures/solr_documents/xyz.json +10 -33
  251. data/spec/helpers/geoblacklight_helper_spec.rb +5 -50
  252. data/spec/javascripts/geoblacklight_spec.js +10 -10
  253. data/spec/javascripts/metadata_download_button_spec.js +14 -13
  254. data/spec/lib/geoblacklight/bounding_box_spec.rb +1 -1
  255. data/spec/lib/geoblacklight/configuration/default_settings_builder_spec.rb +9 -0
  256. data/spec/lib/geoblacklight/configuration_spec.rb +13 -0
  257. data/spec/lib/geoblacklight/download/csv_download_spec.rb +2 -2
  258. data/spec/lib/geoblacklight/download/geojson_download_spec.rb +2 -2
  259. data/spec/lib/geoblacklight/download/geotiff_download_spec.rb +5 -2
  260. data/spec/lib/geoblacklight/download/kmz_download_spec.rb +2 -2
  261. data/spec/lib/geoblacklight/download/shapefile_download_spec.rb +2 -2
  262. data/spec/lib/geoblacklight/download_spec.rb +15 -6
  263. data/spec/lib/geoblacklight/geometry_spec.rb +1 -1
  264. data/spec/lib/geoblacklight/item_viewer_spec.rb +2 -2
  265. data/spec/lib/geoblacklight/metadata/base_spec.rb +1 -1
  266. data/spec/lib/geoblacklight/metadata/html_spec.rb +1 -1
  267. data/spec/lib/geoblacklight/metadata_spec.rb +1 -1
  268. data/spec/lib/geoblacklight/metadata_transformer/base_spec.rb +1 -1
  269. data/spec/lib/geoblacklight/metadata_transformer/fgdc_spec.rb +1 -1
  270. data/spec/lib/geoblacklight/metadata_transformer/iso19139_spec.rb +1 -1
  271. data/spec/lib/geoblacklight/metadata_transformer_spec.rb +1 -1
  272. data/spec/lib/geoblacklight/reference_spec.rb +1 -1
  273. data/spec/lib/geoblacklight/references_spec.rb +6 -4
  274. data/spec/lib/geoblacklight/relation/ancestors_spec.rb +10 -4
  275. data/spec/lib/geoblacklight/relation/descendants_spec.rb +9 -4
  276. data/spec/lib/geoblacklight/relation/relation_response_spec.rb +12 -15
  277. data/spec/lib/geoblacklight/wms_layer/feature_info_response_spec.rb +1 -1
  278. data/spec/lib/geoblacklight/wms_layer_spec.rb +1 -1
  279. data/spec/models/concerns/geoblacklight/bbox_filter_query_spec.rb +20 -11
  280. data/spec/models/concerns/geoblacklight/solr_document/citation_spec.rb +1 -1
  281. data/spec/models/concerns/geoblacklight/solr_document/finder_spec.rb +1 -1
  282. data/spec/models/concerns/geoblacklight/solr_document/inspection_spec.rb +1 -1
  283. data/spec/models/concerns/geoblacklight/solr_document_spec.rb +4 -39
  284. data/spec/models/concerns/geoblacklight/suppressed_records_search_behavior_spec.rb +2 -2
  285. data/spec/routing/catalog_routing_spec.rb +1 -1
  286. data/spec/spec_helper.rb +21 -10
  287. data/spec/tasks/geoblacklight_spec.rb +1 -1
  288. data/spec/test_app_templates/lib/generators/test_app_generator.rb +4 -3
  289. metadata +33 -184
  290. data/Procfile.dev +0 -3
  291. data/app/assets/stylesheets/geoblacklight/geoblacklight.scss +0 -2
  292. data/app/assets/stylesheets/geoblacklight/modules/_base.scss +0 -31
  293. data/app/assets/stylesheets/geoblacklight/modules/_blacklight_overrides.scss +0 -40
  294. data/app/assets/stylesheets/geoblacklight/modules/_styles.scss +0 -9
  295. data/app/assets/stylesheets/geoblacklight/modules/downloads.scss +0 -62
  296. data/app/assets/stylesheets/geoblacklight/modules/geosearch.scss +0 -23
  297. data/app/assets/stylesheets/geoblacklight/modules/home.scss +0 -13
  298. data/app/assets/stylesheets/geoblacklight/modules/icon-customization.scss +0 -116
  299. data/app/assets/stylesheets/geoblacklight/modules/index_maps.scss +0 -61
  300. data/app/assets/stylesheets/geoblacklight/modules/item.scss +0 -78
  301. data/app/assets/stylesheets/geoblacklight/modules/layer_opacity.scss +0 -87
  302. data/app/assets/stylesheets/geoblacklight/modules/leaflet.scss +0 -4
  303. data/app/assets/stylesheets/geoblacklight/modules/metadata.scss +0 -31
  304. data/app/assets/stylesheets/geoblacklight/modules/metadata_content.scss +0 -43
  305. data/app/assets/stylesheets/geoblacklight/modules/metadata_markup.scss +0 -9
  306. data/app/assets/stylesheets/geoblacklight/modules/metadata_missing.scss +0 -7
  307. data/app/assets/stylesheets/geoblacklight/modules/modal.scss +0 -5
  308. data/app/assets/stylesheets/geoblacklight/modules/results.scss +0 -60
  309. data/app/assets/stylesheets/geoblacklight/modules/search_widgets.scss +0 -5
  310. data/app/assets/stylesheets/geoblacklight/modules/sidebar.scss +0 -42
  311. data/app/assets/stylesheets/geoblacklight/modules/toolbar.scss +0 -34
  312. data/app/assets/stylesheets/geoblacklight/modules/web_services.scss +0 -5
  313. data/app/components/blacklight/icons/american_geographical_society_library_uwm_libraries_component.rb +0 -46
  314. data/app/components/blacklight/icons/arizona_component.rb +0 -24
  315. data/app/components/blacklight/icons/baruch_cuny_component.rb +0 -23
  316. data/app/components/blacklight/icons/bookmark_component.rb +0 -23
  317. data/app/components/blacklight/icons/circle_info_solid_component.rb +0 -23
  318. data/app/components/blacklight/icons/columbia_component.rb +0 -23
  319. data/app/components/blacklight/icons/cornell_component.rb +0 -25
  320. data/app/components/blacklight/icons/george_mason_component.rb +0 -24
  321. data/app/components/blacklight/icons/harvard_component.rb +0 -23
  322. data/app/components/blacklight/icons/indiana_component.rb +0 -23
  323. data/app/components/blacklight/icons/lewis_clark_component.rb +0 -25
  324. data/app/components/blacklight/icons/massgis_component.rb +0 -23
  325. data/app/components/blacklight/icons/michigan_state_university_component.rb +0 -25
  326. data/app/components/blacklight/icons/mit_component.rb +0 -23
  327. data/app/components/blacklight/icons/northwestern_university_component.rb +0 -24
  328. data/app/components/blacklight/icons/nyu_component.rb +0 -26
  329. data/app/components/blacklight/icons/pennsylvania_state_university_component.rb +0 -25
  330. data/app/components/blacklight/icons/princeton_component.rb +0 -23
  331. data/app/components/blacklight/icons/purdue_university_component.rb +0 -25
  332. data/app/components/blacklight/icons/rutgers_component.rb +0 -25
  333. data/app/components/blacklight/icons/sms_component.rb +0 -23
  334. data/app/components/blacklight/icons/stanford_component.rb +0 -23
  335. data/app/components/blacklight/icons/texas_component.rb +0 -23
  336. data/app/components/blacklight/icons/the_ohio_state_university_component.rb +0 -26
  337. data/app/components/blacklight/icons/tufts_component.rb +0 -23
  338. data/app/components/blacklight/icons/ucla_component.rb +0 -23
  339. data/app/components/blacklight/icons/university_of_california_berkeley_component.rb +0 -24
  340. data/app/components/blacklight/icons/university_of_chicago_component.rb +0 -25
  341. data/app/components/blacklight/icons/university_of_colorado_boulder_component.rb +0 -26
  342. data/app/components/blacklight/icons/university_of_illinois_urbana_champaign_component.rb +0 -25
  343. data/app/components/blacklight/icons/university_of_iowa_component.rb +0 -24
  344. data/app/components/blacklight/icons/university_of_maryland_component.rb +0 -24
  345. data/app/components/blacklight/icons/university_of_michigan_component.rb +0 -24
  346. data/app/components/blacklight/icons/university_of_minnesota_component.rb +0 -24
  347. data/app/components/blacklight/icons/university_of_nebraska_lincoln_component.rb +0 -27
  348. data/app/components/blacklight/icons/university_of_wisconsin_madison_component.rb +0 -24
  349. data/app/components/blacklight/icons/uva_component.rb +0 -23
  350. data/app/components/geoblacklight/icon_facet_item_component.rb +0 -33
  351. data/app/components/geoblacklight/web_services_link_component.html.erb +0 -3
  352. data/bin/vite +0 -29
  353. data/config/initializers/new_gbl_settings_defaults_4.1.yml +0 -104
  354. data/lib/generators/geoblacklight/assets/importmap_generator.rb +0 -73
  355. data/lib/generators/geoblacklight/assets/vite_generator.rb +0 -89
  356. data/lib/generators/geoblacklight/templates/assets/_customizations.scss +0 -23
  357. data/lib/generators/geoblacklight/templates/assets/application.js +0 -17
  358. data/lib/generators/geoblacklight/templates/assets/application.scss +0 -9
  359. data/lib/generators/geoblacklight/templates/assets/geoblacklight.scss +0 -11
  360. data/lib/generators/geoblacklight/templates/base.html.erb +0 -46
  361. data/lib/generators/geoblacklight/templates/vite.config.ts +0 -23
  362. data/lib/generators/geoblacklight/templates/vite.json +0 -16
  363. data/schema/geoblacklight-schema-1.0.json +0 -214
  364. data/solr/conf/xslt/example.xsl +0 -132
  365. data/solr/conf/xslt/example_atom.xsl +0 -67
  366. data/solr/conf/xslt/example_rss.xsl +0 -66
  367. data/solr/conf/xslt/luke.xsl +0 -337
  368. data/spec/components/blacklight/icons/american_geographical_society_library_uwm_libraries_component_spec.rb +0 -15
  369. data/spec/components/blacklight/icons/arizona_component_spec.rb +0 -15
  370. data/spec/components/blacklight/icons/arrow_circle_down_component_spec.rb +0 -15
  371. data/spec/components/blacklight/icons/baruch_cuny_component_spec.rb +0 -15
  372. data/spec/components/blacklight/icons/book_component_spec.rb +0 -15
  373. data/spec/components/blacklight/icons/bookmark_component_spec.rb +0 -15
  374. data/spec/components/blacklight/icons/cd_rom_component_spec.rb +0 -15
  375. data/spec/components/blacklight/icons/child_item_component_spec.rb +0 -15
  376. data/spec/components/blacklight/icons/circle_info_solid_component_spec.rb +0 -15
  377. data/spec/components/blacklight/icons/citation_component_spec.rb +0 -15
  378. data/spec/components/blacklight/icons/collection_component_spec.rb +0 -15
  379. data/spec/components/blacklight/icons/collections_component_spec.rb +0 -15
  380. data/spec/components/blacklight/icons/columbia_component_spec.rb +0 -15
  381. data/spec/components/blacklight/icons/cornell_component_spec.rb +0 -15
  382. data/spec/components/blacklight/icons/datasets_component_spec.rb +0 -15
  383. data/spec/components/blacklight/icons/dvd_rom_component_spec.rb +0 -15
  384. data/spec/components/blacklight/icons/email_component_spec.rb +0 -15
  385. data/spec/components/blacklight/icons/esri_globe_component_spec.rb +0 -15
  386. data/spec/components/blacklight/icons/fire_solid_component_spec.rb +0 -15
  387. data/spec/components/blacklight/icons/george_mason_component_spec.rb +0 -15
  388. data/spec/components/blacklight/icons/globe_component_spec.rb +0 -15
  389. data/spec/components/blacklight/icons/harvard_component_spec.rb +0 -15
  390. data/spec/components/blacklight/icons/home_component_spec.rb +0 -15
  391. data/spec/components/blacklight/icons/iiif_drag_drop_component_spec.rb +0 -15
  392. data/spec/components/blacklight/icons/image_component_spec.rb +0 -15
  393. data/spec/components/blacklight/icons/imagery_component_spec.rb +0 -15
  394. data/spec/components/blacklight/icons/indiana_component_spec.rb +0 -15
  395. data/spec/components/blacklight/icons/leaf_component_spec.rb +0 -15
  396. data/spec/components/blacklight/icons/lewis_clark_component_spec.rb +0 -15
  397. data/spec/components/blacklight/icons/lightbulb_solid_component_spec.rb +0 -15
  398. data/spec/components/blacklight/icons/line_component_spec.rb +0 -15
  399. data/spec/components/blacklight/icons/map_component_spec.rb +0 -15
  400. data/spec/components/blacklight/icons/map_marker_component_spec.rb +0 -15
  401. data/spec/components/blacklight/icons/maps_component_spec.rb +0 -15
  402. data/spec/components/blacklight/icons/massgis_component_spec.rb +0 -15
  403. data/spec/components/blacklight/icons/metadata_component_spec.rb +0 -15
  404. data/spec/components/blacklight/icons/michigan_state_university_component_spec.rb +0 -15
  405. data/spec/components/blacklight/icons/mit_component_spec.rb +0 -15
  406. data/spec/components/blacklight/icons/mixed_component_spec.rb +0 -15
  407. data/spec/components/blacklight/icons/multilinestring_component_spec.rb +0 -15
  408. data/spec/components/blacklight/icons/multipoint_component_spec.rb +0 -15
  409. data/spec/components/blacklight/icons/multipolygon_component_spec.rb +0 -15
  410. data/spec/components/blacklight/icons/northwestern_university_component_spec.rb +0 -15
  411. data/spec/components/blacklight/icons/nyu_component_spec.rb +0 -15
  412. data/spec/components/blacklight/icons/pagelines_brands_component_spec.rb +0 -15
  413. data/spec/components/blacklight/icons/paper_map_component_spec.rb +0 -15
  414. data/spec/components/blacklight/icons/parent_item_component_spec.rb +0 -15
  415. data/spec/components/blacklight/icons/pennsylvania_state_university_component_spec.rb +0 -15
  416. data/spec/components/blacklight/icons/point_component_spec.rb +0 -15
  417. data/spec/components/blacklight/icons/polygon_component_spec.rb +0 -15
  418. data/spec/components/blacklight/icons/polyline_component_spec.rb +0 -15
  419. data/spec/components/blacklight/icons/princeton_component_spec.rb +0 -15
  420. data/spec/components/blacklight/icons/public_component_spec.rb +0 -15
  421. data/spec/components/blacklight/icons/purdue_university_component_spec.rb +0 -15
  422. data/spec/components/blacklight/icons/raster_component_spec.rb +0 -15
  423. data/spec/components/blacklight/icons/restricted_component_spec.rb +0 -15
  424. data/spec/components/blacklight/icons/rutgers_component_spec.rb +0 -15
  425. data/spec/components/blacklight/icons/sms_component_spec.rb +0 -15
  426. data/spec/components/blacklight/icons/stanford_component_spec.rb +0 -15
  427. data/spec/components/blacklight/icons/table_component_spec.rb +0 -15
  428. data/spec/components/blacklight/icons/tags_component_spec.rb +0 -15
  429. data/spec/components/blacklight/icons/texas_component_spec.rb +0 -15
  430. data/spec/components/blacklight/icons/the_ohio_state_university_component_spec.rb +0 -15
  431. data/spec/components/blacklight/icons/triangle_exclamation_solid_component_spec.rb +0 -15
  432. data/spec/components/blacklight/icons/tufts_component_spec.rb +0 -15
  433. data/spec/components/blacklight/icons/ucla_component_spec.rb +0 -15
  434. data/spec/components/blacklight/icons/university_of_california_berkeley_component_spec.rb +0 -15
  435. data/spec/components/blacklight/icons/university_of_chicago_component_spec.rb +0 -15
  436. data/spec/components/blacklight/icons/university_of_colorado_boulder_component_spec.rb +0 -15
  437. data/spec/components/blacklight/icons/university_of_illinois_urbana_champaign_component_spec.rb +0 -15
  438. data/spec/components/blacklight/icons/university_of_iowa_component_spec.rb +0 -15
  439. data/spec/components/blacklight/icons/university_of_maryland_component_spec.rb +0 -15
  440. data/spec/components/blacklight/icons/university_of_michigan_component_spec.rb +0 -15
  441. data/spec/components/blacklight/icons/university_of_minnesota_component_spec.rb +0 -15
  442. data/spec/components/blacklight/icons/university_of_nebraska_lincoln_component_spec.rb +0 -15
  443. data/spec/components/blacklight/icons/university_of_wisconsin_madison_component_spec.rb +0 -15
  444. data/spec/components/blacklight/icons/uva_component_spec.rb +0 -15
  445. data/spec/components/blacklight/icons/web_services_component_spec.rb +0 -15
  446. data/spec/components/blacklight/icons/websites_component_spec.rb +0 -15
  447. data/spec/components/geoblacklight/icon_facet_item_component_spec.rb +0 -18
  448. data/spec/config/initializers/rails_config_spec.rb +0 -16
  449. data/spec/fixtures/solr_documents/public_direct_download.json +0 -62
  450. data/spec/support/backport_test_helpers.rb +0 -47
  451. data/spec/support/view_component_capybara_test_helpers.rb +0 -8
  452. data/vite.config.ts +0 -32
  453. /data/app/assets/images/{blacklight → geoblacklight}/logo.svg +0 -0
@@ -1,17 +1,17 @@
1
1
  // Stimulus controllers
2
- import OpenlayersViewerController from "geoblacklight/controllers/openlayers_viewer_controller";
3
- import OembedViewerController from "geoblacklight/controllers/oembed_viewer_controller";
4
- import LeafletViewerController from "geoblacklight/controllers/leaflet_viewer_controller";
5
- import SearchResultsController from "geoblacklight/controllers/search_results_controller";
6
- import DownloadsController from "geoblacklight/controllers/downloads_controller";
7
- import ClipboardController from "geoblacklight/controllers/clipboard_controller";
2
+ import OpenlayersViewerController from "geoblacklight/controllers/openlayers_viewer_controller"
3
+ import OembedViewerController from "geoblacklight/controllers/oembed_viewer_controller"
4
+ import LeafletViewerController from "geoblacklight/controllers/leaflet_viewer_controller"
5
+ import SearchResultsController from "geoblacklight/controllers/search_results_controller"
6
+ import DownloadsController from "geoblacklight/controllers/downloads_controller"
7
+ import ClipboardController from "geoblacklight/controllers/clipboard_controller"
8
8
 
9
9
  // GBL core
10
- import Core from "geoblacklight/core";
10
+ import Core from "geoblacklight/core"
11
11
 
12
12
  // Other modules
13
- import openLayersBasemaps from "geoblacklight/openlayers/basemaps";
14
- import leafletBasemaps from "geoblacklight/leaflet/basemaps";
13
+ import openLayersBasemaps from "geoblacklight/openlayers/basemaps"
14
+ import leafletBasemaps from "geoblacklight/leaflet/basemaps"
15
15
 
16
16
  export default {
17
17
  OpenlayersViewerController,
@@ -24,4 +24,4 @@ export default {
24
24
  leafletBasemaps,
25
25
  Core,
26
26
  onLoad: Core.onLoad,
27
- };
27
+ }
@@ -1,54 +1,52 @@
1
1
  export class GeoBlacklightMetadataDownloadButton {
2
2
  constructor(el, i, options = {}) {
3
- this.options = options;
4
- this.el = typeof el === "string" ? document.querySelector(el) : el;
5
- this.download = document.querySelector(
6
- this.options.target || this.el.getAttribute("data-ref-download")
7
- );
3
+ this.options = options
4
+ this.el = typeof el === "string" ? document.querySelector(el) : el
5
+ this.download = document.querySelector(this.options.target || this.el.getAttribute("data-ref-download"))
8
6
  // On initialization only do this for the first one.
9
7
  if (i === 0) {
10
- this.setRefUrl();
8
+ this.setRefUrl()
11
9
  }
12
- this.configureHandler();
10
+ this.configureHandler()
13
11
  }
14
12
 
15
13
  configureHandler() {
16
- this.el.addEventListener("click", () => this.setRefUrl());
14
+ this.el.addEventListener("click", () => this.setRefUrl())
17
15
  }
18
16
 
19
17
  setRefUrl() {
20
- const refUrl = this.el.getAttribute("data-ref-endpoint");
18
+ const refUrl = this.el.getAttribute("data-ref-endpoint")
21
19
  if (!refUrl) {
22
- this.download.style.display = "none";
20
+ this.download.style.display = "none"
23
21
  } else {
24
- this.download.style.display = "";
25
- this.download.setAttribute("href", refUrl);
22
+ this.download.style.display = ""
23
+ this.download.setAttribute("href", refUrl)
26
24
  }
27
25
  }
28
26
  }
29
27
 
30
28
  export default function initializeMetadataDownload() {
31
- const modal = document.getElementById("blacklight-modal");
29
+ const modal = document.getElementById("blacklight-modal")
32
30
 
33
31
  modal.addEventListener("focus", (e) => {
34
- if (!Array.from(e.target.classList).includes('show')){
35
- return;
32
+ if (!Array.from(e.target.classList).includes("show")) {
33
+ return
36
34
  }
37
35
  e.target.querySelectorAll(".metadata-body").forEach((el) => {
38
- el.closest(".modal-content").classList.add("metadata-modal");
39
- });
36
+ el.closest(".modal-content").classList.add("metadata-modal")
37
+ })
40
38
 
41
39
  e.target.querySelectorAll(".pill-metadata").forEach((element, i) => {
42
- new GeoBlacklightMetadataDownloadButton(element, i);
43
- });
44
- });
40
+ new GeoBlacklightMetadataDownloadButton(element, i)
41
+ })
42
+ })
45
43
 
46
44
  modal.addEventListener("blur", (e) => {
47
- if (Array.from(e.target.classList).includes('show')){
48
- return;
45
+ if (Array.from(e.target.classList).includes("show")) {
46
+ return
49
47
  }
50
48
  e.target.querySelectorAll(".metadata-body").forEach((el) => {
51
- el.closest(".modal-content").classList.remove("metadata-modal");
52
- });
53
- });
49
+ el.closest(".modal-content").classList.remove("metadata-modal")
50
+ })
51
+ })
54
52
  }
@@ -1,11 +1,11 @@
1
- import { Popover } from 'bootstrap';
1
+ import { Popover } from "bootstrap"
2
2
 
3
3
  // Initialize popovers
4
4
  export default function initializePopovers() {
5
- const popoverElements = document.querySelectorAll('[data-bs-toggle="popover"]'); // Bootstrap 5 uses 'data-bs-toggle'
5
+ const popoverElements = document.querySelectorAll('[data-bs-toggle="popover"]') // Bootstrap 5 uses 'data-bs-toggle'
6
6
  popoverElements.forEach((element) => {
7
7
  const popover = new Popover(element, {
8
8
  trigger: "hover",
9
- });
10
- });
9
+ })
10
+ })
11
11
  }
@@ -1,40 +1,40 @@
1
1
  const fadeIn = (element, duration) => {
2
- element.style.opacity = 0;
3
- element.style.display = "block";
2
+ element.style.opacity = 0
3
+ element.style.display = "block"
4
4
 
5
- let start = null;
5
+ let start = null
6
6
  function step(timestamp) {
7
- if (!start) start = timestamp;
8
- const progress = timestamp - start;
9
- element.style.opacity = Math.min(progress / duration, 1);
7
+ if (!start) start = timestamp
8
+ const progress = timestamp - start
9
+ element.style.opacity = Math.min(progress / duration, 1)
10
10
  if (progress < duration) {
11
- window.requestAnimationFrame(step);
11
+ window.requestAnimationFrame(step)
12
12
  }
13
13
  }
14
14
 
15
- window.requestAnimationFrame(step);
16
- };
15
+ window.requestAnimationFrame(step)
16
+ }
17
17
 
18
18
  // Set up the relations widgets by querying the relations endpoint
19
19
  export default function initializeRelations() {
20
20
  document.querySelectorAll('[data-relations="true"]').forEach((element) => {
21
- const attributes = element.dataset;
22
- const relationUrl = `${attributes.url}/relations`;
21
+ const attributes = element.dataset
22
+ const relationUrl = `${attributes.url}/relations`
23
23
 
24
24
  fetch(relationUrl, { headers: { "X-Requested-With": "XMLHttpRequest" } })
25
25
  .then((response) => {
26
26
  if (!response.ok) {
27
- throw new Error("Network response was not ok");
27
+ throw new Error("Network response was not ok")
28
28
  }
29
- return response.text();
29
+ return response.text()
30
30
  })
31
31
  .then((data) => {
32
- const div = document.createElement("div");
33
- div.innerHTML = data;
34
- element.appendChild(div);
35
- div.style.display = "none";
36
- fadeIn(div, 200);
32
+ const div = document.createElement("div")
33
+ div.innerHTML = data
34
+ element.appendChild(div)
35
+ div.style.display = "none"
36
+ fadeIn(div, 200)
37
37
  })
38
- .catch((error) => console.error("Error:", error));
39
- });
38
+ .catch((error) => console.error("Error:", error))
39
+ })
40
40
  }
@@ -1,55 +1,51 @@
1
- import { Tooltip } from "bootstrap";
1
+ import { Tooltip } from "bootstrap"
2
2
 
3
3
  export default function initializeTooltips() {
4
4
  document.body.addEventListener(
5
5
  "mouseenter",
6
6
  (event) => {
7
7
  if (event.target.closest(".blacklight-icons.svg_tooltip svg")) {
8
- const svgElement = event.target.closest(
9
- ".blacklight-icons.svg_tooltip svg"
10
- );
11
- const svgTitleElement = svgElement.querySelector("title");
12
- const titleText = svgTitleElement ? svgTitleElement.textContent : "";
8
+ const svgElement = event.target.closest(".blacklight-icons.svg_tooltip svg")
9
+ const svgTitleElement = svgElement.querySelector("title")
10
+ const titleText = svgTitleElement ? svgTitleElement.textContent : ""
13
11
 
14
12
  if (titleText !== undefined && titleText !== "") {
15
13
  // Initialize Bootstrap tooltip with native JavaScript
16
14
  const tooltip = new Tooltip(svgElement, {
17
15
  placement: "bottom",
18
16
  title: titleText,
19
- });
20
- tooltip.show();
17
+ })
18
+ tooltip.show()
21
19
 
22
20
  // Store the original title in the data-original-title attribute
23
21
  // and remove the title element to prevent it from interfering with Bootstrap's tooltip.
24
- svgElement.setAttribute("data-original-title", titleText);
25
- svgTitleElement.remove();
22
+ svgElement.setAttribute("data-original-title", titleText)
23
+ svgTitleElement.remove()
26
24
  }
27
25
  }
28
26
  },
29
- true
30
- ); // Use capture to ensure the event is caught as it bubbles up
27
+ true,
28
+ ) // Use capture to ensure the event is caught as it bubbles up
31
29
 
32
30
  document.body.addEventListener(
33
31
  "mouseleave",
34
32
  (event) => {
35
33
  if (event.target.closest(".blacklight-icons.svg_tooltip svg")) {
36
- const svgElement = event.target.closest(
37
- ".blacklight-icons.svg_tooltip svg"
38
- );
39
- const originalTitle = svgElement.getAttribute("data-original-title");
34
+ const svgElement = event.target.closest(".blacklight-icons.svg_tooltip svg")
35
+ const originalTitle = svgElement.getAttribute("data-original-title")
40
36
 
41
37
  if (originalTitle !== undefined && originalTitle !== "") {
42
38
  // Restore the SVG title element from data-original-title
43
- const newTitleElement = document.createElement("title");
44
- newTitleElement.textContent = originalTitle;
45
- svgElement.prepend(newTitleElement);
46
- svgElement.setAttribute("data-original-title", "");
39
+ const newTitleElement = document.createElement("title")
40
+ newTitleElement.textContent = originalTitle
41
+ svgElement.prepend(newTitleElement)
42
+ svgElement.setAttribute("data-original-title", "")
47
43
  }
48
44
  }
49
45
 
50
46
  // Remove tooltips
51
- document.querySelectorAll(".tooltip").forEach((elem) => elem.remove());
47
+ document.querySelectorAll(".tooltip").forEach((elem) => elem.remove())
52
48
  },
53
- true
54
- ); // Use capture to ensure the event is caught as it bubbles up
49
+ true,
50
+ ) // Use capture to ensure the event is caught as it bubbles up
55
51
  }
@@ -5,31 +5,31 @@
5
5
  class Truncator {
6
6
  constructor(element, { lines, id }) {
7
7
  // if the element is already small enough, don't truncate it
8
- const minHeight = lines * parseFloat(window.getComputedStyle(element).fontSize);
9
- if (element.getBoundingClientRect().height < minHeight) return;
8
+ const minHeight = lines * parseFloat(window.getComputedStyle(element).fontSize)
9
+ if (element.getBoundingClientRect().height <= minHeight) return
10
10
 
11
11
  // set a unique ID for the element if it doesn't have one
12
- this.element = element;
13
- this.element.id ||= id;
12
+ this.element = element
13
+ this.element.id ||= id
14
14
 
15
15
  // add the button
16
- this.button = document.createElement("button");
17
- this.button.classList.add("btn", "btn-link", "p-0", "border-0");
18
- this.button.dataset.bsToggle = "collapse";
19
- this.button.dataset.bsTarget = `#${this.element.id}`;
20
- this.button.setAttribute("aria-expanded", "false");
21
- this.button.setAttribute("aria-controls", this.element.id);
22
- this.button.textContent = "Read more";
23
- this.button.addEventListener("click", this.toggle.bind(this));
24
- element.parentNode.insertBefore(this.button, element.nextSibling);
16
+ this.button = document.createElement("button")
17
+ this.button.classList.add("btn", "btn-link", "p-0", "border-0")
18
+ this.button.dataset.bsToggle = "collapse"
19
+ this.button.dataset.bsTarget = `#${this.element.id}`
20
+ this.button.setAttribute("aria-expanded", "false")
21
+ this.button.setAttribute("aria-controls", this.element.id)
22
+ this.button.textContent = "Read more"
23
+ this.button.addEventListener("click", this.toggle.bind(this))
24
+ element.parentNode.insertBefore(this.button, element.nextSibling)
25
25
 
26
26
  // start collapsed
27
- this.element.classList.add("collapse");
27
+ this.element.classList.add("collapse")
28
28
  }
29
29
 
30
30
  toggle() {
31
- if (this.button.textContent == "Read more") this.button.textContent = "Close";
32
- else this.button.textContent = "Read more";
31
+ if (this.button.textContent == "Read more") this.button.textContent = "Close"
32
+ else this.button.textContent = "Read more"
33
33
  }
34
34
  }
35
35
 
@@ -40,6 +40,6 @@ export default function initializeTruncation() {
40
40
  new Truncator(element, {
41
41
  lines: 12,
42
42
  id: `truncate-${i}`,
43
- });
44
- });
43
+ })
44
+ })
45
45
  }
@@ -65,10 +65,9 @@ export default {
65
65
  },
66
66
  openstreetmapStandard: {
67
67
  url: "https://tile.openstreetmap.org/{z}/{x}/{y}.png",
68
- attribution:
69
- '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',
68
+ attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',
70
69
  maxZoom: 19,
71
70
  worldCopyJump: true,
72
71
  retina: "@2x",
73
72
  },
74
- };
73
+ }
@@ -1,18 +1,18 @@
1
- import { LatLngBounds } from "leaflet";
1
+ import { LatLngBounds } from "leaflet"
2
2
 
3
3
  export const DEFAULT_BOUNDS = new LatLngBounds([
4
4
  [-30, -100],
5
5
  [30, 100],
6
- ]);
6
+ ])
7
7
 
8
- export const DEFAULT_OPACITY = 0.75;
8
+ export const DEFAULT_OPACITY = 0.75
9
9
 
10
- export const DEFAULT_BASEMAP = "positron";
10
+ export const DEFAULT_BASEMAP = "positron"
11
11
 
12
12
  export const DEFAULT_GEOM_OVERLAY_OPTIONS = {
13
- color: '#3388ff',
13
+ color: "#3388ff",
14
14
  dashArray: "5 5",
15
15
  weight: 2,
16
16
  opacity: 1,
17
- fillOpacity: 0
18
- }
17
+ fillOpacity: 0,
18
+ }
@@ -1,160 +1,166 @@
1
- import { DomUtil, Control, Handler, setOptions } from "leaflet";
2
- import { debounce, boundsToBbox } from "geoblacklight/leaflet/utils";
1
+ import { DomUtil, Control, Handler, setOptions } from "leaflet"
2
+ import { debounce, boundsToBbox } from "geoblacklight/leaflet/utils"
3
3
 
4
4
  export const geosearchDefaultOptions = {
5
5
  dynamic: true,
6
6
  delay: 800,
7
- };
7
+ }
8
8
 
9
9
  export default class GeoSearchControl extends Control {
10
10
  constructor(options) {
11
- const _options = { ...geosearchDefaultOptions, ...options };
12
- super(_options);
13
- setOptions(this, _options);
11
+ const _options = { ...geosearchDefaultOptions, ...options }
12
+ super(_options)
13
+ setOptions(this, _options)
14
14
  }
15
15
 
16
16
  onAdd(map) {
17
- this.map = map;
18
- this.map.options.geoSearchControl = this;
17
+ this.map = map
18
+ this.map.options.geoSearchControl = this
19
19
 
20
20
  // Create the buttons
21
- this.staticButton = this.createStaticButton();
22
- this.dynamicButton = this.createDynamicButton();
21
+ this.staticButton = this.createStaticButton()
22
+ this.dynamicButton = this.createDynamicButton()
23
23
 
24
24
  // Add the buttons to the viewer
25
- const container = DomUtil.create("div");
26
- container.className = "leaflet-control search-control";
27
- container.appendChild(this.staticButton);
28
- container.appendChild(this.dynamicButton);
25
+ const container = DomUtil.create("div")
26
+ container.className = "leaflet-control search-control"
27
+ container.appendChild(this.staticButton)
28
+ container.appendChild(this.dynamicButton)
29
29
 
30
30
  // Show the appropriate button
31
- if (this.options.dynamic) this.dynamicButton.style.display = "block";
32
- else this.staticButton.style.display = "block";
31
+ if (this.options.dynamic) this.dynamicButton.style.display = "block"
32
+ else this.staticButton.style.display = "block"
33
33
 
34
34
  // Set up the dynamic search function with debounce
35
35
  this.dynamicSearcher = debounce(() => {
36
36
  if (this.options.dynamic) {
37
- this.applySearch();
37
+ this.applySearch()
38
38
  }
39
- }, this.options.delay);
39
+ }, this.options.delay)
40
40
 
41
41
  // Add the event handler
42
- this.map.addHandler("geosearch", GeoSearchHandler);
42
+ this.map.addHandler("geosearch", GeoSearchHandler)
43
43
 
44
- return container;
44
+ return container
45
45
  }
46
46
 
47
47
  // Button to search when clicked; contains an icon
48
48
  createStaticButton() {
49
- const staticButtonNode = DomUtil.create("a");
50
- staticButtonNode.setAttribute("id", "gbl-static-button");
51
- staticButtonNode.setAttribute("href", "#");
52
- staticButtonNode.setAttribute("style", "display:none;");
53
- staticButtonNode.className = "btn btn-primary";
54
- staticButtonNode.textContent = "Search here";
55
- staticButtonNode.addEventListener("click", this.staticSearch.bind(this));
56
- return staticButtonNode;
49
+ const staticButtonNode = DomUtil.create("a")
50
+ staticButtonNode.setAttribute("id", "gbl-static-button")
51
+ staticButtonNode.setAttribute("href", "#")
52
+ staticButtonNode.setAttribute("style", "display:none;")
53
+ staticButtonNode.className = "btn btn-primary shadow"
54
+ staticButtonNode.textContent = "Search here"
55
+ staticButtonNode.addEventListener("click", this.staticSearch.bind(this))
56
+ return staticButtonNode
57
57
  }
58
58
 
59
59
  // Button to search when the map is moved; contains a checkbox
60
60
  createDynamicButton() {
61
- const dynamicButtonNode = DomUtil.create("label");
62
- dynamicButtonNode.setAttribute("id", "gbl-dynamic-button");
63
- dynamicButtonNode.textContent = " Search when I move the map";
64
- dynamicButtonNode.setAttribute("style", "display:none;");
65
- const input = DomUtil.create("input");
66
- input.setAttribute("type", "checkbox");
67
- input.checked = true;
68
- dynamicButtonNode.insertBefore(input, dynamicButtonNode.firstChild);
69
- dynamicButtonNode.addEventListener(
70
- "input",
71
- this.toggleDynamicSearch.bind(this)
72
- );
73
- return dynamicButtonNode;
61
+ const dynamicButtonNode = DomUtil.create("label")
62
+ dynamicButtonNode.setAttribute("id", "gbl-dynamic-button")
63
+ dynamicButtonNode.className = "btn shadow border form-check-label"
64
+ dynamicButtonNode.textContent = " Search when I move the map"
65
+ dynamicButtonNode.setAttribute("style", "display:none;")
66
+ dynamicButtonNode.setAttribute("for", "gbl-dynamic-search-toggle")
67
+ const input = DomUtil.create("input")
68
+ input.setAttribute("type", "checkbox")
69
+ input.setAttribute("id", "gbl-dynamic-search-toggle")
70
+ input.className = "form-check-input"
71
+ input.checked = true
72
+ dynamicButtonNode.insertBefore(input, dynamicButtonNode.firstChild)
73
+ dynamicButtonNode.addEventListener("input", this.toggleDynamicSearch.bind(this))
74
+ return dynamicButtonNode
74
75
  }
75
76
 
76
77
  // Hide the static button, show the dynamic button, and apply the search
77
78
  staticSearch() {
78
- this.staticButton.style.display = "none";
79
+ this.staticButton.style.display = "none"
79
80
  if (this.options.dynamic) {
80
- this.dynamicButton.style.display = "block";
81
+ this.dynamicButton.style.display = "block"
81
82
  }
82
83
  // Do full page reload for staticSearch button
83
- this.applySearch({ turbo: false });
84
+ this.applySearch({ turbo: false })
84
85
  }
85
86
 
86
87
  // Update the URL with the current bounding box and go back to page 1
87
- applySearch(opts={turbo: true}) {
88
+ applySearch(opts = { turbo: true }) {
88
89
  // Delete any existing page and bbox parameters
89
- const params = new URL(window.location).searchParams;
90
- params.delete("page");
91
- params.delete("bbox");
90
+ const params = new URL(window.location).searchParams
91
+ params.delete("page")
92
+ params.delete("bbox")
92
93
 
93
94
  // Calculate the bounding box from the current map bounds
94
- const bbox = boundsToBbox(this._map.getBounds());
95
- params.set("bbox", bbox.join(" "));
95
+ const bbox = boundsToBbox(this._map.getBounds())
96
+ params.set("bbox", bbox.join(" "))
96
97
 
97
98
  // Make the new target URL using the configured base URL
98
99
  const newUrl = new URL(this.options.baseUrl)
99
100
  newUrl.search = params.toString()
100
101
 
101
102
  // If Turbo Drive is active, do the new page navigation without a full page reload
102
- if (window.Turbo && opts.turbo) window.Turbo.visit(newUrl);
103
-
103
+ if (Turbo && opts.turbo) {
104
+ // prevent scroll to top on new page
105
+ document.addEventListener("turbo:before-render", (event) => {
106
+ Turbo.navigator.currentVisit.scrolled = true
107
+ })
108
+ Turbo.visit(newUrl)
109
+ }
104
110
  // Otherwise fall back to the traditional full page reload
105
- else window.location.href = newUrl;
111
+ else window.location.href = newUrl
106
112
  }
107
113
 
108
114
  // Toggle the dynamic search option
109
115
  toggleDynamicSearch() {
110
- this.options.dynamic = !this.options.dynamic;
116
+ this.options.dynamic = !this.options.dynamic
111
117
  }
112
118
 
113
119
  // Hide the dynamic button and show the static button
114
120
  hideDynamicButton() {
115
- this.dynamicButton.style.display = "none";
116
- this.staticButton.style.display = "block";
121
+ this.dynamicButton.style.display = "none"
122
+ this.staticButton.style.display = "block"
117
123
  }
118
124
  }
119
125
 
120
126
  class GeoSearchHandler extends Handler {
121
127
  constructor(map) {
122
- super(map);
123
- this.map = map;
124
- this.control = map.options.geoSearchControl;
125
- this.wasResized = false;
128
+ super(map)
129
+ this.map = map
130
+ this.control = map.options.geoSearchControl
131
+ this.wasResized = false
126
132
  }
127
133
 
128
134
  // Bind event handlers to the map
129
135
  addHooks() {
130
- this.map.on("resize", this.handleResize.bind(this));
131
- this.map.on("dragend", this.handleDragEnd.bind(this));
132
- this.map.on("dragstart", this.handleDragStart.bind(this));
133
- this.map.on("zoomstart", this.handleDragEnd.bind(this));
134
- this.map.on("zoomend", this.handleDragStart.bind(this));
136
+ this.map.on("resize", this.handleResize.bind(this))
137
+ this.map.on("dragend", this.handleDragEnd.bind(this))
138
+ this.map.on("dragstart", this.handleDragStart.bind(this))
139
+ this.map.on("zoomstart", this.handleDragEnd.bind(this))
140
+ this.map.on("zoomend", this.handleDragStart.bind(this))
135
141
  }
136
142
 
137
143
  // Remove event handlers from the map
138
144
  removeHooks() {
139
- this.map.off("resize");
140
- this.map.off("dragend");
141
- this.map.off("dragstart");
142
- this.map.off("zoomend");
143
- this.map.off("zoomstart");
145
+ this.map.off("resize")
146
+ this.map.off("dragend")
147
+ this.map.off("dragstart")
148
+ this.map.off("zoomend")
149
+ this.map.off("zoomstart")
144
150
  }
145
151
 
146
152
  handleResize() {
147
- this.wasResized = true;
153
+ this.wasResized = true
148
154
  }
149
155
 
150
156
  handleDragEnd() {
151
- if (this.wasResized) this.wasResized = false;
152
- else this.control.dynamicSearcher.apply(this.control);
157
+ if (this.wasResized) this.wasResized = false
158
+ else this.control.dynamicSearcher.apply(this.control)
153
159
  }
154
160
 
155
161
  handleDragStart() {
156
162
  if (!this.control.options.dynamic) {
157
- this.control.hideDynamicButton();
163
+ this.control.hideDynamicButton()
158
164
  }
159
165
  }
160
166
  }