geoblacklight 5.2.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.
- checksums.yaml +4 -4
- data/.engine_cart.yml +14 -0
- data/.github/workflows/ruby.yml +24 -25
- data/.gitignore +0 -9
- data/.prettierignore +4 -0
- data/.prettierrc +5 -0
- data/CONTRIBUTING.md +2 -4
- data/Gemfile +4 -2
- data/README.md +4 -4
- data/Rakefile +0 -22
- data/app/assets/stylesheets/geoblacklight/global.css +7 -0
- data/app/assets/stylesheets/geoblacklight/home.css +22 -0
- data/app/assets/stylesheets/geoblacklight/index_maps.css +36 -0
- data/app/assets/stylesheets/geoblacklight/record.css +39 -0
- data/app/assets/stylesheets/geoblacklight/search.css +56 -0
- data/app/assets/stylesheets/geoblacklight/viewers.css +50 -0
- data/app/assets/stylesheets/geoblacklight.css +14 -0
- data/app/components/blacklight/icons/web_services_component.rb +3 -3
- data/app/components/geoblacklight/accordion_component.html.erb +16 -0
- data/app/components/geoblacklight/accordion_component.rb +15 -0
- data/app/components/geoblacklight/arcgis_component.html.erb +1 -1
- data/app/components/geoblacklight/arcgis_component.rb +1 -1
- data/app/components/geoblacklight/attribute_table_component.html.erb +15 -17
- data/app/components/geoblacklight/data_dictionary_download_component.html.erb +1 -1
- data/app/components/geoblacklight/display_note_component.html.erb +1 -1
- data/app/components/geoblacklight/display_note_component.rb +2 -1
- data/app/components/geoblacklight/document/citation_component.html.erb +1 -1
- data/app/components/geoblacklight/document/sidebar_component.html.erb +1 -1
- data/app/components/geoblacklight/document/sidebar_component.rb +0 -1
- data/app/components/geoblacklight/document_component.html.erb +1 -2
- data/app/components/geoblacklight/header_component.html.erb +4 -4
- data/app/components/geoblacklight/header_icons_component.rb +4 -2
- data/app/components/geoblacklight/homepage_feature_facet_component.html.erb +3 -7
- data/app/components/geoblacklight/homepage_feature_facet_component.rb +12 -3
- data/app/components/geoblacklight/iiif_drag_drop_component.html.erb +2 -2
- data/app/components/geoblacklight/iiif_drag_drop_component.rb +2 -2
- data/app/components/geoblacklight/index_map_inspect_component.html.erb +4 -3
- data/app/components/geoblacklight/index_map_legend_component.html.erb +7 -7
- data/app/components/geoblacklight/index_map_legend_component.rb +7 -0
- data/app/components/geoblacklight/item_map_viewer_component.rb +8 -4
- data/app/components/geoblacklight/location_leaflet_map_component.rb +28 -15
- data/app/components/geoblacklight/relations_component.html.erb +2 -2
- data/app/components/geoblacklight/search_result_component.html.erb +28 -26
- data/app/components/geoblacklight/search_result_component.rb +2 -2
- data/app/components/geoblacklight/static_map_component.rb +5 -4
- data/app/components/geoblacklight/viewer_help_text_component.html.erb +1 -1
- data/app/components/geoblacklight/viewer_help_text_component.rb +1 -1
- data/app/components/geoblacklight/web_services_component.html.erb +1 -1
- data/app/components/geoblacklight/web_services_component.rb +1 -1
- data/app/components/geoblacklight/web_services_default_component.html.erb +6 -6
- data/app/components/geoblacklight/web_services_link_component.rb +12 -9
- data/app/components/geoblacklight/web_services_wfs_component.html.erb +4 -4
- data/app/components/geoblacklight/web_services_wms_component.html.erb +4 -4
- data/app/controllers/download_controller.rb +0 -1
- data/app/controllers/wms_controller.rb +1 -1
- data/app/helpers/geoblacklight_helper.rb +0 -15
- data/app/javascript/geoblacklight/controllers/clipboard_controller.js +6 -6
- data/app/javascript/geoblacklight/controllers/downloads_controller.js +37 -29
- data/app/javascript/geoblacklight/controllers/leaflet_viewer_controller.js +112 -107
- data/app/javascript/geoblacklight/controllers/oembed_viewer_controller.js +5 -5
- data/app/javascript/geoblacklight/controllers/openlayers_viewer_controller.js +27 -30
- data/app/javascript/geoblacklight/controllers/search_results_controller.js +18 -18
- data/app/javascript/geoblacklight/core.js +35 -36
- data/app/javascript/geoblacklight/index.js +10 -10
- data/app/javascript/geoblacklight/initializers/metadata_download.js +23 -25
- data/app/javascript/geoblacklight/initializers/popovers.js +4 -4
- data/app/javascript/geoblacklight/initializers/relations.js +20 -20
- data/app/javascript/geoblacklight/initializers/tooltips.js +19 -23
- data/app/javascript/geoblacklight/initializers/truncation.js +18 -18
- data/app/javascript/geoblacklight/leaflet/basemaps.js +2 -3
- data/app/javascript/geoblacklight/leaflet/constants.js +7 -7
- data/app/javascript/geoblacklight/leaflet/controls/geosearch.js +80 -74
- data/app/javascript/geoblacklight/leaflet/controls/layer_opacity.js +74 -73
- data/app/javascript/geoblacklight/leaflet/controls/sidebar.js +49 -0
- data/app/javascript/geoblacklight/leaflet/controls/sleep.js +54 -51
- data/app/javascript/geoblacklight/leaflet/inspection.js +77 -68
- data/app/javascript/geoblacklight/leaflet/layer_index_map.js +74 -69
- data/app/javascript/geoblacklight/leaflet/layer_wmts.js +14 -16
- data/app/javascript/geoblacklight/leaflet/layers.js +59 -66
- data/app/javascript/geoblacklight/leaflet/utils.js +37 -43
- data/app/javascript/geoblacklight/openlayers/basemaps.js +35 -27
- data/app/javascript/geoblacklight/openlayers/inspection.js +23 -23
- data/app/javascript/geoblacklight/openlayers/layers.js +11 -11
- data/app/models/concerns/geoblacklight/bbox_filter_query.rb +7 -9
- data/app/models/concerns/geoblacklight/solr_document.rb +16 -39
- data/app/models/concerns/geoblacklight/suppressed_records_search_behavior.rb +3 -3
- data/app/views/catalog/_document_split.html.erb +3 -3
- data/app/views/catalog/_home_text.html.erb +22 -14
- data/app/views/catalog/_metadata.html.erb +1 -1
- data/app/views/catalog/_relations_container.html.erb +1 -1
- data/app/views/catalog/index.html.erb +0 -1
- data/app/views/catalog/metadata/_markup.html.erb +1 -2
- data/app/views/catalog/metadata/_missing.html.erb +2 -2
- data/app/views/catalog/web_services.html.erb +1 -1
- data/app/views/relation/index.html.erb +1 -1
- data/app/views/relation/index.json.jbuilder +1 -1
- data/config/importmap.rb +4 -10
- data/config/initializers/rails_config.rb +0 -3
- data/config/locales/geoblacklight.en.yml +79 -77
- data/geoblacklight.gemspec +1 -2
- data/lib/generators/geoblacklight/assets_generator.rb +35 -26
- data/lib/generators/geoblacklight/install_generator.rb +6 -11
- data/lib/generators/geoblacklight/templates/assets/customizations.css +6 -0
- data/lib/generators/geoblacklight/templates/catalog_controller.rb +97 -73
- data/lib/generators/geoblacklight/templates/settings.yml +98 -113
- data/lib/geoblacklight/configuration/default_settings_builder.rb +18 -0
- data/lib/geoblacklight/configuration/display_note_shown_config.rb +13 -0
- data/lib/geoblacklight/configuration/fields_config.rb +51 -0
- data/lib/geoblacklight/configuration/leaflet_config.rb +73 -0
- data/lib/geoblacklight/configuration/leaflet_layers_config.rb +21 -0
- data/lib/geoblacklight/configuration/leaflet_sleep_config.rb +20 -0
- data/lib/geoblacklight/configuration/legacy_settings_builder.rb +94 -0
- data/lib/geoblacklight/configuration.rb +148 -0
- data/lib/geoblacklight/download.rb +2 -2
- data/lib/geoblacklight/engine.rb +7 -5
- data/lib/geoblacklight/metadata/base.rb +0 -2
- data/lib/geoblacklight/metadata_transformer.rb +0 -2
- data/lib/geoblacklight/references.rb +5 -4
- data/lib/geoblacklight/relation/ancestors.rb +3 -2
- data/lib/geoblacklight/relation/descendants.rb +2 -1
- data/lib/geoblacklight/relation/relation_response.rb +4 -4
- data/lib/geoblacklight/version.rb +1 -1
- data/lib/geoblacklight/wms_layer.rb +3 -3
- data/lib/geoblacklight.rb +7 -1
- data/package.json +10 -34
- data/schema/geoblacklight-schema-aardvark.json +3 -11
- data/schema/readme.md +3 -4
- data/solr/conf/_rest_managed.json +3 -2
- data/solr/conf/schema.xml +1 -1
- data/spec/components/geoblacklight/arcgis_component_spec.rb +6 -6
- data/spec/components/geoblacklight/attribute_table_component_spec.rb +6 -7
- data/spec/components/geoblacklight/citation_component_spec.rb +7 -4
- data/spec/components/geoblacklight/display_note_component_spec.rb +8 -8
- data/spec/components/geoblacklight/document_component_spec.rb +13 -13
- data/spec/components/geoblacklight/download_links_component_spec.rb +17 -14
- data/spec/components/geoblacklight/header_icons_component_spec.rb +6 -11
- data/spec/components/geoblacklight/homepage_feature_facet_component_spec.rb +22 -30
- data/spec/components/geoblacklight/iiif_drag_drop_component_spec.rb +3 -3
- data/spec/components/geoblacklight/index_map_legend_component_spec.rb +5 -18
- data/spec/components/geoblacklight/item_map_viewer_component_spec.rb +5 -5
- data/spec/components/geoblacklight/login_link_component_spec.rb +4 -5
- data/spec/components/geoblacklight/search_result_component_spec.rb +2 -6
- data/spec/components/geoblacklight/static_map_component_spec.rb +2 -2
- data/spec/components/geoblacklight/viewer_help_text_component_spec.rb +4 -6
- data/spec/components/geoblacklight/web_services_component_spec.rb +11 -10
- data/spec/controllers/catalog_controller_spec.rb +7 -7
- data/spec/controllers/download_controller_spec.rb +1 -1
- data/spec/controllers/relation_controller_spec.rb +1 -1
- data/spec/controllers/wms_controller_spec.rb +1 -1
- data/spec/features/axe_spec.rb +4 -4
- data/spec/features/bookmarks_spec.rb +1 -1
- data/spec/features/citations_spec.rb +1 -1
- data/spec/features/configurable_basemap_spec.rb +1 -1
- data/spec/features/data_dictionary_download_spec.rb +1 -1
- data/spec/features/download_layer_spec.rb +1 -1
- data/spec/features/empty_search_spec.rb +1 -1
- data/spec/features/esri_viewer_spec.rb +1 -1
- data/spec/features/exports_spec.rb +1 -1
- data/spec/features/full_screen_control_spec.rb +3 -12
- data/spec/features/help_text_spec.rb +1 -1
- data/spec/features/home_page_spec.rb +1 -1
- data/spec/features/index_map_spec.rb +3 -3
- data/spec/features/index_view_spec.rb +7 -7
- data/spec/features/layer_inspection_spec.rb +1 -1
- data/spec/features/layer_opacity_spec.rb +1 -1
- data/spec/features/layer_preview_spec.rb +1 -1
- data/spec/features/layer_with_no_references_spec.rb +1 -1
- data/spec/features/linkified_attribute_table_spec.rb +1 -1
- data/spec/features/metadata_panel_spec.rb +1 -1
- data/spec/features/missing_metadata_spec.rb +1 -1
- data/spec/features/multiple_downloads_spec.rb +1 -1
- data/spec/features/oembed_spec.rb +1 -1
- data/spec/features/relations_spec.rb +2 -2
- data/spec/features/saved_searches_spec.rb +2 -9
- data/spec/features/search_bar_spec.rb +1 -1
- data/spec/features/search_results_complex_geometry_spec.rb +1 -1
- data/spec/features/search_results_icons_spec.rb +3 -4
- data/spec/features/search_results_map_spec.rb +1 -1
- data/spec/features/search_results_overlap_ratio_spec.rb +3 -3
- data/spec/features/search_spec.rb +1 -1
- data/spec/features/show_page_download_spec.rb +1 -1
- data/spec/features/show_page_metadata_spec.rb +2 -2
- data/spec/features/show_page_sidebar_static_map_spec.rb +1 -1
- data/spec/features/sms_spec.rb +1 -1
- data/spec/features/suppressed_records_spec.rb +1 -1
- data/spec/features/tilejson_spec.rb +1 -1
- data/spec/features/tms_spec.rb +1 -1
- data/spec/features/web_services_modal_spec.rb +1 -1
- data/spec/features/wmts_spec.rb +1 -1
- data/spec/features/xyz_spec.rb +1 -1
- data/spec/fixtures/manifests/tilejson.json +10 -19
- data/spec/fixtures/metadata/fgdc.html +1 -1
- data/spec/fixtures/metadata/iso.html +1 -1
- data/spec/fixtures/solr_documents/README.md +0 -1
- data/spec/fixtures/solr_documents/actual-papermap1.json +9 -28
- data/spec/fixtures/solr_documents/actual-point1.json +12 -39
- data/spec/fixtures/solr_documents/actual-polygon1.json +10 -30
- data/spec/fixtures/solr_documents/actual-raster1.json +14 -46
- data/spec/fixtures/solr_documents/all-relationships.json +12 -36
- data/spec/fixtures/solr_documents/b1g_iiif_manifest.json +33 -62
- data/spec/fixtures/solr_documents/b1g_wabash_child_15.json +13 -40
- data/spec/fixtures/solr_documents/b1g_wabash_child_16.json +13 -40
- data/spec/fixtures/solr_documents/b1g_wabash_child_17.json +13 -40
- data/spec/fixtures/solr_documents/b1g_wabash_child_18.json +13 -40
- data/spec/fixtures/solr_documents/b1g_wabash_parent.json +13 -40
- data/spec/fixtures/solr_documents/baruch_ancestor1.json +13 -40
- data/spec/fixtures/solr_documents/baruch_ancestor2.json +13 -40
- data/spec/fixtures/solr_documents/baruch_documentation_download.json +14 -46
- data/spec/fixtures/solr_documents/bbox-spans-180.json +7 -21
- data/spec/fixtures/solr_documents/complex-geom.json +11 -37
- data/spec/fixtures/solr_documents/cornell_html_metadata.json +12 -37
- data/spec/fixtures/solr_documents/display-note.json +11 -33
- data/spec/fixtures/solr_documents/esri-dynamic-layer-all-layers.json +13 -39
- data/spec/fixtures/solr_documents/esri-dynamic-layer-single-layer.json +13 -40
- data/spec/fixtures/solr_documents/esri-feature-layer.json +13 -39
- data/spec/fixtures/solr_documents/esri-image-map-layer.json +13 -40
- data/spec/fixtures/solr_documents/esri-tiled_map_layer.json +16 -54
- data/spec/fixtures/solr_documents/esri-wms-layer.json +12 -36
- data/spec/fixtures/solr_documents/harvard_raster.json +12 -37
- data/spec/fixtures/solr_documents/iiif-eastern-hemisphere.json +9 -27
- data/spec/fixtures/solr_documents/index-map-polygon-no-downloadurl.json +12 -41
- data/spec/fixtures/solr_documents/index-map-polygon.json +12 -41
- data/spec/fixtures/solr_documents/index-map-stanford.json +14 -45
- data/spec/fixtures/solr_documents/index-map-v1-complex.json +13 -38
- data/spec/fixtures/solr_documents/index_map_point.json +13 -42
- data/spec/fixtures/solr_documents/metadata_no_geom.json +4 -14
- data/spec/fixtures/solr_documents/metadata_no_provider.json +8 -25
- data/spec/fixtures/solr_documents/multiple-downloads.json +6 -18
- data/spec/fixtures/solr_documents/no_locn_geometry.json +4 -12
- data/spec/fixtures/solr_documents/no_spatial.json +4 -12
- data/spec/fixtures/solr_documents/oembed.json +8 -25
- data/spec/fixtures/solr_documents/princeton-child1.json +9 -29
- data/spec/fixtures/solr_documents/princeton-child2.json +9 -29
- data/spec/fixtures/solr_documents/princeton-child3.json +9 -29
- data/spec/fixtures/solr_documents/princeton-child4.json +9 -29
- data/spec/fixtures/solr_documents/princeton-parent.json +10 -33
- data/spec/fixtures/solr_documents/public_cog_princeton.json +9 -27
- data/spec/fixtures/solr_documents/public_iiif_princeton.json +13 -43
- data/spec/fixtures/solr_documents/public_pmtiles_princeton.json +29 -39
- data/spec/fixtures/solr_documents/public_polygon_mit.json +9 -30
- data/spec/fixtures/solr_documents/restricted-line.json +14 -47
- data/spec/fixtures/solr_documents/the-related-record.json +4 -12
- data/spec/fixtures/solr_documents/tilejson.json +23 -46
- data/spec/fixtures/solr_documents/tms.json +7 -21
- data/spec/fixtures/solr_documents/umn_metro_result1.json +13 -41
- data/spec/fixtures/solr_documents/umn_state_result1.json +13 -39
- data/spec/fixtures/solr_documents/umn_state_result2.json +13 -39
- data/spec/fixtures/solr_documents/uva_slug_colon.json +10 -30
- data/spec/fixtures/solr_documents/wmts-multiple.json +23 -39
- data/spec/fixtures/solr_documents/wmts-single-layer.json +23 -46
- data/spec/fixtures/solr_documents/xyz.json +10 -33
- data/spec/helpers/geoblacklight_helper_spec.rb +5 -50
- data/spec/javascripts/geoblacklight_spec.js +10 -10
- data/spec/javascripts/metadata_download_button_spec.js +14 -13
- data/spec/lib/geoblacklight/bounding_box_spec.rb +1 -1
- data/spec/lib/geoblacklight/configuration/default_settings_builder_spec.rb +9 -0
- data/spec/lib/geoblacklight/configuration_spec.rb +13 -0
- data/spec/lib/geoblacklight/download/csv_download_spec.rb +2 -2
- data/spec/lib/geoblacklight/download/geojson_download_spec.rb +2 -2
- data/spec/lib/geoblacklight/download/geotiff_download_spec.rb +5 -2
- data/spec/lib/geoblacklight/download/kmz_download_spec.rb +2 -2
- data/spec/lib/geoblacklight/download/shapefile_download_spec.rb +2 -2
- data/spec/lib/geoblacklight/download_spec.rb +15 -6
- data/spec/lib/geoblacklight/geometry_spec.rb +1 -1
- data/spec/lib/geoblacklight/item_viewer_spec.rb +2 -2
- data/spec/lib/geoblacklight/metadata/base_spec.rb +1 -1
- data/spec/lib/geoblacklight/metadata/html_spec.rb +1 -1
- data/spec/lib/geoblacklight/metadata_spec.rb +1 -1
- data/spec/lib/geoblacklight/metadata_transformer/base_spec.rb +1 -1
- data/spec/lib/geoblacklight/metadata_transformer/fgdc_spec.rb +1 -1
- data/spec/lib/geoblacklight/metadata_transformer/iso19139_spec.rb +1 -1
- data/spec/lib/geoblacklight/metadata_transformer_spec.rb +1 -1
- data/spec/lib/geoblacklight/reference_spec.rb +1 -1
- data/spec/lib/geoblacklight/references_spec.rb +6 -4
- data/spec/lib/geoblacklight/relation/ancestors_spec.rb +10 -4
- data/spec/lib/geoblacklight/relation/descendants_spec.rb +9 -4
- data/spec/lib/geoblacklight/relation/relation_response_spec.rb +12 -15
- data/spec/lib/geoblacklight/wms_layer/feature_info_response_spec.rb +1 -1
- data/spec/lib/geoblacklight/wms_layer_spec.rb +1 -1
- data/spec/models/concerns/geoblacklight/bbox_filter_query_spec.rb +20 -11
- data/spec/models/concerns/geoblacklight/solr_document/citation_spec.rb +1 -1
- data/spec/models/concerns/geoblacklight/solr_document/finder_spec.rb +1 -1
- data/spec/models/concerns/geoblacklight/solr_document/inspection_spec.rb +1 -1
- data/spec/models/concerns/geoblacklight/solr_document_spec.rb +4 -39
- data/spec/models/concerns/geoblacklight/suppressed_records_search_behavior_spec.rb +2 -2
- data/spec/routing/catalog_routing_spec.rb +1 -1
- data/spec/spec_helper.rb +21 -10
- data/spec/tasks/geoblacklight_spec.rb +1 -1
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +4 -3
- metadata +36 -185
- data/Procfile.dev +0 -3
- data/app/assets/stylesheets/geoblacklight/geoblacklight.scss +0 -2
- data/app/assets/stylesheets/geoblacklight/modules/_base.scss +0 -31
- data/app/assets/stylesheets/geoblacklight/modules/_blacklight_overrides.scss +0 -40
- data/app/assets/stylesheets/geoblacklight/modules/_styles.scss +0 -9
- data/app/assets/stylesheets/geoblacklight/modules/downloads.scss +0 -62
- data/app/assets/stylesheets/geoblacklight/modules/geosearch.scss +0 -23
- data/app/assets/stylesheets/geoblacklight/modules/home.scss +0 -13
- data/app/assets/stylesheets/geoblacklight/modules/icon-customization.scss +0 -116
- data/app/assets/stylesheets/geoblacklight/modules/index_maps.scss +0 -61
- data/app/assets/stylesheets/geoblacklight/modules/item.scss +0 -61
- data/app/assets/stylesheets/geoblacklight/modules/layer_opacity.scss +0 -87
- data/app/assets/stylesheets/geoblacklight/modules/leaflet.scss +0 -4
- data/app/assets/stylesheets/geoblacklight/modules/metadata.scss +0 -31
- data/app/assets/stylesheets/geoblacklight/modules/metadata_content.scss +0 -43
- data/app/assets/stylesheets/geoblacklight/modules/metadata_markup.scss +0 -9
- data/app/assets/stylesheets/geoblacklight/modules/metadata_missing.scss +0 -7
- data/app/assets/stylesheets/geoblacklight/modules/modal.scss +0 -5
- data/app/assets/stylesheets/geoblacklight/modules/results.scss +0 -60
- data/app/assets/stylesheets/geoblacklight/modules/search_widgets.scss +0 -5
- data/app/assets/stylesheets/geoblacklight/modules/sidebar.scss +0 -42
- data/app/assets/stylesheets/geoblacklight/modules/toolbar.scss +0 -34
- data/app/assets/stylesheets/geoblacklight/modules/web_services.scss +0 -5
- data/app/components/blacklight/icons/american_geographical_society_library_uwm_libraries_component.rb +0 -46
- data/app/components/blacklight/icons/arizona_component.rb +0 -24
- data/app/components/blacklight/icons/baruch_cuny_component.rb +0 -23
- data/app/components/blacklight/icons/bookmark_component.rb +0 -23
- data/app/components/blacklight/icons/circle_info_solid_component.rb +0 -23
- data/app/components/blacklight/icons/columbia_component.rb +0 -23
- data/app/components/blacklight/icons/cornell_component.rb +0 -25
- data/app/components/blacklight/icons/george_mason_component.rb +0 -24
- data/app/components/blacklight/icons/harvard_component.rb +0 -23
- data/app/components/blacklight/icons/indiana_component.rb +0 -23
- data/app/components/blacklight/icons/lewis_clark_component.rb +0 -25
- data/app/components/blacklight/icons/massgis_component.rb +0 -23
- data/app/components/blacklight/icons/michigan_state_university_component.rb +0 -25
- data/app/components/blacklight/icons/mit_component.rb +0 -23
- data/app/components/blacklight/icons/northwestern_university_component.rb +0 -24
- data/app/components/blacklight/icons/nyu_component.rb +0 -26
- data/app/components/blacklight/icons/pennsylvania_state_university_component.rb +0 -25
- data/app/components/blacklight/icons/princeton_component.rb +0 -23
- data/app/components/blacklight/icons/purdue_university_component.rb +0 -25
- data/app/components/blacklight/icons/rutgers_component.rb +0 -25
- data/app/components/blacklight/icons/sms_component.rb +0 -23
- data/app/components/blacklight/icons/stanford_component.rb +0 -23
- data/app/components/blacklight/icons/texas_component.rb +0 -23
- data/app/components/blacklight/icons/the_ohio_state_university_component.rb +0 -26
- data/app/components/blacklight/icons/tufts_component.rb +0 -23
- data/app/components/blacklight/icons/ucla_component.rb +0 -23
- data/app/components/blacklight/icons/university_of_california_berkeley_component.rb +0 -24
- data/app/components/blacklight/icons/university_of_chicago_component.rb +0 -25
- data/app/components/blacklight/icons/university_of_colorado_boulder_component.rb +0 -26
- data/app/components/blacklight/icons/university_of_illinois_urbana_champaign_component.rb +0 -25
- data/app/components/blacklight/icons/university_of_iowa_component.rb +0 -24
- data/app/components/blacklight/icons/university_of_maryland_component.rb +0 -24
- data/app/components/blacklight/icons/university_of_michigan_component.rb +0 -24
- data/app/components/blacklight/icons/university_of_minnesota_component.rb +0 -24
- data/app/components/blacklight/icons/university_of_nebraska_lincoln_component.rb +0 -27
- data/app/components/blacklight/icons/university_of_wisconsin_madison_component.rb +0 -24
- data/app/components/blacklight/icons/uva_component.rb +0 -23
- data/app/components/geoblacklight/icon_facet_item_component.rb +0 -33
- data/app/components/geoblacklight/web_services_link_component.html.erb +0 -3
- data/bin/vite +0 -29
- data/config/initializers/new_gbl_settings_defaults_4.1.yml +0 -104
- data/lib/generators/geoblacklight/assets/importmap_generator.rb +0 -70
- data/lib/generators/geoblacklight/assets/vite_generator.rb +0 -82
- data/lib/generators/geoblacklight/templates/assets/_customizations.scss +0 -23
- data/lib/generators/geoblacklight/templates/assets/application.js +0 -17
- data/lib/generators/geoblacklight/templates/assets/application.scss +0 -9
- data/lib/generators/geoblacklight/templates/assets/geoblacklight.scss +0 -11
- data/lib/generators/geoblacklight/templates/base.html.erb +0 -46
- data/lib/generators/geoblacklight/templates/vite.config.ts +0 -23
- data/lib/generators/geoblacklight/templates/vite.json +0 -16
- data/schema/geoblacklight-schema-1.0.json +0 -214
- data/solr/conf/xslt/example.xsl +0 -132
- data/solr/conf/xslt/example_atom.xsl +0 -67
- data/solr/conf/xslt/example_rss.xsl +0 -66
- data/solr/conf/xslt/luke.xsl +0 -337
- data/spec/components/blacklight/icons/american_geographical_society_library_uwm_libraries_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/arizona_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/arrow_circle_down_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/baruch_cuny_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/book_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/bookmark_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/cd_rom_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/child_item_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/circle_info_solid_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/citation_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/collection_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/collections_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/columbia_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/cornell_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/datasets_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/dvd_rom_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/email_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/esri_globe_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/fire_solid_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/george_mason_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/globe_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/harvard_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/home_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/iiif_drag_drop_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/image_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/imagery_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/indiana_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/leaf_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/lewis_clark_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/lightbulb_solid_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/line_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/map_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/map_marker_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/maps_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/massgis_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/metadata_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/michigan_state_university_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/mit_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/mixed_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/multilinestring_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/multipoint_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/multipolygon_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/northwestern_university_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/nyu_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/pagelines_brands_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/paper_map_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/parent_item_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/pennsylvania_state_university_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/point_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/polygon_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/polyline_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/princeton_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/public_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/purdue_university_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/raster_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/restricted_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/rutgers_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/sms_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/stanford_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/table_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/tags_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/texas_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/the_ohio_state_university_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/triangle_exclamation_solid_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/tufts_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/ucla_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/university_of_california_berkeley_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/university_of_chicago_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/university_of_colorado_boulder_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/university_of_illinois_urbana_champaign_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/university_of_iowa_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/university_of_maryland_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/university_of_michigan_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/university_of_minnesota_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/university_of_nebraska_lincoln_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/university_of_wisconsin_madison_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/uva_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/web_services_component_spec.rb +0 -15
- data/spec/components/blacklight/icons/websites_component_spec.rb +0 -15
- data/spec/components/geoblacklight/icon_facet_item_component_spec.rb +0 -18
- data/spec/config/initializers/rails_config_spec.rb +0 -16
- data/spec/fixtures/solr_documents/public_direct_download.json +0 -62
- data/spec/support/backport_test_helpers.rb +0 -47
- data/spec/support/view_component_capybara_test_helpers.rb +0 -8
- data/test/leaflet/layers.test.js +0 -17
- data/vite.config.ts +0 -35
- /data/app/assets/images/{blacklight → geoblacklight}/logo.svg +0 -0
|
@@ -2,55 +2,63 @@ import { Controller } from "@hotwired/stimulus"
|
|
|
2
2
|
|
|
3
3
|
export default class extends Controller {
|
|
4
4
|
download(ev) {
|
|
5
|
-
ev.preventDefault()
|
|
5
|
+
ev.preventDefault()
|
|
6
6
|
if (this.downloading) {
|
|
7
|
-
return
|
|
7
|
+
return
|
|
8
8
|
}
|
|
9
|
-
this.downloading = true
|
|
10
|
-
ev.target.classList.add(
|
|
11
|
-
const url = ev.target.dataset.downloadPath
|
|
12
|
-
ev.target.removeAttribute(
|
|
13
|
-
ev.target.innerHTML = '<div class="spinner-border spinner-border-sm float-end"></div> Preparing download...'
|
|
9
|
+
this.downloading = true
|
|
10
|
+
ev.target.classList.add("download-in-progress")
|
|
11
|
+
const url = ev.target.dataset.downloadPath
|
|
12
|
+
ev.target.removeAttribute("href")
|
|
13
|
+
ev.target.innerHTML = '<div class="spinner-border spinner-border-sm float-end"></div> Preparing download...'
|
|
14
14
|
|
|
15
15
|
fetch(url)
|
|
16
16
|
.then((response) => {
|
|
17
17
|
if (!response.ok) {
|
|
18
18
|
return response.json().then((errorData) => {
|
|
19
|
-
const exception = new Error("Network response was not ok")
|
|
20
|
-
exception.data = errorData
|
|
21
|
-
throw exception
|
|
22
|
-
})
|
|
19
|
+
const exception = new Error("Network response was not ok")
|
|
20
|
+
exception.data = errorData // Attach the parsed JSON data to the error object
|
|
21
|
+
throw exception
|
|
22
|
+
})
|
|
23
23
|
}
|
|
24
|
-
return response.json()
|
|
24
|
+
return response.json()
|
|
25
25
|
})
|
|
26
26
|
.then((data) => this.complete(data, ev.target))
|
|
27
|
-
.catch((error) => this.error(error, ev.target))
|
|
27
|
+
.catch((error) => this.error(error, ev.target))
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
complete(data, target) {
|
|
31
|
-
this.downloading = false
|
|
32
|
-
target.classList.remove(
|
|
33
|
-
target.classList.add(
|
|
34
|
-
target.innerHTML = `Download ready (${target.dataset.downloadType})
|
|
35
|
-
target.href = data[1]
|
|
36
|
-
this.renderMessage(data[0])
|
|
31
|
+
this.downloading = false
|
|
32
|
+
target.classList.remove("download-in-progress")
|
|
33
|
+
target.classList.add("download-complete")
|
|
34
|
+
target.innerHTML = `Download ready (${target.dataset.downloadType})`
|
|
35
|
+
target.href = data[1]
|
|
36
|
+
this.renderMessage(data[0])
|
|
37
37
|
//target.click();
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
error(exception, target) {
|
|
41
|
-
this.downloading = false
|
|
42
|
-
target.classList.remove(
|
|
43
|
-
target.classList.add(
|
|
44
|
-
target.innerHTML = `Download failed (${target.dataset.downloadType})
|
|
45
|
-
|
|
41
|
+
this.downloading = false
|
|
42
|
+
target.classList.remove("download-in-progress")
|
|
43
|
+
target.classList.add("download-complete")
|
|
44
|
+
target.innerHTML = `Download failed (${target.dataset.downloadType})`
|
|
45
|
+
console.log(exception)
|
|
46
|
+
|
|
47
|
+
this.renderMessage(exception.data[0])
|
|
46
48
|
}
|
|
47
49
|
|
|
48
50
|
renderMessage(message) {
|
|
51
|
+
let flashContainer = document.querySelector("div.flash_messages")
|
|
52
|
+
if (!flashContainer) {
|
|
53
|
+
flashContainer = document.createElement("div")
|
|
54
|
+
flashContainer.className = "flash_messages"
|
|
55
|
+
document.getElementById("document").prepend(flashContainer)
|
|
56
|
+
}
|
|
49
57
|
Object.entries(message).forEach(([idx, msg]) => {
|
|
50
|
-
const flash = document.createElement("div")
|
|
51
|
-
flash.className = `alert alert-${msg[0]} alert-dismissible fade show
|
|
52
|
-
flash.innerHTML = `${msg[1]}<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button
|
|
53
|
-
|
|
54
|
-
})
|
|
58
|
+
const flash = document.createElement("div")
|
|
59
|
+
flash.className = `alert alert-${msg[0]} alert-dismissible fade show`
|
|
60
|
+
flash.innerHTML = `${msg[1]}<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>`
|
|
61
|
+
flashContainer.appendChild(flash)
|
|
62
|
+
})
|
|
55
63
|
}
|
|
56
64
|
}
|
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
import { Icon, Control } from "leaflet"
|
|
2
|
-
import "leaflet
|
|
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 {
|
|
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,9 +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"
|
|
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"
|
|
26
28
|
|
|
27
29
|
export default class LeafletViewerController extends Controller {
|
|
28
30
|
static values = {
|
|
@@ -36,185 +38,188 @@ export default class LeafletViewerController extends Controller {
|
|
|
36
38
|
page: String,
|
|
37
39
|
layerId: String,
|
|
38
40
|
drawInitialBounds: Boolean,
|
|
39
|
-
}
|
|
41
|
+
}
|
|
40
42
|
|
|
41
43
|
connect() {
|
|
42
44
|
// Use leaflet icon images from CDN
|
|
43
|
-
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/"
|
|
44
46
|
|
|
45
47
|
// Set up layers
|
|
46
|
-
this.basemap = this.getBasemap()
|
|
47
|
-
this.overlay = layerGroup()
|
|
48
|
+
this.basemap = this.getBasemap()
|
|
49
|
+
this.overlay = layerGroup()
|
|
48
50
|
|
|
49
51
|
// Calculate bounds
|
|
50
|
-
this.bounds = DEFAULT_BOUNDS
|
|
51
|
-
if (this.hasMapGeomValue) this.bounds = geoJSONToBounds(this.mapGeomValue)
|
|
52
|
+
this.bounds = DEFAULT_BOUNDS
|
|
53
|
+
if (this.hasMapGeomValue) this.bounds = geoJSONToBounds(this.mapGeomValue)
|
|
52
54
|
|
|
53
55
|
// Load the map
|
|
54
|
-
this.loadMap()
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
get config() {
|
|
58
|
-
|
|
59
|
-
if (!this.optionsValue.VIEWERS || !this.hasProtocolValue) return {};
|
|
60
|
-
return this.optionsValue.VIEWERS[this.protocolValue.toUpperCase()];
|
|
56
|
+
this.loadMap()
|
|
61
57
|
}
|
|
62
58
|
|
|
63
59
|
// Create the map, add layers, fit the bounds
|
|
64
60
|
async loadMap() {
|
|
65
|
-
if (this.map) return
|
|
61
|
+
if (this.map) return
|
|
66
62
|
|
|
67
63
|
// Set up the map and fit to bounds
|
|
68
|
-
const sleepSettings = this.optionsValue.
|
|
69
|
-
this.map = map(this.element, sleepSettings)
|
|
70
|
-
if (sleepSettings.
|
|
64
|
+
const sleepSettings = this.optionsValue.sleep || { sleep: false }
|
|
65
|
+
this.map = map(this.element, sleepSettings)
|
|
66
|
+
if (sleepSettings.sleep) this.map.addHandler("SLEEP", Sleep)
|
|
71
67
|
|
|
72
|
-
this.map.addLayer(this.basemap)
|
|
73
|
-
this.map.addLayer(this.overlay)
|
|
74
|
-
this.fitBounds(this.bounds)
|
|
75
|
-
this.map.options.selected_color = this.optionsValue.
|
|
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"
|
|
76
72
|
|
|
77
73
|
// If the data is available, add the preview and set up inspection
|
|
78
74
|
// Otherwise just draw the bounds, if configured to do so
|
|
79
75
|
if (this.availableValue && this.protocolValue) {
|
|
80
|
-
await this.addPreviewOverlay()
|
|
81
|
-
this.addInspection()
|
|
76
|
+
await this.addPreviewOverlay()
|
|
77
|
+
this.addInspection()
|
|
82
78
|
} else if (this.drawInitialBoundsValue && this.bounds) {
|
|
83
|
-
this.addBoundsOverlay(this.bounds)
|
|
79
|
+
this.addBoundsOverlay(this.bounds)
|
|
84
80
|
}
|
|
85
81
|
|
|
86
82
|
// Add configured controls
|
|
87
|
-
this.addControls()
|
|
83
|
+
this.addControls()
|
|
88
84
|
|
|
89
|
-
if (this.protocolValue == "IndexMap"){
|
|
85
|
+
if (this.protocolValue == "IndexMap") {
|
|
90
86
|
this.fitBounds(this.previewOverlay.getBounds())
|
|
91
87
|
}
|
|
92
88
|
|
|
93
89
|
// Enable geosearch handler, if available
|
|
94
|
-
if (this.map.geosearch) this.map.geosearch.enable()
|
|
90
|
+
if (this.map.geosearch) this.map.geosearch.enable()
|
|
95
91
|
|
|
96
92
|
// Emit an event for other controllers to listen to
|
|
97
|
-
this.dispatch("loaded")
|
|
93
|
+
this.dispatch("loaded")
|
|
98
94
|
}
|
|
99
95
|
|
|
100
96
|
// Set the bounds of the map to an L.LatLngBounds object
|
|
101
97
|
fitBounds(bounds) {
|
|
102
98
|
// prevent map from moving when setting bounds, if relevant
|
|
103
|
-
if (this.map.geosearch) this.map.geosearch.disable()
|
|
104
|
-
this.map.fitBounds(bounds, { animate: false, noMoveStart: true })
|
|
105
|
-
this.bounds = bounds
|
|
106
|
-
if (this.map.geosearch) this.map.geosearch.enable()
|
|
107
|
-
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()
|
|
108
104
|
}
|
|
109
105
|
|
|
110
106
|
// Select the configured basemap to use
|
|
111
107
|
getBasemap() {
|
|
112
|
-
const basemapName = this.basemapValue || "positron"
|
|
108
|
+
const basemapName = this.basemapValue || "positron"
|
|
113
109
|
return tileLayer(basemaps[basemapName].url, {
|
|
114
110
|
...basemaps[basemapName],
|
|
115
|
-
detectRetina: this.optionsValue.
|
|
116
|
-
})
|
|
111
|
+
detectRetina: this.optionsValue.layers.detect_retina || false,
|
|
112
|
+
})
|
|
117
113
|
}
|
|
118
114
|
|
|
119
115
|
// Add the configured controls to the map
|
|
120
116
|
addControls() {
|
|
121
117
|
// Add any top-level controls (e.g. geosearch) first
|
|
122
|
-
const globalControls = this.optionsValue.
|
|
118
|
+
const globalControls = this.optionsValue.controls || {}
|
|
123
119
|
Object.entries(globalControls).forEach(([controlName, controlOptions]) => {
|
|
124
|
-
const control = this.getControl(controlName, controlOptions)
|
|
125
|
-
if (control) this.addControl(control)
|
|
126
|
-
})
|
|
120
|
+
const control = this.getControl(controlName, controlOptions)
|
|
121
|
+
if (control) this.addControl(control)
|
|
122
|
+
})
|
|
127
123
|
|
|
128
124
|
// Add opacity and fullscreen controls for all layers
|
|
129
125
|
if (this.hasProtocolValue) {
|
|
130
|
-
if (this.availableValue){
|
|
131
|
-
const opacityControl = this.getControl("Opacity")
|
|
132
|
-
this.addControl(opacityControl)
|
|
126
|
+
if (this.availableValue) {
|
|
127
|
+
const opacityControl = this.getControl("Opacity")
|
|
128
|
+
this.addControl(opacityControl)
|
|
133
129
|
}
|
|
134
|
-
const fullscreenControl = this.getControl("Fullscreen")
|
|
135
|
-
this.addControl(fullscreenControl)
|
|
130
|
+
const fullscreenControl = this.getControl("Fullscreen")
|
|
131
|
+
this.addControl(fullscreenControl)
|
|
136
132
|
}
|
|
137
133
|
}
|
|
138
134
|
|
|
139
135
|
// Add a pre-configured L.Control instance to the map
|
|
140
136
|
addControl(control) {
|
|
141
|
-
this.map.addControl(control)
|
|
137
|
+
this.map.addControl(control)
|
|
142
138
|
}
|
|
143
139
|
|
|
144
140
|
// Look up the control name and return the corresponding L.Control instance
|
|
145
141
|
getControl(controlName, controlOptions) {
|
|
146
|
-
if (controlName == "Opacity")
|
|
147
|
-
|
|
148
|
-
if (controlName == "Fullscreen")
|
|
149
|
-
return new Control.Fullscreen({ position: "topright", ...controlOptions });
|
|
142
|
+
if (controlName == "Opacity") return new LayerOpacityControl(this.previewOverlay)
|
|
143
|
+
if (controlName == "Fullscreen") return new FullScreen({ position: "bottomleft", ...controlOptions })
|
|
150
144
|
if (controlName == "Geosearch")
|
|
151
|
-
return new GeoSearchControl({
|
|
152
|
-
|
|
145
|
+
return new GeoSearchControl({
|
|
146
|
+
baseUrl: this.catalogBaseUrlValue,
|
|
147
|
+
...controlOptions,
|
|
148
|
+
})
|
|
149
|
+
console.error(`Unsupported control name: "${controlName}"`)
|
|
153
150
|
}
|
|
154
151
|
|
|
155
152
|
// Add the bounding box to the map
|
|
156
153
|
addBoundsOverlay(bounds) {
|
|
157
|
-
const hasMapGeomValue = Object.keys(this.mapGeomValue).length > 0 && !this.map.geosearch
|
|
158
|
-
var defaultOptions = hasMapGeomValue ? DEFAULT_GEOM_OVERLAY_OPTIONS : {}
|
|
159
|
-
const overlayOptions = this.optionsValue.
|
|
160
|
-
const options = {...defaultOptions, ...overlayOptions[this.pageValue]}
|
|
161
|
-
const boundsOverlay = polygon(
|
|
162
|
-
bounds.getSouthWest(),
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
], options
|
|
167
|
-
);
|
|
168
|
-
|
|
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
|
+
|
|
169
163
|
// Render geometry layer if available
|
|
170
|
-
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]))
|
|
171
165
|
|
|
172
166
|
// Render the bounds overlay
|
|
173
|
-
this.boundsOverlay = boundsOverlay
|
|
174
|
-
this.overlay.addLayer(boundsOverlay)
|
|
167
|
+
this.boundsOverlay = boundsOverlay
|
|
168
|
+
this.overlay.addLayer(boundsOverlay)
|
|
175
169
|
}
|
|
176
170
|
|
|
177
171
|
// Remove the bounding box overlay
|
|
178
172
|
removeBoundsOverlay() {
|
|
179
|
-
if (this.boundsOverlay) this.overlay.removeLayer(this.boundsOverlay)
|
|
173
|
+
if (this.boundsOverlay) this.overlay.removeLayer(this.boundsOverlay)
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
setUpSidebar() {
|
|
177
|
+
const sidebar = document.querySelector("[data-sidebar]")
|
|
178
|
+
if (!sidebar || sidebar.dataset.sidebar != "true") return
|
|
179
|
+
const control = new sidebarControl({
|
|
180
|
+
position: "topright",
|
|
181
|
+
sidebar,
|
|
182
|
+
})
|
|
183
|
+
this.map.addControl(control)
|
|
180
184
|
}
|
|
181
185
|
|
|
182
186
|
addInspection() {
|
|
183
|
-
|
|
184
|
-
if (this.protocolValue
|
|
185
|
-
|
|
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)
|
|
186
195
|
// TODO: TiledMapLayer is converted but seems busted -- see layers.js. Don't know what to test it with, need a fixture.
|
|
187
196
|
// if (this.protocolValue == "TiledMapLayer") return tiledMapLayerInspection(this.map, this.previewOverlay);
|
|
188
197
|
}
|
|
189
198
|
|
|
190
199
|
// Add the actual data to the map as a layer
|
|
191
200
|
async addPreviewOverlay() {
|
|
192
|
-
this.previewOverlay = await this.getPreviewOverlay(
|
|
193
|
-
this.
|
|
194
|
-
this.
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
detectRetina: this.optionsValue.LAYERS.DETECT_RETINA || false,
|
|
199
|
-
}
|
|
200
|
-
);
|
|
201
|
-
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)
|
|
202
207
|
}
|
|
203
208
|
|
|
204
209
|
// Generate a layer based on the protocol
|
|
205
210
|
async getPreviewOverlay(protocol, url, options) {
|
|
206
|
-
if (protocol == "DynamicMapLayer") return esriDynamicMapLayer(url, options)
|
|
207
|
-
if (protocol == "FeatureLayer") return esriFeatureLayer(url, options)
|
|
211
|
+
if (protocol == "DynamicMapLayer") return esriDynamicMapLayer(url, options)
|
|
212
|
+
if (protocol == "FeatureLayer") return esriFeatureLayer(url, options)
|
|
208
213
|
// imageMapLayer is a built-in method from esri-leaflet
|
|
209
|
-
if (protocol == "ImageMapLayer") return imageMapLayer({url, ...options})
|
|
210
|
-
if (protocol == "IndexMap") return await indexMapLayer(url, this.optionsValue)
|
|
211
|
-
if (protocol == "TiledMapLayer") return await esriTiledMapLayer(url, options)
|
|
212
|
-
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)
|
|
213
218
|
// tileLayer is a built-in method from leaflet
|
|
214
|
-
if (protocol == "Tms") return tileLayer(url, { tms: true, ...options })
|
|
215
|
-
if (protocol == "Wms") return wmsLayer(url, options)
|
|
216
|
-
if (protocol == "Wmts") return await wmtsLayer(url, options)
|
|
217
|
-
if (protocol == "Xyz") return tileLayer(url, options)
|
|
218
|
-
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}"`)
|
|
219
224
|
}
|
|
220
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 ==
|
|
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
|
}
|