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,18 @@
1
- import { Icon, Control } from "leaflet";
2
- import { FullScreen } from "leaflet.fullscreen";
3
- import { layerGroup, polygon, map, tileLayer } from "leaflet";
4
- import { imageMapLayer } from "esri-leaflet";
5
- import { Controller } from "@hotwired/stimulus";
6
- import basemaps from "geoblacklight/leaflet/basemaps";
7
- import LayerOpacityControl from "geoblacklight/leaflet/controls/layer_opacity";
8
- import GeoSearchControl from "geoblacklight/leaflet/controls/geosearch";
9
- import Sleep from "geoblacklight/leaflet/controls/sleep";
10
- import { wmsInspection,
1
+ import { Icon, Control } from "leaflet"
2
+ import { FullScreen } from "leaflet.fullscreen"
3
+ import { layerGroup, polygon, map, tileLayer } from "leaflet"
4
+ import { imageMapLayer } from "esri-leaflet"
5
+ import { Controller } from "@hotwired/stimulus"
6
+ import basemaps from "geoblacklight/leaflet/basemaps"
7
+ import LayerOpacityControl from "geoblacklight/leaflet/controls/layer_opacity"
8
+ import GeoSearchControl from "geoblacklight/leaflet/controls/geosearch"
9
+ import Sleep from "geoblacklight/leaflet/controls/sleep"
10
+ import {
11
+ wmsInspection,
11
12
  tiledMapLayerInspection,
12
13
  featureLayerInspection,
13
- dynamicMapLayerInspection
14
- } from "geoblacklight/leaflet/inspection";
14
+ dynamicMapLayerInspection,
15
+ } from "geoblacklight/leaflet/inspection"
15
16
  import {
16
17
  esriDynamicMapLayer,
17
18
  esriFeatureLayer,
@@ -20,10 +21,10 @@ import {
20
21
  wmsLayer,
21
22
  wmtsLayer,
22
23
  indexMapLayer,
23
- } from "geoblacklight/leaflet/layers";
24
- import { geoJSONToBounds } from "geoblacklight/leaflet/utils";
25
- import { DEFAULT_BOUNDS, DEFAULT_OPACITY, DEFAULT_GEOM_OVERLAY_OPTIONS } from "geoblacklight/leaflet/constants";
26
- import sidebarControl from "geoblacklight/leaflet/controls/sidebar";
24
+ } from "geoblacklight/leaflet/layers"
25
+ import { geoJSONToBounds } from "geoblacklight/leaflet/utils"
26
+ import { DEFAULT_BOUNDS, DEFAULT_OPACITY, DEFAULT_GEOM_OVERLAY_OPTIONS } from "geoblacklight/leaflet/constants"
27
+ import sidebarControl from "geoblacklight/leaflet/controls/sidebar"
27
28
 
28
29
  export default class LeafletViewerController extends Controller {
29
30
  static values = {
@@ -37,198 +38,188 @@ export default class LeafletViewerController extends Controller {
37
38
  page: String,
38
39
  layerId: String,
39
40
  drawInitialBounds: Boolean,
40
- };
41
+ }
41
42
 
42
43
  connect() {
43
44
  // Use leaflet icon images from CDN
44
- Icon.Default.imagePath = "https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.9.4/images/";
45
+ Icon.Default.imagePath = "https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.9.4/images/"
45
46
 
46
47
  // Set up layers
47
- this.basemap = this.getBasemap();
48
- this.overlay = layerGroup();
48
+ this.basemap = this.getBasemap()
49
+ this.overlay = layerGroup()
49
50
 
50
51
  // Calculate bounds
51
- this.bounds = DEFAULT_BOUNDS;
52
- if (this.hasMapGeomValue) this.bounds = geoJSONToBounds(this.mapGeomValue);
52
+ this.bounds = DEFAULT_BOUNDS
53
+ if (this.hasMapGeomValue) this.bounds = geoJSONToBounds(this.mapGeomValue)
53
54
 
54
55
  // Load the map
55
- this.loadMap();
56
- }
57
-
58
- get config() {
59
-
60
- if (!this.optionsValue.VIEWERS || !this.hasProtocolValue) return {};
61
- return this.optionsValue.VIEWERS[this.protocolValue.toUpperCase()];
56
+ this.loadMap()
62
57
  }
63
58
 
64
59
  // Create the map, add layers, fit the bounds
65
60
  async loadMap() {
66
- if (this.map) return;
61
+ if (this.map) return
67
62
 
68
63
  // Set up the map and fit to bounds
69
- const sleepSettings = this.optionsValue.SLEEP || { 'SLEEP' : false }
70
- this.map = map(this.element, sleepSettings);
71
- if (sleepSettings.SLEEP) this.map.addHandler('SLEEP', Sleep);
64
+ const sleepSettings = this.optionsValue.sleep || { sleep: false }
65
+ this.map = map(this.element, sleepSettings)
66
+ if (sleepSettings.sleep) this.map.addHandler("SLEEP", Sleep)
72
67
 
73
- this.map.addLayer(this.basemap);
74
- this.map.addLayer(this.overlay);
75
- this.fitBounds(this.bounds);
76
- this.map.options.selected_color = this.optionsValue.SELECTED_COLOR || 'blue';
68
+ this.map.addLayer(this.basemap)
69
+ this.map.addLayer(this.overlay)
70
+ this.fitBounds(this.bounds)
71
+ this.map.options.selected_color = this.optionsValue.selected_color || "blue"
77
72
 
78
73
  // If the data is available, add the preview and set up inspection
79
74
  // Otherwise just draw the bounds, if configured to do so
80
75
  if (this.availableValue && this.protocolValue) {
81
- await this.addPreviewOverlay();
82
- this.addInspection();
76
+ await this.addPreviewOverlay()
77
+ this.addInspection()
83
78
  } else if (this.drawInitialBoundsValue && this.bounds) {
84
- this.addBoundsOverlay(this.bounds);
79
+ this.addBoundsOverlay(this.bounds)
85
80
  }
86
81
 
87
82
  // Add configured controls
88
- this.addControls();
83
+ this.addControls()
89
84
 
90
- if (this.protocolValue == "IndexMap"){
85
+ if (this.protocolValue == "IndexMap") {
91
86
  this.fitBounds(this.previewOverlay.getBounds())
92
87
  }
93
88
 
94
89
  // Enable geosearch handler, if available
95
- if (this.map.geosearch) this.map.geosearch.enable();
90
+ if (this.map.geosearch) this.map.geosearch.enable()
96
91
 
97
92
  // Emit an event for other controllers to listen to
98
- this.dispatch("loaded");
93
+ this.dispatch("loaded")
99
94
  }
100
95
 
101
96
  // Set the bounds of the map to an L.LatLngBounds object
102
97
  fitBounds(bounds) {
103
98
  // prevent map from moving when setting bounds, if relevant
104
- if (this.map.geosearch) this.map.geosearch.disable();
105
- this.map.fitBounds(bounds, { animate: false, noMoveStart: true });
106
- this.bounds = bounds;
107
- if (this.map.geosearch) this.map.geosearch.enable();
108
- this.element.dataset.bounds = this.bounds.toBBoxString();
99
+ if (this.map.geosearch) this.map.geosearch.disable()
100
+ this.map.fitBounds(bounds, { animate: false, noMoveStart: true })
101
+ this.bounds = bounds
102
+ if (this.map.geosearch) this.map.geosearch.enable()
103
+ this.element.dataset.bounds = this.bounds.toBBoxString()
109
104
  }
110
105
 
111
106
  // Select the configured basemap to use
112
107
  getBasemap() {
113
- const basemapName = this.basemapValue || "positron";
108
+ const basemapName = this.basemapValue || "positron"
114
109
  return tileLayer(basemaps[basemapName].url, {
115
110
  ...basemaps[basemapName],
116
- detectRetina: this.optionsValue.LAYERS.DETECT_RETINA || false,
117
- });
111
+ detectRetina: this.optionsValue.layers.detect_retina || false,
112
+ })
118
113
  }
119
114
 
120
115
  // Add the configured controls to the map
121
116
  addControls() {
122
117
  // Add any top-level controls (e.g. geosearch) first
123
- const globalControls = this.optionsValue.CONTROLS || {};
118
+ const globalControls = this.optionsValue.controls || {}
124
119
  Object.entries(globalControls).forEach(([controlName, controlOptions]) => {
125
- const control = this.getControl(controlName, controlOptions);
126
- if (control) this.addControl(control);
127
- });
120
+ const control = this.getControl(controlName, controlOptions)
121
+ if (control) this.addControl(control)
122
+ })
128
123
 
129
124
  // Add opacity and fullscreen controls for all layers
130
125
  if (this.hasProtocolValue) {
131
- if (this.availableValue){
132
- const opacityControl = this.getControl("Opacity");
133
- this.addControl(opacityControl);
126
+ if (this.availableValue) {
127
+ const opacityControl = this.getControl("Opacity")
128
+ this.addControl(opacityControl)
134
129
  }
135
- const fullscreenControl = this.getControl("Fullscreen");
136
- this.addControl(fullscreenControl);
130
+ const fullscreenControl = this.getControl("Fullscreen")
131
+ this.addControl(fullscreenControl)
137
132
  }
138
133
  }
139
134
 
140
135
  // Add a pre-configured L.Control instance to the map
141
136
  addControl(control) {
142
- this.map.addControl(control);
137
+ this.map.addControl(control)
143
138
  }
144
139
 
145
140
  // Look up the control name and return the corresponding L.Control instance
146
141
  getControl(controlName, controlOptions) {
147
- if (controlName == "Opacity")
148
- return new LayerOpacityControl(this.previewOverlay);
149
- if (controlName == "Fullscreen")
150
- return new FullScreen({ position: "bottomleft", ...controlOptions });
142
+ if (controlName == "Opacity") return new LayerOpacityControl(this.previewOverlay)
143
+ if (controlName == "Fullscreen") return new FullScreen({ position: "bottomleft", ...controlOptions })
151
144
  if (controlName == "Geosearch")
152
- return new GeoSearchControl({ baseUrl: this.catalogBaseUrlValue, ...controlOptions });
153
- console.error(`Unsupported control name: "${controlName}"`);
145
+ return new GeoSearchControl({
146
+ baseUrl: this.catalogBaseUrlValue,
147
+ ...controlOptions,
148
+ })
149
+ console.error(`Unsupported control name: "${controlName}"`)
154
150
  }
155
151
 
156
152
  // Add the bounding box to the map
157
153
  addBoundsOverlay(bounds) {
158
- const hasMapGeomValue = Object.keys(this.mapGeomValue).length > 0 && !this.map.geosearch;
159
- var defaultOptions = hasMapGeomValue ? DEFAULT_GEOM_OVERLAY_OPTIONS : {};
160
- const overlayOptions = this.optionsValue.BOUNDSOVERLAY || {};
161
- const options = {...defaultOptions, ...overlayOptions[this.pageValue]}
162
- const boundsOverlay = polygon([
163
- bounds.getSouthWest(),
164
- bounds.getSouthEast(),
165
- bounds.getNorthEast(),
166
- bounds.getNorthWest(),
167
- ], options
168
- );
169
-
154
+ const hasMapGeomValue = Object.keys(this.mapGeomValue).length > 0 && !this.map.geosearch
155
+ var defaultOptions = hasMapGeomValue ? DEFAULT_GEOM_OVERLAY_OPTIONS : {}
156
+ const overlayOptions = this.optionsValue.bounds_overlay || {}
157
+ const options = { ...defaultOptions, ...overlayOptions[this.pageValue] }
158
+ const boundsOverlay = polygon(
159
+ [bounds.getSouthWest(), bounds.getSouthEast(), bounds.getNorthEast(), bounds.getNorthWest()],
160
+ options,
161
+ )
162
+
170
163
  // Render geometry layer if available
171
- if (hasMapGeomValue) this.map.addLayer(L.geoJSON(this.mapGeomValue, overlayOptions[this.pageValue]));
164
+ if (hasMapGeomValue) this.map.addLayer(L.geoJSON(this.mapGeomValue, overlayOptions[this.pageValue]))
172
165
 
173
166
  // Render the bounds overlay
174
- this.boundsOverlay = boundsOverlay;
175
- this.overlay.addLayer(boundsOverlay);
167
+ this.boundsOverlay = boundsOverlay
168
+ this.overlay.addLayer(boundsOverlay)
176
169
  }
177
170
 
178
171
  // Remove the bounding box overlay
179
172
  removeBoundsOverlay() {
180
- if (this.boundsOverlay) this.overlay.removeLayer(this.boundsOverlay);
173
+ if (this.boundsOverlay) this.overlay.removeLayer(this.boundsOverlay)
181
174
  }
182
175
 
183
176
  setUpSidebar() {
184
- const sidebar = document.querySelector('[data-sidebar]')
185
- if (!sidebar || sidebar.dataset.sidebar != 'true') return;
177
+ const sidebar = document.querySelector("[data-sidebar]")
178
+ if (!sidebar || sidebar.dataset.sidebar != "true") return
186
179
  const control = new sidebarControl({
187
- position: 'topright',
188
- sidebar
189
- });
190
- this.map.addControl(control);
180
+ position: "topright",
181
+ sidebar,
182
+ })
183
+ this.map.addControl(control)
191
184
  }
192
185
 
193
186
  addInspection() {
194
- const inspectionProtocols = ['Wms', 'FeatureLayer', 'DynamicMapLayer', 'IndexMap']
195
- if (!inspectionProtocols.includes(this.protocolValue)) return;
196
- this.setUpSidebar();
197
- if (this.protocolValue == "Wms") return wmsInspection(this.map, this.urlValue, this.layerIdValue, this.previewOverlay);
198
- if (this.protocolValue == "FeatureLayer") return featureLayerInspection(this.map, this.previewOverlay);
199
- if (this.protocolValue == "DynamicMapLayer") return dynamicMapLayerInspection(this.map, this.previewOverlay, this.layerIdValue);
187
+ const inspectionProtocols = ["Wms", "FeatureLayer", "DynamicMapLayer", "IndexMap"]
188
+ if (!inspectionProtocols.includes(this.protocolValue)) return
189
+ this.setUpSidebar()
190
+ if (this.protocolValue == "Wms")
191
+ return wmsInspection(this.map, this.urlValue, this.layerIdValue, this.previewOverlay)
192
+ if (this.protocolValue == "FeatureLayer") return featureLayerInspection(this.map, this.previewOverlay)
193
+ if (this.protocolValue == "DynamicMapLayer")
194
+ return dynamicMapLayerInspection(this.map, this.previewOverlay, this.layerIdValue)
200
195
  // TODO: TiledMapLayer is converted but seems busted -- see layers.js. Don't know what to test it with, need a fixture.
201
196
  // if (this.protocolValue == "TiledMapLayer") return tiledMapLayerInspection(this.map, this.previewOverlay);
202
197
  }
203
198
 
204
199
  // Add the actual data to the map as a layer
205
200
  async addPreviewOverlay() {
206
- this.previewOverlay = await this.getPreviewOverlay(
207
- this.protocolValue,
208
- this.urlValue,
209
- {
210
- layerId: this.layerIdValue,
211
- opacity: this.optionsValue.opacity || DEFAULT_OPACITY,
212
- detectRetina: this.optionsValue.LAYERS.DETECT_RETINA || false,
213
- }
214
- );
215
- if (this.previewOverlay) this.overlay.addLayer(this.previewOverlay);
201
+ this.previewOverlay = await this.getPreviewOverlay(this.protocolValue, this.urlValue, {
202
+ layerId: this.layerIdValue,
203
+ opacity: this.optionsValue.opacity || DEFAULT_OPACITY,
204
+ detectRetina: this.optionsValue.layers.detect_retina || false,
205
+ })
206
+ if (this.previewOverlay) this.overlay.addLayer(this.previewOverlay)
216
207
  }
217
208
 
218
209
  // Generate a layer based on the protocol
219
210
  async getPreviewOverlay(protocol, url, options) {
220
- if (protocol == "DynamicMapLayer") return esriDynamicMapLayer(url, options);
221
- if (protocol == "FeatureLayer") return esriFeatureLayer(url, options);
211
+ if (protocol == "DynamicMapLayer") return esriDynamicMapLayer(url, options)
212
+ if (protocol == "FeatureLayer") return esriFeatureLayer(url, options)
222
213
  // imageMapLayer is a built-in method from esri-leaflet
223
- if (protocol == "ImageMapLayer") return imageMapLayer({url, ...options});
224
- if (protocol == "IndexMap") return await indexMapLayer(url, this.optionsValue);
225
- if (protocol == "TiledMapLayer") return await esriTiledMapLayer(url, options);
226
- if (protocol == "Tilejson") return await tileJsonLayer(url, options);
214
+ if (protocol == "ImageMapLayer") return imageMapLayer({ url, ...options })
215
+ if (protocol == "IndexMap") return await indexMapLayer(url, this.optionsValue)
216
+ if (protocol == "TiledMapLayer") return await esriTiledMapLayer(url, options)
217
+ if (protocol == "Tilejson") return await tileJsonLayer(url, options)
227
218
  // tileLayer is a built-in method from leaflet
228
- if (protocol == "Tms") return tileLayer(url, { tms: true, ...options });
229
- if (protocol == "Wms") return wmsLayer(url, options);
230
- if (protocol == "Wmts") return await wmtsLayer(url, options);
231
- if (protocol == "Xyz") return tileLayer(url, options);
232
- console.error(`Unsupported protocol name: "${protocol}"`);
219
+ if (protocol == "Tms") return tileLayer(url, { tms: true, ...options })
220
+ if (protocol == "Wms") return wmsLayer(url, options)
221
+ if (protocol == "Wmts") return await wmtsLayer(url, options)
222
+ if (protocol == "Xyz") return tileLayer(url, options)
223
+ console.error(`Unsupported protocol name: "${protocol}"`)
233
224
  }
234
225
  }
@@ -1,18 +1,18 @@
1
- import { Controller } from "@hotwired/stimulus";
1
+ import { Controller } from "@hotwired/stimulus"
2
2
 
3
3
  export default class OembedViewerController extends Controller {
4
4
  static values = {
5
5
  url: String,
6
- };
6
+ }
7
7
 
8
8
  connect() {
9
9
  fetch(this.urlValue)
10
10
  .then((response) => response.json())
11
11
  .then((data) => {
12
- if (data) this.element.innerHTML = data.html;
12
+ if (data) this.element.innerHTML = data.html
13
13
  })
14
14
  .catch((error) => {
15
- console.error("Error loading oEmbed data:", error);
16
- });
15
+ console.error("Error loading oEmbed data:", error)
16
+ })
17
17
  }
18
18
  }
@@ -1,12 +1,12 @@
1
- import { Map } from "ol";
2
- import TileLayer from "ol/layer/Tile";
3
- import XYZ from "ol/source/XYZ";
4
- import GeoJSON from "ol/format/GeoJSON";
5
- import { FullScreen, defaults as defaultControls } from "ol/control";
6
- import { pmTilesLayer, cogLayer } from "geoblacklight/openlayers/layers";
7
- import basemaps from "geoblacklight/openlayers/basemaps";
8
- import { Controller } from "@hotwired/stimulus";
9
- import { pmTilesInspection } from "geoblacklight/openlayers/inspection";
1
+ import { Map } from "ol"
2
+ import TileLayer from "ol/layer/Tile"
3
+ import XYZ from "ol/source/XYZ"
4
+ import GeoJSON from "ol/format/GeoJSON"
5
+ import { FullScreen, defaults as defaultControls } from "ol/control"
6
+ import { pmTilesLayer, cogLayer } from "geoblacklight/openlayers/layers"
7
+ import basemaps from "geoblacklight/openlayers/basemaps"
8
+ import { Controller } from "@hotwired/stimulus"
9
+ import { pmTilesInspection } from "geoblacklight/openlayers/inspection"
10
10
 
11
11
  export default class OpenlayersViewerController extends Controller {
12
12
  static values = {
@@ -14,16 +14,16 @@ export default class OpenlayersViewerController extends Controller {
14
14
  protocol: String,
15
15
  basemap: String,
16
16
  mapGeom: String,
17
- };
17
+ }
18
18
 
19
19
  async connect() {
20
20
  // Set up layers
21
- this.basemap = this.getBasemap();
22
- this.overlay = this.getPreviewOverlay(this.protocolValue, this.urlValue);
21
+ this.basemap = this.getBasemap()
22
+ this.overlay = this.getPreviewOverlay(this.protocolValue, this.urlValue)
23
23
 
24
- await this.getBounds();
24
+ await this.getBounds()
25
25
  // Load the map
26
- this.loadMap();
26
+ this.loadMap()
27
27
  }
28
28
 
29
29
  // Create the map, add layers, and fit the bounds
@@ -32,38 +32,35 @@ export default class OpenlayersViewerController extends Controller {
32
32
  target: this.element,
33
33
  controls: defaultControls().extend([new FullScreen()]),
34
34
  layers: [this.basemap, this.overlay],
35
- });
36
- this.map.getView().fit(this.extent, this.map.getSize());
35
+ })
36
+ this.map.getView().fit(this.extent, this.map.getSize())
37
37
  this.addInspection()
38
38
  }
39
39
 
40
40
  addInspection() {
41
- if (this.protocolValue == "Pmtiles") return pmTilesInspection(this.map);
41
+ if (this.protocolValue == "Pmtiles") return pmTilesInspection(this.map)
42
42
  }
43
43
 
44
44
  async getBounds() {
45
- if (this.protocolValue == 'Cog') {
46
- const view = await this.overlay.getSource().getView();
47
- this.extent = view.extent;
45
+ if (this.protocolValue == "Cog") {
46
+ const view = await this.overlay.getSource().getView()
47
+ this.extent = view.extent
48
48
  } else {
49
- this.extent = new GeoJSON()
50
- .readFeatures(this.mapGeomValue)[0]
51
- .getGeometry()
52
- .getExtent();
49
+ this.extent = new GeoJSON().readFeatures(this.mapGeomValue)[0].getGeometry().getExtent()
53
50
  }
54
51
  }
55
52
 
56
53
  // Select the configured basemap to use
57
54
  getBasemap() {
58
- const basemap = basemaps[this.basemapValue || "positron"];
59
- const layer = new TileLayer({ source: new XYZ(basemap) });
60
- return layer;
55
+ const basemap = basemaps[this.basemapValue || "positron"]
56
+ const layer = new TileLayer({ source: new XYZ(basemap) })
57
+ return layer
61
58
  }
62
59
 
63
60
  // Generate a layer based on the protocol
64
61
  getPreviewOverlay(protocol, url) {
65
- if (protocol === "Pmtiles") return pmTilesLayer(url);
66
- if (protocol === "Cog") return cogLayer(url);
67
- console.error(`Unsupported protocol name: "${protocol}"`);
62
+ if (protocol === "Pmtiles") return pmTilesLayer(url)
63
+ if (protocol === "Cog") return cogLayer(url)
64
+ console.error(`Unsupported protocol name: "${protocol}"`)
68
65
  }
69
66
  }
@@ -1,50 +1,50 @@
1
- import { Controller } from "@hotwired/stimulus";
2
- import { geoJSONToBounds } from "geoblacklight/leaflet/utils";
3
- import { DEFAULT_BOUNDS } from "geoblacklight/leaflet/constants";
1
+ import { Controller } from "@hotwired/stimulus"
2
+ import { geoJSONToBounds } from "geoblacklight/leaflet/utils"
3
+ import { DEFAULT_BOUNDS } from "geoblacklight/leaflet/constants"
4
4
 
5
5
  export default class SearchResultsController extends Controller {
6
- static targets = ["result"];
7
- static outlets = ["leaflet-viewer"];
6
+ static targets = ["result"]
7
+ static outlets = ["leaflet-viewer"]
8
8
 
9
9
  // Fit the map to the combined bounding box of all search results
10
10
  // If a bounding box query is already active, do not override it
11
11
  fitResultBounds() {
12
- if (new URL(window.location).searchParams.get("bbox")) return;
13
- this.leafletViewerOutlet.fitBounds(this.getMaximalBounds());
12
+ if (new URL(window.location).searchParams.get("bbox")) return
13
+ this.leafletViewerOutlet.fitBounds(this.getMaximalBounds())
14
14
  }
15
15
 
16
16
  // Get the bounding box of a search result from its data attributes
17
17
  getResultBounds(resultElement) {
18
- const geomElement = resultElement.querySelector("[data-geom]");
18
+ const geomElement = resultElement.querySelector("[data-geom]")
19
19
  if (geomElement && geomElement.dataset.geom) {
20
- return geoJSONToBounds(JSON.parse(geomElement.dataset.geom));
20
+ return geoJSONToBounds(JSON.parse(geomElement.dataset.geom))
21
21
  }
22
22
  }
23
23
 
24
24
  // Find the combined bounding box of all search results
25
25
  getMaximalBounds() {
26
- const bounds = this.resultTargets.map(this.getResultBounds);
27
- const nonNullBounds = bounds.filter((b) => b);
26
+ const bounds = this.resultTargets.map(this.getResultBounds)
27
+ const nonNullBounds = bounds.filter((b) => b)
28
28
 
29
29
  if (nonNullBounds.length > 0) {
30
- return nonNullBounds.reduce((max, b) => max.extend(b));
30
+ return nonNullBounds.reduce((max, b) => max.extend(b))
31
31
  }
32
32
 
33
- return DEFAULT_BOUNDS;
33
+ return DEFAULT_BOUNDS
34
34
  }
35
35
 
36
36
  // Preview the selected search result's bounding box on the map
37
37
  previewResultOnMap(event) {
38
- const geomElement = event.target.querySelector("[data-geom]");
38
+ const geomElement = event.target.querySelector("[data-geom]")
39
39
  if (geomElement && geomElement.dataset.geom !== "") {
40
- const geom = JSON.parse(geomElement.dataset.geom);
41
- const bbox = geoJSONToBounds(geom);
42
- this.leafletViewerOutlet.addBoundsOverlay(bbox);
40
+ const geom = JSON.parse(geomElement.dataset.geom)
41
+ const bbox = geoJSONToBounds(geom)
42
+ this.leafletViewerOutlet.addBoundsOverlay(bbox)
43
43
  }
44
44
  }
45
45
 
46
46
  // Remove the previewed bounding box
47
47
  clearPreview() {
48
- this.leafletViewerOutlet.removeBoundsOverlay();
48
+ this.leafletViewerOutlet.removeBoundsOverlay()
49
49
  }
50
50
  }
@@ -1,67 +1,66 @@
1
1
  // Initializers
2
- import initializePopovers from "geoblacklight/initializers/popovers";
3
- import initializeRelations from "geoblacklight/initializers/relations";
4
- import initializeTooltips from "geoblacklight/initializers/tooltips";
5
- import initializeTruncation from "geoblacklight/initializers/truncation";
6
- import initializeMetadataDownload from "geoblacklight/initializers/metadata_download";
2
+ import initializePopovers from "geoblacklight/initializers/popovers"
3
+ import initializeRelations from "geoblacklight/initializers/relations"
4
+ import initializeTooltips from "geoblacklight/initializers/tooltips"
5
+ import initializeTruncation from "geoblacklight/initializers/truncation"
6
+ import initializeMetadataDownload from "geoblacklight/initializers/metadata_download"
7
7
 
8
8
  // Stimulus controllers
9
- import ClipboardController from "geoblacklight/controllers/clipboard_controller";
10
- import DownloadsController from "geoblacklight/controllers/downloads_controller";
11
- import LeafletViewerController from "geoblacklight/controllers/leaflet_viewer_controller";
12
- import OembedViewerController from "geoblacklight/controllers/oembed_viewer_controller";
13
- import OpenlayersViewerController from "geoblacklight/controllers/openlayers_viewer_controller";
14
- import SearchResultsController from "geoblacklight/controllers/search_results_controller";
9
+ import ClipboardController from "geoblacklight/controllers/clipboard_controller"
10
+ import DownloadsController from "geoblacklight/controllers/downloads_controller"
11
+ import LeafletViewerController from "geoblacklight/controllers/leaflet_viewer_controller"
12
+ import OembedViewerController from "geoblacklight/controllers/oembed_viewer_controller"
13
+ import OpenlayersViewerController from "geoblacklight/controllers/openlayers_viewer_controller"
14
+ import SearchResultsController from "geoblacklight/controllers/search_results_controller"
15
15
 
16
16
  // Inspired by Blacklight's javascript/blacklight/core.js
17
17
  const Geoblacklight = (function () {
18
- const callbacks = [];
18
+ const callbacks = []
19
19
  return {
20
20
  // Hook: pass a callback to add it to the activation stack
21
21
  onLoad: function (callback) {
22
- callbacks.push(callback);
22
+ callbacks.push(callback)
23
23
  },
24
24
 
25
25
  // Activate all stored callbacks
26
26
  activate: function (event) {
27
27
  callbacks.forEach((callback) => {
28
- callback(event);
29
- });
28
+ callback(event)
29
+ })
30
30
  },
31
31
 
32
32
  // Define hooks that will trigger the activation of the Geoblacklight JS
33
33
  listeners: function () {
34
- if (typeof Turbo !== "undefined")
35
- return ["turbo:load", "turbo:frame-load"];
36
- else return ["DOMContentLoaded"];
34
+ if (typeof Turbo !== "undefined") return ["turbo:load", "turbo:frame-load"]
35
+ else return ["DOMContentLoaded"]
37
36
  },
38
- };
39
- })();
37
+ }
38
+ })()
40
39
 
41
40
  // Add event listeners that call activate() for each event type
42
41
  Geoblacklight.listeners().forEach((listener) =>
43
- document.addEventListener(listener, (event) => Geoblacklight.activate(event))
44
- );
42
+ document.addEventListener(listener, (event) => Geoblacklight.activate(event)),
43
+ )
45
44
 
46
45
  // Register our initializers
47
- Geoblacklight.onLoad(initializePopovers);
48
- Geoblacklight.onLoad(initializeRelations);
49
- Geoblacklight.onLoad(initializeTooltips);
50
- Geoblacklight.onLoad(initializeTruncation);
51
- Geoblacklight.onLoad(initializeMetadataDownload);
46
+ Geoblacklight.onLoad(initializePopovers)
47
+ Geoblacklight.onLoad(initializeRelations)
48
+ Geoblacklight.onLoad(initializeTooltips)
49
+ Geoblacklight.onLoad(initializeTruncation)
50
+ Geoblacklight.onLoad(initializeMetadataDownload)
52
51
 
53
52
  // Register our Stimulus controllers
54
53
  if (typeof Stimulus !== "undefined") {
55
- Stimulus.register("openlayers-viewer", OpenlayersViewerController);
56
- Stimulus.register("oembed-viewer", OembedViewerController);
57
- Stimulus.register("leaflet-viewer", LeafletViewerController);
58
- Stimulus.register("search-results", SearchResultsController);
59
- Stimulus.register("downloads", DownloadsController);
60
- Stimulus.register("clipboard", ClipboardController);
54
+ Stimulus.register("openlayers-viewer", OpenlayersViewerController)
55
+ Stimulus.register("oembed-viewer", OembedViewerController)
56
+ Stimulus.register("leaflet-viewer", LeafletViewerController)
57
+ Stimulus.register("search-results", SearchResultsController)
58
+ Stimulus.register("downloads", DownloadsController)
59
+ Stimulus.register("clipboard", ClipboardController)
61
60
  } else {
62
61
  console.error(
63
- "Couldn't find Stimulus. Check installation instructions at https://github.com/hotwired/stimulus-rails."
64
- );
62
+ "Couldn't find Stimulus. Check installation instructions at https://github.com/hotwired/stimulus-rails.",
63
+ )
65
64
  }
66
65
 
67
- export default Geoblacklight;
66
+ export default Geoblacklight