geoblacklight 5.4.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 -4
- data/app/components/geoblacklight/document/sidebar_component.rb +0 -8
- data/app/components/geoblacklight/document_component.html.erb +1 -2
- data/app/components/geoblacklight/download_links_component.html.erb +0 -3
- data/app/components/geoblacklight/download_links_component.rb +1 -1
- 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 +9 -5
- 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 +6 -5
- 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 -7
- data/app/controllers/relation_controller.rb +1 -1
- data/app/controllers/wms_controller.rb +1 -1
- data/app/helpers/geoblacklight_helper.rb +0 -43
- 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 +110 -134
- data/app/javascript/geoblacklight/controllers/oembed_viewer_controller.js +5 -5
- data/app/javascript/geoblacklight/controllers/openlayers_viewer_controller.js +27 -61
- 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 +34 -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 +79 -71
- 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 +43 -15
- data/app/javascript/geoblacklight/openlayers/inspection.js +23 -23
- data/app/javascript/geoblacklight/openlayers/layers.js +12 -12
- data/app/models/concerns/geoblacklight/bbox_filter_query.rb +7 -9
- data/app/models/concerns/geoblacklight/solr_document.rb +17 -57
- 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 -4
- 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 +3 -4
- 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 +102 -77
- data/lib/generators/geoblacklight/templates/settings.yml +97 -132
- 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 -5
- data/lib/geoblacklight/engine.rb +7 -18
- data/lib/geoblacklight/metadata/base.rb +0 -2
- data/lib/geoblacklight/metadata_transformer.rb +0 -2
- data/lib/geoblacklight/references.rb +6 -10
- data/lib/geoblacklight/relation/ancestors.rb +3 -5
- data/lib/geoblacklight/relation/descendants.rb +2 -4
- data/lib/geoblacklight/relation/relation_response.rb +5 -8
- data/lib/geoblacklight/version.rb +1 -1
- data/lib/geoblacklight/wms_layer.rb +3 -3
- data/lib/geoblacklight.rb +5 -15
- data/lib/tasks/geoblacklight.rake +0 -9
- 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/solr/conf/solrconfig.xml +10 -10
- 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 -69
- 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 +5 -4
- 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 +4 -16
- data/spec/tasks/geoblacklight_spec.rb +1 -1
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +4 -3
- metadata +40 -194
- 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/lib/geoblacklight/deprecated_configuration.rb +0 -665
- 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/lib/geoblacklight/deprecated_configuration_spec.rb +0 -680
- data/spec/solr_config_spec.rb +0 -41
- 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,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,17 +14,16 @@ export default class OpenlayersViewerController extends Controller {
|
|
|
14
14
|
protocol: String,
|
|
15
15
|
basemap: String,
|
|
16
16
|
mapGeom: String,
|
|
17
|
-
|
|
18
|
-
};
|
|
17
|
+
}
|
|
19
18
|
|
|
20
19
|
async connect() {
|
|
21
20
|
// Set up layers
|
|
22
|
-
this.basemap = this.getBasemap()
|
|
23
|
-
this.overlay = this.getPreviewOverlay(this.protocolValue, this.urlValue)
|
|
21
|
+
this.basemap = this.getBasemap()
|
|
22
|
+
this.overlay = this.getPreviewOverlay(this.protocolValue, this.urlValue)
|
|
24
23
|
|
|
25
|
-
await this.getBounds()
|
|
24
|
+
await this.getBounds()
|
|
26
25
|
// Load the map
|
|
27
|
-
this.loadMap()
|
|
26
|
+
this.loadMap()
|
|
28
27
|
}
|
|
29
28
|
|
|
30
29
|
// Create the map, add layers, and fit the bounds
|
|
@@ -33,68 +32,35 @@ export default class OpenlayersViewerController extends Controller {
|
|
|
33
32
|
target: this.element,
|
|
34
33
|
controls: defaultControls().extend([new FullScreen()]),
|
|
35
34
|
layers: [this.basemap, this.overlay],
|
|
36
|
-
})
|
|
37
|
-
this.map.getView().fit(this.extent, this.map.getSize())
|
|
35
|
+
})
|
|
36
|
+
this.map.getView().fit(this.extent, this.map.getSize())
|
|
38
37
|
this.addInspection()
|
|
39
38
|
}
|
|
40
39
|
|
|
41
40
|
addInspection() {
|
|
42
|
-
if (this.protocolValue == "Pmtiles") return pmTilesInspection(this.map)
|
|
41
|
+
if (this.protocolValue == "Pmtiles") return pmTilesInspection(this.map)
|
|
43
42
|
}
|
|
44
43
|
|
|
45
44
|
async getBounds() {
|
|
46
|
-
if (this.protocolValue ==
|
|
47
|
-
const view = await this.overlay.getSource().getView()
|
|
48
|
-
this.extent = view.extent
|
|
45
|
+
if (this.protocolValue == "Cog") {
|
|
46
|
+
const view = await this.overlay.getSource().getView()
|
|
47
|
+
this.extent = view.extent
|
|
49
48
|
} else {
|
|
50
|
-
this.extent = new GeoJSON()
|
|
51
|
-
.readFeatures(this.mapGeomValue)[0]
|
|
52
|
-
.getGeometry()
|
|
53
|
-
.getExtent();
|
|
49
|
+
this.extent = new GeoJSON().readFeatures(this.mapGeomValue)[0].getGeometry().getExtent()
|
|
54
50
|
}
|
|
55
51
|
}
|
|
56
52
|
|
|
57
53
|
// Select the configured basemap to use
|
|
58
54
|
getBasemap() {
|
|
59
|
-
const basemap = this.
|
|
60
|
-
const layer = new TileLayer({
|
|
61
|
-
|
|
62
|
-
...basemap,
|
|
63
|
-
url: this.normalizeUrl(basemap.url),
|
|
64
|
-
// The leaflet definitions spell this `attribution`; OpenLayers wants
|
|
65
|
-
// `attributions`. Accept either so one setting serves both viewers.
|
|
66
|
-
attributions: basemap.attributions || basemap.attribution,
|
|
67
|
-
}),
|
|
68
|
-
});
|
|
69
|
-
return layer;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// The basemap to draw, with any BASEMAPS values from settings.yml merged over
|
|
73
|
-
// the shipped definition. This lets an application change a basemap's URL --
|
|
74
|
-
// to add a CARTO API key, for example -- without restating the rest of the
|
|
75
|
-
// definition, and lets it define basemaps of its own. Falls back to positron
|
|
76
|
-
// for a name that resolves to nothing rather than drawing no basemap.
|
|
77
|
-
basemapDefinition() {
|
|
78
|
-
const name = this.basemapValue || "positron";
|
|
79
|
-
const definition = { ...basemaps[name], ...this.basemapOverrides()[name] };
|
|
80
|
-
return definition.url ? definition : basemaps.positron;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
basemapOverrides() {
|
|
84
|
-
return this.optionsValue.BASEMAPS || {};
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
// Leaflet and OpenLayers spell tile URL templates differently, so accept the
|
|
88
|
-
// leaflet form a configured basemap is most likely to be written in: {s}
|
|
89
|
-
// becomes OpenLayers' subdomain range, and {retina} drops out.
|
|
90
|
-
normalizeUrl(url) {
|
|
91
|
-
return url.replace(/\{s\}/g, "{a-d}").replace(/\{retina\}/g, "");
|
|
55
|
+
const basemap = basemaps[this.basemapValue || "positron"]
|
|
56
|
+
const layer = new TileLayer({ source: new XYZ(basemap) })
|
|
57
|
+
return layer
|
|
92
58
|
}
|
|
93
59
|
|
|
94
60
|
// Generate a layer based on the protocol
|
|
95
61
|
getPreviewOverlay(protocol, url) {
|
|
96
|
-
if (protocol === "Pmtiles") return pmTilesLayer(url)
|
|
97
|
-
if (protocol === "Cog") return cogLayer(url)
|
|
98
|
-
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}"`)
|
|
99
65
|
}
|
|
100
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
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
// Stimulus controllers
|
|
2
|
-
import OpenlayersViewerController from "geoblacklight/controllers/openlayers_viewer_controller"
|
|
3
|
-
import OembedViewerController from "geoblacklight/controllers/oembed_viewer_controller"
|
|
4
|
-
import LeafletViewerController from "geoblacklight/controllers/leaflet_viewer_controller"
|
|
5
|
-
import SearchResultsController from "geoblacklight/controllers/search_results_controller"
|
|
6
|
-
import DownloadsController from "geoblacklight/controllers/downloads_controller"
|
|
7
|
-
import ClipboardController from "geoblacklight/controllers/clipboard_controller"
|
|
2
|
+
import OpenlayersViewerController from "geoblacklight/controllers/openlayers_viewer_controller"
|
|
3
|
+
import OembedViewerController from "geoblacklight/controllers/oembed_viewer_controller"
|
|
4
|
+
import LeafletViewerController from "geoblacklight/controllers/leaflet_viewer_controller"
|
|
5
|
+
import SearchResultsController from "geoblacklight/controllers/search_results_controller"
|
|
6
|
+
import DownloadsController from "geoblacklight/controllers/downloads_controller"
|
|
7
|
+
import ClipboardController from "geoblacklight/controllers/clipboard_controller"
|
|
8
8
|
|
|
9
9
|
// GBL core
|
|
10
|
-
import Core from "geoblacklight/core"
|
|
10
|
+
import Core from "geoblacklight/core"
|
|
11
11
|
|
|
12
12
|
// Other modules
|
|
13
|
-
import openLayersBasemaps from "geoblacklight/openlayers/basemaps"
|
|
14
|
-
import leafletBasemaps from "geoblacklight/leaflet/basemaps"
|
|
13
|
+
import openLayersBasemaps from "geoblacklight/openlayers/basemaps"
|
|
14
|
+
import leafletBasemaps from "geoblacklight/leaflet/basemaps"
|
|
15
15
|
|
|
16
16
|
export default {
|
|
17
17
|
OpenlayersViewerController,
|
|
@@ -24,4 +24,4 @@ export default {
|
|
|
24
24
|
leafletBasemaps,
|
|
25
25
|
Core,
|
|
26
26
|
onLoad: Core.onLoad,
|
|
27
|
-
}
|
|
27
|
+
}
|
|
@@ -1,54 +1,52 @@
|
|
|
1
1
|
export class GeoBlacklightMetadataDownloadButton {
|
|
2
2
|
constructor(el, i, options = {}) {
|
|
3
|
-
this.options = options
|
|
4
|
-
this.el = typeof el === "string" ? document.querySelector(el) : el
|
|
5
|
-
this.download = document.querySelector(
|
|
6
|
-
this.options.target || this.el.getAttribute("data-ref-download")
|
|
7
|
-
);
|
|
3
|
+
this.options = options
|
|
4
|
+
this.el = typeof el === "string" ? document.querySelector(el) : el
|
|
5
|
+
this.download = document.querySelector(this.options.target || this.el.getAttribute("data-ref-download"))
|
|
8
6
|
// On initialization only do this for the first one.
|
|
9
7
|
if (i === 0) {
|
|
10
|
-
this.setRefUrl()
|
|
8
|
+
this.setRefUrl()
|
|
11
9
|
}
|
|
12
|
-
this.configureHandler()
|
|
10
|
+
this.configureHandler()
|
|
13
11
|
}
|
|
14
12
|
|
|
15
13
|
configureHandler() {
|
|
16
|
-
this.el.addEventListener("click", () => this.setRefUrl())
|
|
14
|
+
this.el.addEventListener("click", () => this.setRefUrl())
|
|
17
15
|
}
|
|
18
16
|
|
|
19
17
|
setRefUrl() {
|
|
20
|
-
const refUrl = this.el.getAttribute("data-ref-endpoint")
|
|
18
|
+
const refUrl = this.el.getAttribute("data-ref-endpoint")
|
|
21
19
|
if (!refUrl) {
|
|
22
|
-
this.download.style.display = "none"
|
|
20
|
+
this.download.style.display = "none"
|
|
23
21
|
} else {
|
|
24
|
-
this.download.style.display = ""
|
|
25
|
-
this.download.setAttribute("href", refUrl)
|
|
22
|
+
this.download.style.display = ""
|
|
23
|
+
this.download.setAttribute("href", refUrl)
|
|
26
24
|
}
|
|
27
25
|
}
|
|
28
26
|
}
|
|
29
27
|
|
|
30
28
|
export default function initializeMetadataDownload() {
|
|
31
|
-
const modal = document.getElementById("blacklight-modal")
|
|
29
|
+
const modal = document.getElementById("blacklight-modal")
|
|
32
30
|
|
|
33
31
|
modal.addEventListener("focus", (e) => {
|
|
34
|
-
if (!Array.from(e.target.classList).includes(
|
|
35
|
-
return
|
|
32
|
+
if (!Array.from(e.target.classList).includes("show")) {
|
|
33
|
+
return
|
|
36
34
|
}
|
|
37
35
|
e.target.querySelectorAll(".metadata-body").forEach((el) => {
|
|
38
|
-
el.closest(".modal-content").classList.add("metadata-modal")
|
|
39
|
-
})
|
|
36
|
+
el.closest(".modal-content").classList.add("metadata-modal")
|
|
37
|
+
})
|
|
40
38
|
|
|
41
39
|
e.target.querySelectorAll(".pill-metadata").forEach((element, i) => {
|
|
42
|
-
new GeoBlacklightMetadataDownloadButton(element, i)
|
|
43
|
-
})
|
|
44
|
-
})
|
|
40
|
+
new GeoBlacklightMetadataDownloadButton(element, i)
|
|
41
|
+
})
|
|
42
|
+
})
|
|
45
43
|
|
|
46
44
|
modal.addEventListener("blur", (e) => {
|
|
47
|
-
if (Array.from(e.target.classList).includes(
|
|
48
|
-
return
|
|
45
|
+
if (Array.from(e.target.classList).includes("show")) {
|
|
46
|
+
return
|
|
49
47
|
}
|
|
50
48
|
e.target.querySelectorAll(".metadata-body").forEach((el) => {
|
|
51
|
-
el.closest(".modal-content").classList.remove("metadata-modal")
|
|
52
|
-
})
|
|
53
|
-
})
|
|
49
|
+
el.closest(".modal-content").classList.remove("metadata-modal")
|
|
50
|
+
})
|
|
51
|
+
})
|
|
54
52
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { Popover } from
|
|
1
|
+
import { Popover } from "bootstrap"
|
|
2
2
|
|
|
3
3
|
// Initialize popovers
|
|
4
4
|
export default function initializePopovers() {
|
|
5
|
-
const popoverElements = document.querySelectorAll('[data-bs-toggle="popover"]')
|
|
5
|
+
const popoverElements = document.querySelectorAll('[data-bs-toggle="popover"]') // Bootstrap 5 uses 'data-bs-toggle'
|
|
6
6
|
popoverElements.forEach((element) => {
|
|
7
7
|
const popover = new Popover(element, {
|
|
8
8
|
trigger: "hover",
|
|
9
|
-
})
|
|
10
|
-
})
|
|
9
|
+
})
|
|
10
|
+
})
|
|
11
11
|
}
|
|
@@ -1,40 +1,40 @@
|
|
|
1
1
|
const fadeIn = (element, duration) => {
|
|
2
|
-
element.style.opacity = 0
|
|
3
|
-
element.style.display = "block"
|
|
2
|
+
element.style.opacity = 0
|
|
3
|
+
element.style.display = "block"
|
|
4
4
|
|
|
5
|
-
let start = null
|
|
5
|
+
let start = null
|
|
6
6
|
function step(timestamp) {
|
|
7
|
-
if (!start) start = timestamp
|
|
8
|
-
const progress = timestamp - start
|
|
9
|
-
element.style.opacity = Math.min(progress / duration, 1)
|
|
7
|
+
if (!start) start = timestamp
|
|
8
|
+
const progress = timestamp - start
|
|
9
|
+
element.style.opacity = Math.min(progress / duration, 1)
|
|
10
10
|
if (progress < duration) {
|
|
11
|
-
window.requestAnimationFrame(step)
|
|
11
|
+
window.requestAnimationFrame(step)
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
window.requestAnimationFrame(step)
|
|
16
|
-
}
|
|
15
|
+
window.requestAnimationFrame(step)
|
|
16
|
+
}
|
|
17
17
|
|
|
18
18
|
// Set up the relations widgets by querying the relations endpoint
|
|
19
19
|
export default function initializeRelations() {
|
|
20
20
|
document.querySelectorAll('[data-relations="true"]').forEach((element) => {
|
|
21
|
-
const attributes = element.dataset
|
|
22
|
-
const relationUrl = `${attributes.url}/relations
|
|
21
|
+
const attributes = element.dataset
|
|
22
|
+
const relationUrl = `${attributes.url}/relations`
|
|
23
23
|
|
|
24
24
|
fetch(relationUrl, { headers: { "X-Requested-With": "XMLHttpRequest" } })
|
|
25
25
|
.then((response) => {
|
|
26
26
|
if (!response.ok) {
|
|
27
|
-
throw new Error("Network response was not ok")
|
|
27
|
+
throw new Error("Network response was not ok")
|
|
28
28
|
}
|
|
29
|
-
return response.text()
|
|
29
|
+
return response.text()
|
|
30
30
|
})
|
|
31
31
|
.then((data) => {
|
|
32
|
-
const div = document.createElement("div")
|
|
33
|
-
div.innerHTML = data
|
|
34
|
-
element.appendChild(div)
|
|
35
|
-
div.style.display = "none"
|
|
36
|
-
fadeIn(div, 200)
|
|
32
|
+
const div = document.createElement("div")
|
|
33
|
+
div.innerHTML = data
|
|
34
|
+
element.appendChild(div)
|
|
35
|
+
div.style.display = "none"
|
|
36
|
+
fadeIn(div, 200)
|
|
37
37
|
})
|
|
38
|
-
.catch((error) => console.error("Error:", error))
|
|
39
|
-
})
|
|
38
|
+
.catch((error) => console.error("Error:", error))
|
|
39
|
+
})
|
|
40
40
|
}
|
|
@@ -1,55 +1,51 @@
|
|
|
1
|
-
import { Tooltip } from "bootstrap"
|
|
1
|
+
import { Tooltip } from "bootstrap"
|
|
2
2
|
|
|
3
3
|
export default function initializeTooltips() {
|
|
4
4
|
document.body.addEventListener(
|
|
5
5
|
"mouseenter",
|
|
6
6
|
(event) => {
|
|
7
7
|
if (event.target.closest(".blacklight-icons.svg_tooltip svg")) {
|
|
8
|
-
const svgElement = event.target.closest(
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const svgTitleElement = svgElement.querySelector("title");
|
|
12
|
-
const titleText = svgTitleElement ? svgTitleElement.textContent : "";
|
|
8
|
+
const svgElement = event.target.closest(".blacklight-icons.svg_tooltip svg")
|
|
9
|
+
const svgTitleElement = svgElement.querySelector("title")
|
|
10
|
+
const titleText = svgTitleElement ? svgTitleElement.textContent : ""
|
|
13
11
|
|
|
14
12
|
if (titleText !== undefined && titleText !== "") {
|
|
15
13
|
// Initialize Bootstrap tooltip with native JavaScript
|
|
16
14
|
const tooltip = new Tooltip(svgElement, {
|
|
17
15
|
placement: "bottom",
|
|
18
16
|
title: titleText,
|
|
19
|
-
})
|
|
20
|
-
tooltip.show()
|
|
17
|
+
})
|
|
18
|
+
tooltip.show()
|
|
21
19
|
|
|
22
20
|
// Store the original title in the data-original-title attribute
|
|
23
21
|
// and remove the title element to prevent it from interfering with Bootstrap's tooltip.
|
|
24
|
-
svgElement.setAttribute("data-original-title", titleText)
|
|
25
|
-
svgTitleElement.remove()
|
|
22
|
+
svgElement.setAttribute("data-original-title", titleText)
|
|
23
|
+
svgTitleElement.remove()
|
|
26
24
|
}
|
|
27
25
|
}
|
|
28
26
|
},
|
|
29
|
-
true
|
|
30
|
-
)
|
|
27
|
+
true,
|
|
28
|
+
) // Use capture to ensure the event is caught as it bubbles up
|
|
31
29
|
|
|
32
30
|
document.body.addEventListener(
|
|
33
31
|
"mouseleave",
|
|
34
32
|
(event) => {
|
|
35
33
|
if (event.target.closest(".blacklight-icons.svg_tooltip svg")) {
|
|
36
|
-
const svgElement = event.target.closest(
|
|
37
|
-
|
|
38
|
-
);
|
|
39
|
-
const originalTitle = svgElement.getAttribute("data-original-title");
|
|
34
|
+
const svgElement = event.target.closest(".blacklight-icons.svg_tooltip svg")
|
|
35
|
+
const originalTitle = svgElement.getAttribute("data-original-title")
|
|
40
36
|
|
|
41
37
|
if (originalTitle !== undefined && originalTitle !== "") {
|
|
42
38
|
// Restore the SVG title element from data-original-title
|
|
43
|
-
const newTitleElement = document.createElement("title")
|
|
44
|
-
newTitleElement.textContent = originalTitle
|
|
45
|
-
svgElement.prepend(newTitleElement)
|
|
46
|
-
svgElement.setAttribute("data-original-title", "")
|
|
39
|
+
const newTitleElement = document.createElement("title")
|
|
40
|
+
newTitleElement.textContent = originalTitle
|
|
41
|
+
svgElement.prepend(newTitleElement)
|
|
42
|
+
svgElement.setAttribute("data-original-title", "")
|
|
47
43
|
}
|
|
48
44
|
}
|
|
49
45
|
|
|
50
46
|
// Remove tooltips
|
|
51
|
-
document.querySelectorAll(".tooltip").forEach((elem) => elem.remove())
|
|
47
|
+
document.querySelectorAll(".tooltip").forEach((elem) => elem.remove())
|
|
52
48
|
},
|
|
53
|
-
true
|
|
54
|
-
)
|
|
49
|
+
true,
|
|
50
|
+
) // Use capture to ensure the event is caught as it bubbles up
|
|
55
51
|
}
|
|
@@ -5,31 +5,31 @@
|
|
|
5
5
|
class Truncator {
|
|
6
6
|
constructor(element, { lines, id }) {
|
|
7
7
|
// if the element is already small enough, don't truncate it
|
|
8
|
-
const minHeight = lines * parseFloat(window.getComputedStyle(element).fontSize)
|
|
9
|
-
if (element.getBoundingClientRect().height
|
|
8
|
+
const minHeight = lines * parseFloat(window.getComputedStyle(element).fontSize)
|
|
9
|
+
if (element.getBoundingClientRect().height <= minHeight) return
|
|
10
10
|
|
|
11
11
|
// set a unique ID for the element if it doesn't have one
|
|
12
|
-
this.element = element
|
|
13
|
-
this.element.id ||= id
|
|
12
|
+
this.element = element
|
|
13
|
+
this.element.id ||= id
|
|
14
14
|
|
|
15
15
|
// add the button
|
|
16
|
-
this.button = document.createElement("button")
|
|
17
|
-
this.button.classList.add("btn", "btn-link", "p-0", "border-0")
|
|
18
|
-
this.button.dataset.bsToggle = "collapse"
|
|
19
|
-
this.button.dataset.bsTarget = `#${this.element.id}
|
|
20
|
-
this.button.setAttribute("aria-expanded", "false")
|
|
21
|
-
this.button.setAttribute("aria-controls", this.element.id)
|
|
22
|
-
this.button.textContent = "Read more"
|
|
23
|
-
this.button.addEventListener("click", this.toggle.bind(this))
|
|
24
|
-
element.parentNode.insertBefore(this.button, element.nextSibling)
|
|
16
|
+
this.button = document.createElement("button")
|
|
17
|
+
this.button.classList.add("btn", "btn-link", "p-0", "border-0")
|
|
18
|
+
this.button.dataset.bsToggle = "collapse"
|
|
19
|
+
this.button.dataset.bsTarget = `#${this.element.id}`
|
|
20
|
+
this.button.setAttribute("aria-expanded", "false")
|
|
21
|
+
this.button.setAttribute("aria-controls", this.element.id)
|
|
22
|
+
this.button.textContent = "Read more"
|
|
23
|
+
this.button.addEventListener("click", this.toggle.bind(this))
|
|
24
|
+
element.parentNode.insertBefore(this.button, element.nextSibling)
|
|
25
25
|
|
|
26
26
|
// start collapsed
|
|
27
|
-
this.element.classList.add("collapse")
|
|
27
|
+
this.element.classList.add("collapse")
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
toggle() {
|
|
31
|
-
if (this.button.textContent == "Read more") this.button.textContent = "Close"
|
|
32
|
-
else this.button.textContent = "Read more"
|
|
31
|
+
if (this.button.textContent == "Read more") this.button.textContent = "Close"
|
|
32
|
+
else this.button.textContent = "Read more"
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
|
|
@@ -40,6 +40,6 @@ export default function initializeTruncation() {
|
|
|
40
40
|
new Truncator(element, {
|
|
41
41
|
lines: 12,
|
|
42
42
|
id: `truncate-${i}`,
|
|
43
|
-
})
|
|
44
|
-
})
|
|
43
|
+
})
|
|
44
|
+
})
|
|
45
45
|
}
|