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.
- 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 +3 -3
- data/app/components/geoblacklight/accordion_component.rb +4 -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 +3 -3
- 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 +3 -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 +108 -117
- 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 +31 -29
- 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/initializers/rails_config.rb +0 -3
- data/config/locales/geoblacklight.en.yml +79 -78
- 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 +97 -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 -31
- data/schema/geoblacklight-schema-aardvark.json +1 -9
- 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 -10
- 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 +1 -1
- 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 +33 -184
- 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 -78
- 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 -73
- data/lib/generators/geoblacklight/assets/vite_generator.rb +0 -89
- 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/vite.config.ts +0 -32
- /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 {
|
|
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.
|
|
70
|
-
this.map = map(this.element, sleepSettings)
|
|
71
|
-
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)
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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({
|
|
153
|
-
|
|
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.
|
|
161
|
-
const options = {...defaultOptions, ...overlayOptions[this.pageValue]}
|
|
162
|
-
const boundsOverlay = polygon(
|
|
163
|
-
bounds.getSouthWest(),
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
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(
|
|
185
|
-
if (!sidebar || sidebar.dataset.sidebar !=
|
|
177
|
+
const sidebar = document.querySelector("[data-sidebar]")
|
|
178
|
+
if (!sidebar || sidebar.dataset.sidebar != "true") return
|
|
186
179
|
const control = new sidebarControl({
|
|
187
|
-
position:
|
|
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 = [
|
|
195
|
-
if (!inspectionProtocols.includes(this.protocolValue)) return
|
|
196
|
-
this.setUpSidebar()
|
|
197
|
-
if (this.protocolValue == "Wms")
|
|
198
|
-
|
|
199
|
-
if (this.protocolValue
|
|
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.
|
|
208
|
-
this.
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
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 ==
|
|
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
|
-
|
|
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
|