diff --git a/Gemfile b/Gemfile
index 1cbc9af3..a3f70c20 100644
--- a/Gemfile
+++ b/Gemfile
@@ -71,7 +71,7 @@ end
gem 'blacklight', '~> 7.33'
gem 'rsolr' # required for Blacklight
-gem "geoblacklight", '~> 3.8'
+gem "geoblacklight", '~> 4.3.0'
gem 'faraday', '~> 2.0'
gem "devise"
gem "devise-guests", ">= 0.3.3"
@@ -83,7 +83,9 @@ gem 'newrelic_rpm'
gem 'twitter-typeahead-rails'
gem 'blacklight_range_limit', '~> 7.0'
gem 'redis', '~> 5.0'
-gem 'geo_monitor', '~> 0.7', github: 'geoblacklight/geo_monitor'
+# Not compatible with GeoBlacklight 4.x
+# https://github.com/geoblacklight/geo_monitor/issues/12
+# gem 'geo_monitor', '~> 0.7', github: 'geoblacklight/geo_monitor'
gem 'geo_combine', '>= 0.9' # For OpenGeoMetadata indexing
gem 'sidekiq', '~> 7.0'
gem 'whenever', require: false
diff --git a/Gemfile.lock b/Gemfile.lock
index db1e6051..df6d622a 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,11 +1,3 @@
-GIT
- remote: https://github.com/geoblacklight/geo_monitor.git
- revision: 28d61996677292730a9285f5686e4f5a193c8fae
- specs:
- geo_monitor (0.8.0)
- faraday
- rails (>= 6.1, < 7.2)
-
GEM
remote: https://rubygems.org/
specs:
@@ -92,8 +84,10 @@ GEM
execjs (~> 2)
base64 (0.2.0)
bcrypt (3.1.20)
+ bcrypt_pbkdf (1.1.1)
bcrypt_pbkdf (1.1.1-arm64-darwin)
bcrypt_pbkdf (1.1.1-x86_64-darwin)
+ bigdecimal (3.1.8)
bindex (0.8.1)
blacklight (7.37.0)
deprecation
@@ -120,7 +114,7 @@ GEM
bundler-audit (0.9.1)
bundler (>= 1.2.0, < 3)
thor (~> 1.0)
- capistrano (3.18.1)
+ capistrano (3.19.0)
airbrussh (>= 1.0.0)
i18n
rake (>= 10.0.0)
@@ -191,9 +185,9 @@ GEM
ed25519
docile (1.4.0)
domain_name (0.6.20240107)
- ed25519 (1.3.0)
drb (2.2.1)
dry-cli (1.0.0)
+ ed25519 (1.3.0)
erubi (1.13.0)
execjs (2.9.1)
factory_bot (6.2.1)
@@ -210,7 +204,16 @@ GEM
net-http-persistent (~> 4.0)
faraday-retry (2.2.1)
faraday (~> 2.0)
+ ffi (1.17.0-aarch64-linux-gnu)
+ ffi (1.17.0-aarch64-linux-musl)
+ ffi (1.17.0-arm-linux-gnu)
+ ffi (1.17.0-arm-linux-musl)
ffi (1.17.0-arm64-darwin)
+ ffi (1.17.0-x86-linux-gnu)
+ ffi (1.17.0-x86-linux-musl)
+ ffi (1.17.0-x86_64-darwin)
+ ffi (1.17.0-x86_64-linux-gnu)
+ ffi (1.17.0-x86_64-linux-musl)
ffi-compiler (1.3.2)
ffi (>= 1.15.5)
rake
@@ -224,17 +227,19 @@ GEM
rsolr
sanitize
thor
- geoblacklight (3.8.0)
- blacklight (~> 7.8)
+ geoblacklight (4.3.0)
+ blacklight (~> 7.0)
coderay
config
deprecation
- faraday (>= 1.0)
- geo_combine (~> 0.8)
+ faraday (~> 2.0)
+ geo_combine (~> 0.9)
handlebars_assets
mime-types
- rails (>= 5.2.4, < 7.1)
+ rails (>= 6.1, < 7.2)
rgeo-geojson
+ sprockets-rails (~> 3.0)
+ vite_rails (~> 3.0)
git (2.1.1)
activesupport (>= 5.0)
addressable (~> 2.8)
@@ -329,8 +334,18 @@ GEM
net-ssh (7.2.3)
newrelic_rpm (9.11.0)
nio4r (2.7.3)
+ nokogiri (1.16.6-aarch64-linux)
+ racc (~> 1.4)
+ nokogiri (1.16.6-arm-linux)
+ racc (~> 1.4)
nokogiri (1.16.6-arm64-darwin)
racc (~> 1.4)
+ nokogiri (1.16.6-x86-linux)
+ racc (~> 1.4)
+ nokogiri (1.16.6-x86_64-darwin)
+ racc (~> 1.4)
+ nokogiri (1.16.6-x86_64-linux)
+ racc (~> 1.4)
okcomputer (1.18.5)
orm_adapter (0.5.0)
ostruct (0.6.0)
@@ -347,11 +362,15 @@ GEM
puma (6.4.2)
nio4r (~> 2.0)
racc (1.8.0)
- rack (3.0.11)
+ rack (3.1.4)
rack-attack (6.7.0)
rack (>= 1.0, < 4)
rack-mini-profiler (2.3.4)
rack (>= 1.2.0)
+ rack-proxy (0.7.7)
+ rack
+ rack-session (2.0.0)
+ rack (>= 3.0.0)
rack-test (2.1.0)
rack (>= 1.3)
rackup (2.1.0)
@@ -403,7 +422,7 @@ GEM
actionpack (>= 5.2)
railties (>= 5.2)
retriable (3.1.2)
- rexml (3.3.0)
+ rexml (3.3.1)
strscan
rgeo (3.0.1)
rgeo-geojson (2.1.1)
@@ -500,7 +519,12 @@ GEM
actionpack (>= 6.1)
activesupport (>= 6.1)
sprockets (>= 3.0.0)
+ sqlite3 (1.7.3-aarch64-linux)
+ sqlite3 (1.7.3-arm-linux)
sqlite3 (1.7.3-arm64-darwin)
+ sqlite3 (1.7.3-x86-linux)
+ sqlite3 (1.7.3-x86_64-darwin)
+ sqlite3 (1.7.3-x86_64-linux)
sshkit (1.23.0)
base64
net-scp (>= 1.1.2)
@@ -509,7 +533,7 @@ GEM
stringio (3.1.1)
strscan (3.1.0)
thor (1.3.1)
- tilt (2.3.0)
+ tilt (2.4.0)
timeout (0.4.1)
twitter-typeahead-rails (0.11.1)
actionpack (>= 3.1)
@@ -523,6 +547,13 @@ GEM
activesupport (>= 5.2.0, < 8.0)
concurrent-ruby (~> 1.0)
method_source (~> 1.0)
+ vite_rails (3.0.17)
+ railties (>= 5.1, < 8)
+ vite_ruby (~> 3.0, >= 3.2.2)
+ vite_ruby (3.6.0)
+ dry-cli (>= 0.7, < 2)
+ rack-proxy (~> 0.6, >= 0.6.1)
+ zeitwerk (~> 2.2)
warden (1.2.9)
rack (>= 2.0.9)
web-console (4.2.1)
@@ -542,7 +573,20 @@ GEM
zeitwerk (2.6.16)
PLATFORMS
- arm64-darwin-23
+ aarch64-linux
+ aarch64-linux-gnu
+ aarch64-linux-musl
+ arm-linux
+ arm-linux-gnu
+ arm-linux-musl
+ arm64-darwin
+ x86-linux
+ x86-linux-gnu
+ x86-linux-musl
+ x86_64-darwin
+ x86_64-linux
+ x86_64-linux-gnu
+ x86_64-linux-musl
DEPENDENCIES
bcrypt_pbkdf (~> 1.1)
@@ -568,8 +612,7 @@ DEPENDENCIES
factory_bot_rails (~> 6.2.0)
faraday (~> 2.0)
geo_combine (>= 0.9)
- geo_monitor (~> 0.7)!
- geoblacklight (~> 3.8)
+ geoblacklight (~> 4.3.0)
honeybadger
http
jbuilder (~> 2.5)
diff --git a/app/assets/javascripts/modules/mirador.js b/app/assets/javascripts/modules/mirador.js
new file mode 100644
index 00000000..4fc19518
--- /dev/null
+++ b/app/assets/javascripts/modules/mirador.js
@@ -0,0 +1,63 @@
+// Borrowed from:
+// https://github.com/sul-dlss/sul-embed/blob/main/app/javascript/src/modules/m3_viewer.js
+const setupViewer = function () {
+ const target = document.getElementById("mirador");
+ if (target) {
+ Mirador.viewer({
+ id: "mirador",
+ selectedTheme: "sul",
+ themes: {
+ sul: {
+ palette: {
+ type: "light",
+ primary: {
+ main: "#8c1515",
+ },
+ secondary: {
+ main: "#8c1515",
+ },
+ shades: {
+ dark: "#2e2d29",
+ main: "#ffffff",
+ light: "#f4f4f4",
+ },
+ notification: {
+ main: "#e98300",
+ },
+ },
+ },
+ },
+ windows: [
+ {
+ id: "main",
+ loadedManifest: target.dataset.manifestUrl,
+ },
+ ],
+ window: {
+ allowClose: false,
+ allowFullscreen: true,
+ allowMaximize: false,
+ authNewWindowCenter: "screen",
+ hideWindowTitle: true,
+ sidebarPanel: "attribution",
+ views: [
+ { key: "single", behaviors: [null, "individuals"] },
+ { key: "book", behaviors: [null, "paged"] },
+ { key: "scroll", behaviors: ["continuous"] },
+ { key: "gallery" },
+ ],
+ },
+ workspace: {
+ showZoomControls: true,
+ type: "single",
+ },
+ workspaceControlPanel: {
+ enabled: false,
+ },
+ });
+ }
+};
+
+// Load the viewer on page load and Turbolinks page change
+document.addEventListener("DOMContentLoaded", setupViewer);
+document.addEventListener("turbolinks:load", setupViewer);
diff --git a/app/assets/stylesheets/geoblacklight.scss b/app/assets/stylesheets/geoblacklight.scss
index 7537ccf2..6df19998 100644
--- a/app/assets/stylesheets/geoblacklight.scss
+++ b/app/assets/stylesheets/geoblacklight.scss
@@ -1,2 +1 @@
@import 'geoblacklight/geoblacklight';
-@import 'leaflet-label';
diff --git a/app/assets/stylesheets/modules/show.scss b/app/assets/stylesheets/modules/show.scss
index 5612f149..58b38f20 100644
--- a/app/assets/stylesheets/modules/show.scss
+++ b/app/assets/stylesheets/modules/show.scss
@@ -18,3 +18,23 @@ dd[itemprop='url'] a {
padding-top: 0;
}
}
+
+// Paragraph margins for description field
+.blacklight-dct_description_sm p {
+ margin-bottom: 0.5rem;
+
+ &:last-of-type {
+ margin-bottom: 0;
+ }
+}
+
+// Move the index map legend to make space for "Embedded Content" text
+.index-map-legend {
+ left: unset;
+}
+
+// Styles for Mirador viewer (non-stanford IIIF content)
+#mirador {
+ width: 100%;
+ min-height: 493px;
+}
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 8204ca4c..d6bee864 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -4,6 +4,8 @@ class ApplicationController < ActionController::Base
# Please be sure to impelement current_user and user_session. Blacklight depends on
# these methods in order to perform user specific actions.
+ before_action :allow_geoblacklight_params
+
layout :determine_layout if respond_to? :layout
# Prevent CSRF attacks by raising an exception.
@@ -14,4 +16,9 @@ class ApplicationController < ActionController::Base
def after_sign_out_path_for(_resource_or_scope)
'/Shibboleth.sso/Logout'
end
+
+ def allow_geoblacklight_params
+ # Blacklight::Parameters will pass these to params.permit
+ blacklight_config.search_state_fields.append(Settings.GBL_PARAMS)
+ end
end
diff --git a/app/controllers/catalog_controller.rb b/app/controllers/catalog_controller.rb
index 013643fa..cdf902ad 100644
--- a/app/controllers/catalog_controller.rb
+++ b/app/controllers/catalog_controller.rb
@@ -1,13 +1,15 @@
require 'blacklight/catalog'
-require 'legacy_id_map'
class CatalogController < ApplicationController
include BlacklightRangeLimit::ControllerOverride
include Blacklight::Catalog
- rescue_from Blacklight::Exceptions::RecordNotFound, with: :redirect_from_legacy_id
-
configure_blacklight do |config|
+ # Ensures that JSON representations of Solr Documents can be retrieved using
+ # the path /catalog/:id/raw
+ # Please see https://github.com/projectblacklight/blacklight/pull/2006/
+ config.raw_endpoint.enabled = true
+
## Default parameters to send to solr for all search-like requests. See also SolrHelper#solr_search_params
config.default_solr_params = {
:start => 0,
@@ -20,23 +22,24 @@ class CatalogController < ApplicationController
# parameters included in the Blacklight-jetty document requestHandler.
config.default_document_solr_params = {
qt: 'document',
- q: '{!raw f=layer_slug_s v=$id}'
+ q: "{!raw f=#{Settings.FIELDS.ID} v=$id}"
}
+ # GeoBlacklight Defaults
+ # * Adds the "map" split view for catalog#index
+ config.view.split(partials: ['index'])
+ config.view.delete_field('list')
+
# solr field configuration for search results/index views
# config.index.show_link = 'title_display'
# config.index.record_display_type = 'format'
- config.index.title_field = 'dc_title_s'
-
- config.raw_endpoint.enabled = true
+ config.index.title_field = Settings.FIELDS.TITLE
config.crawler_detector = ->(req) { req.env['HTTP_USER_AGENT']&.include?('bot') }
# solr field configuration for document/show views
-
config.show.display_type_field = 'format'
- config.show.partials << 'rights_metadata'
config.show.partials << 'show_message'
config.show.partials << 'show_default_viewer_container'
config.show.partials << 'show_default_attribute_table'
@@ -47,10 +50,6 @@ class CatalogController < ApplicationController
# Configure the index document presenter.
config.index.document_presenter_class = Geoblacklight::DocumentPresenter
- # Custom GeoBlacklight fields which currently map to GeoBlacklight-Schema
- # v0.3.2
- config.wxs_identifier_field = 'layer_id_s'
-
# solr fields that will be treated as facets by the blacklight application
# The ordering of the field names is the order of the display
#
@@ -77,7 +76,6 @@ class CatalogController < ApplicationController
# config.add_facet_field 'lc_1letter_facet', :label => 'Call Number'
# config.add_facet_field 'subject_geo_facet', :label => 'Region'
# config.add_facet_field 'solr_bbox', :fq => "solr_bbox:IsWithin(-88,26,-79,36)", :label => 'Spatial'
-
# config.add_facet_field 'example_pivot_field', :label => 'Pivot Field', :pivot => ['format', 'language_facet']
# config.add_facet_field 'example_query_facet_field', :label => 'Publish Date', :query => {
@@ -86,108 +84,140 @@ class CatalogController < ApplicationController
# :years_25 => { :label => 'within 25 Years', :fq => "pub_date:[#{Time.now.year - 25 } TO *]" }
# }
- config.add_facet_field Settings.FIELDS.PROVENANCE, label: 'Institution', limit: 8, partial: 'icon_facet'
- config.add_facet_field Settings.FIELDS.CREATOR, label: 'Author', limit: 6
- config.add_facet_field Settings.FIELDS.PUBLISHER, label: 'Publisher', limit: 6
- config.add_facet_field Settings.FIELDS.SUBJECT, label: 'Subject', limit: 6
- config.add_facet_field Settings.FIELDS.SPATIAL_COVERAGE, label: 'Place', limit: 6
- # config.add_facet_field 'dct_isPartOf_sm', :label => 'Collection', :limit => 6
- config.add_facet_field Settings.FIELDS.SOURCE, show: false, label: 'Collection'
-
- config.add_facet_field 'solr_year_i', label: 'Year', limit: 10, range: {
- # :num_segments => 6,
- assumed_boundaries: [0o001, 2016]
- # :segments => true
+ # DEFAULT FACETS
+ # to add additional facets, use the keys defined in the settings.yml file
+ config.add_facet_field Settings.FIELDS.PROVIDER, label: 'Provider', limit: 8,
+ item_component: Geoblacklight::IconFacetItemComponent
+ config.add_facet_field Settings.FIELDS.CREATOR, label: 'Creator', limit: 8
+ config.add_facet_field Settings.FIELDS.PUBLISHER, label: 'Publisher', limit: 8
+ config.add_facet_field Settings.FIELDS.SUBJECT, label: 'Subject', limit: 8
+ config.add_facet_field Settings.FIELDS.THEME, label: 'Theme', limit: 8
+ config.add_facet_field Settings.FIELDS.SPATIAL_COVERAGE, label: 'Place', limit: 8
+ config.add_facet_field Settings.FIELDS.INDEX_YEAR, label: 'Year', limit: 10, range: {
+ assumed_boundaries: [1100, Time.zone.now.year + 2]
}
-
- # Needed as a fallback for dc_rights_s facet selections that were previously linked, does not show up in UI
- config.add_facet_field 'dc_rights_s', label: 'Rights', partial: 'icon_facet', show: false
-
- config.add_facet_field 'access', label: 'Access',
- query: {
- restricted: {
- label: 'Restricted', fq: 'dc_rights_s:Restricted'
- },
- public: {
- label: 'Public', fq: 'dc_rights_s:Public'
- },
- available: {
- label: 'Available',
- fq: "(layer_availability_score_f:[#{Settings.GEOMONITOR_TOLERANCE} TO 1])"
- },
- unavailable: {
- label: 'Unavailable',
- fq: "layer_availability_score_f:[0 TO #{Settings.GEOMONITOR_TOLERANCE}]"
- }
- },
- partial: 'icon_facet'
- config.add_facet_field 'layer_geom_type_s', label: 'Data type', limit: 8, partial: 'icon_facet'
- config.add_facet_field 'dc_format_s', label: 'Format', limit: 3
+ config.add_facet_field Settings.FIELDS.ACCESS_RIGHTS, label: 'Access', limit: 8,
+ item_component: Geoblacklight::IconFacetItemComponent
+ # Disabled until GeoMonitor is updated for v4.x compatibility
+ # https://github.com/geoblacklight/geo_monitor/issues/12
+ # config.add_facet_field 'availability',
+ # label: 'Availability',
+ # query: {
+ # available: {
+ # label: 'Available',
+ # fq: "(layer_availability_score_f:[#{Settings.GEOMONITOR_TOLERANCE} TO 1])"
+ # },
+ # unavailable: {
+ # label: 'Unavailable',
+ # fq: "layer_availability_score_f:[0 TO #{Settings.GEOMONITOR_TOLERANCE}]"
+ # }
+ # },
+ # item_component: Geoblacklight::IconFacetItemComponent
+ config.add_facet_field Settings.FIELDS.RESOURCE_CLASS, label: 'Resource Class', limit: 8,
+ item_component: Geoblacklight::IconFacetItemComponent
+ config.add_facet_field Settings.FIELDS.RESOURCE_TYPE, label: 'Resource Type', limit: 8
+
+ # GEOBLACKLIGHT APPLICATION FACETS
+
+ # Map-Based "Search Here" Feature
+ # item_presenter - Defines how the facet appears in the GBL UI
+ # filter_query_builder - Defines the query generated for Solr
+ # filter_class - Defines how to add/remove facet from query
+ # label - Defines the label used in contstraints container
+ config.add_facet_field Settings.FIELDS.GEOMETRY,
+ item_presenter: Geoblacklight::BboxItemPresenter,
+ filter_class: Geoblacklight::BboxFilterField,
+ filter_query_builder: Geoblacklight::BboxFilterQuery,
+ within_boost: Settings.BBOX_WITHIN_BOOST,
+ overlap_boost: Settings.OVERLAP_RATIO_BOOST,
+ overlap_field: Settings.FIELDS.OVERLAP_FIELD,
+ label: 'Bounding Box'
+
+ # Item Relationship Facets
+ # * Not displayed to end user (show: false)
+ # * Must be present for relationship "Browse all 4 records" links to work
+ # * Label value becomes the search contraint filter name
+ config.add_facet_field Settings.FIELDS.MEMBER_OF, label: 'Member Of', show: false
+ config.add_facet_field Settings.FIELDS.IS_PART_OF, label: 'Is Part Of', show: false
+ config.add_facet_field Settings.FIELDS.RELATION, label: 'Related', show: false
+ config.add_facet_field Settings.FIELDS.REPLACES, label: 'Replaces', show: false
+ config.add_facet_field Settings.FIELDS.IS_REPLACED_BY, label: 'Is Replaced By', show: false
+ config.add_facet_field Settings.FIELDS.SOURCE, label: 'Source', show: false
+ config.add_facet_field Settings.FIELDS.VERSION, label: 'Is Version Of', show: false
# Have BL send all facet field names to Solr, which has been the default
# previously. Simply remove these lines if you'd rather use Solr request
# handler defaults, or have no facets.
config.add_facet_fields_to_solr_request!
+ # SEARCH RESULTS FIELDS
# solr fields to be displayed in the index (search results) view
# The ordering of the field names is the order of the display
- # config.add_index_field 'title_display', :label => 'Title:'
- # config.add_index_field 'title_vern_display', :label => 'Title:'
- # config.add_index_field 'author_display', :label => 'Author:'
- # config.add_index_field 'author_vern_display', :label => 'Author:'
- # config.add_index_field 'format', :label => 'Format:'
- # config.add_index_field 'language_facet', :label => 'Language:'
- # config.add_index_field 'published_display', :label => 'Published:'
- # config.add_index_field 'published_vern_display', :label => 'Published:'
- # config.add_index_field 'lc_callnum_display', :label => 'Call number:'
-
- # config.add_index_field 'dc_title_t', :label => 'Display Name:'
- # config.add_index_field 'dct_provenance_s', :label => 'Institution:'
- # config.add_index_field 'dc_rights_s', :label => 'Access:'
- # # config.add_index_field 'Area', :label => 'Area:'
- # config.add_index_field 'dc_subject_sm', :label => 'Keywords:'
- config.add_index_field Settings.FIELDS.YEAR
+ config.add_index_field Settings.FIELDS.INDEX_YEAR
config.add_index_field Settings.FIELDS.CREATOR
config.add_index_field Settings.FIELDS.DESCRIPTION, helper_method: :snippit
config.add_index_field Settings.FIELDS.PUBLISHER
+ # ITEM VIEW FIELDS
# solr fields to be displayed in the show (single result) view
# The ordering of the field names is the order of the display
# item_prop: [String] property given to span with Schema.org item property
# link_to_search: [Boolean] that can be passed to link to a facet search
# helper_method: [Symbol] method that can be used to render the value
- config.add_show_field Settings.FIELDS.CREATOR, label: 'Author(s)', itemprop: 'author', link_to_facet: true
+ config.add_show_field Settings.FIELDS.CREATOR, label: 'Creator', itemprop: 'creator', link_to_facet: true
config.add_show_field Settings.FIELDS.DESCRIPTION, label: 'Description', itemprop: 'description',
helper_method: :render_value_as_truncate_abstract
- config.add_show_field Settings.FIELDS.PUBLISHER, label: 'Publisher', itemprop: 'publisher'
- config.add_show_field Settings.FIELDS.PART_OF, label: 'Collection', itemprop: 'isPartOf'
- config.add_show_field Settings.FIELDS.SPATIAL_COVERAGE, label: 'Place(s)', itemprop: 'spatial', link_to_facet: true
- config.add_show_field Settings.FIELDS.SUBJECT, label: 'Subject(s)', itemprop: 'keywords', link_to_facet: true
- config.add_show_field Settings.FIELDS.TEMPORAL, label: 'Year', itemprop: 'temporal'
- config.add_show_field Settings.FIELDS.PROVENANCE, label: 'Held by', link_to_facet: true
+ config.add_show_field Settings.FIELDS.PUBLISHER, label: 'Publisher', itemprop: 'publisher', link_to_facet: true
+ config.add_show_field Settings.FIELDS.SPATIAL_COVERAGE, label: 'Place', itemprop: 'spatial',
+ link_to_facet: true
+ config.add_show_field Settings.FIELDS.SUBJECT, label: 'Subject', itemprop: 'keywords', link_to_facet: true
+ config.add_show_field Settings.FIELDS.THEME, label: 'Theme', itemprop: 'theme', link_to_facet: true
+ config.add_show_field Settings.FIELDS.DATE_ISSUED, label: 'Date Issued', itemprop: 'issued'
+ config.add_show_field Settings.FIELDS.TEMPORAL_COVERAGE, label: 'Temporal Coverage', itemprop: 'temporal'
+ config.add_show_field Settings.FIELDS.PROVIDER, label: 'Provider', link_to_facet: true
+ config.add_show_field Settings.FIELDS.RESOURCE_CLASS, label: 'Resource Class', itemprop: 'class',
+ link_to_facet: true
+ config.add_show_field Settings.FIELDS.RESOURCE_TYPE, label: 'Resource Type', itemprop: 'type', link_to_facet: true
+ # config.add_show_field Settings.FIELDS.FORMAT, label: 'Format', itemprop: 'format'
+ config.add_show_field Settings.FIELDS.RIGHTS, label: 'Use and Reproduction', itemprop: 'rights'
+ config.add_show_field Settings.FIELDS.RIGHTS_HOLDER, label: 'Copyright', itemprop: 'rights_holder'
+ config.add_show_field Settings.FIELDS.LICENSE, label: 'License', itemprop: 'license', helper_method: :render_license
config.add_show_field(
- Settings.FIELDS.REFERENCES,
+ Settings.FIELDS.IDENTIFIER,
label: 'More details at',
accessor: [:external_url],
if: proc { |_, _, doc| doc.external_url },
helper_method: :render_references_url
)
- # config.add_show_field 'dc_title_t', :label => 'Title:'
- # config.add_show_field 'title_display', :label => 'Title:'
- # config.add_show_field 'title_vern_display', :label => 'Title:'
- # config.add_show_field 'subtitle_display', :label => 'Subtitle:'
- # config.add_show_field 'subtitle_vern_display', :label => 'Subtitle:'
- # config.add_show_field 'author_display', :label => 'Author:'
- # config.add_show_field 'author_vern_display', :label => 'Author:'
- # config.add_show_field 'format', :label => 'Format:'
- # config.add_show_field 'url_fulltext_display', :label => 'URL:'
- # config.add_show_field 'url_suppl_display', :label => 'More Information:'
- # config.add_show_field 'language_facet', :label => 'Language:'
- # config.add_show_field 'published_display', :label => 'Published:'
- # config.add_show_field 'published_vern_display', :label => 'Published:'
- # config.add_show_field 'lc_callnum_display', :label => 'Call number:'
- # config.add_show_field 'isbn_t', :label => 'ISBN:'
+ # ADDITIONAL FIELDS
+ # The following fields are not user friendly and are not set to appear on the item show page.
+ # They contain non-literal values, codes, URIs, or are otherwise designed to power features in the interface.
+ # These values might need a translations to be readable by users.
+
+ # config.add_show_field Settings.FIELDS.LANGUAGE, label: 'Language', itemprop: 'language'
+ # config.add_show_field Settings.FIELDS.KEYWORD, label: 'Keyword(s)', itemprop: 'keyword'
+
+ # config.add_show_field Settings.FIELDS.INDEX_YEAR, label: 'Year', itemprop: 'year'
+ # config.add_show_field Settings.FIELDS.DATE_RANGE, label: 'Date Range', itemprop: 'date_range'
+
+ # config.add_show_field Settings.FIELDS.CENTROID, label: 'Centroid', itemprop: 'centroid'
+ # config.add_show_field Settings.FIELDS.OVERLAP_FIELD, label: 'Overlap BBox', itemprop: 'overlap_field'
+
+ # config.add_show_field Settings.FIELDS.RELATION, label: 'Relation', itemprop: 'relation'
+ # config.add_show_field Settings.FIELDS.MEMBER_OF, label: 'Member Of', itemprop: 'member_of'
+ # config.add_show_field Settings.FIELDS.IS_PART_OF, label: 'Is Part Of', itemprop: 'is_part_of'
+ # config.add_show_field Settings.FIELDS.VERSION, label: 'Version', itemprop: 'version'
+ # config.add_show_field Settings.FIELDS.REPLACES, label: 'Replaces', itemprop: 'replaces'
+ # config.add_show_field Settings.FIELDS.IS_REPLACED_BY, label: 'Is Replaced By', itemprop: 'is_replaced_by'
+
+ # config.add_show_field Settings.FIELDS.WXS_IDENTIFIER, label: 'Web Service Layer', itemprop: 'wxs_identifier'
+ # config.add_show_field Settings.FIELDS.ID, label: 'ID', itemprop: 'id'
+ # config.add_show_field Settings.FIELDS.IDENTIFIER, label: 'Identifier', itemprop: 'identifier'
+
+ # config.add_show_field Settings.FIELDS.MODIFIED, label: 'Date Modified', itemprop: 'modified'
+ # config.add_show_field Settings.FIELDS.METADATA_VERSION, label: 'Metadata Version', itemprop: 'metadata_version'
+ # config.add_show_field Settings.FIELDS.SUPPRESSED, label: 'Suppressed', itemprop: 'suppresed'
# "fielded" search configuration. Used by pulldown among other places.
# For supported keys in hash, see rdoc for Blacklight::SearchFields
@@ -208,8 +238,8 @@ class CatalogController < ApplicationController
# since we aren't specifying it otherwise.
# config.add_search_field 'text', :label => 'All Fields'
- # config.add_search_field 'dc_title_ti', :label => 'Title'
- # config.add_search_field 'dc_description_ti', :label => 'Description'
+ # config.add_search_field 'dct_title_ti', :label => 'Title'
+ # config.add_search_field 'dct_description_ti', :label => 'Description'
# Now we see how to over-ride Solr request handler defaults, in this
# case for a BL "search field", which is really a dismax aggregate
@@ -261,11 +291,10 @@ class CatalogController < ApplicationController
# label in pulldown is followed by the name of the SOLR field to sort by and
# whether the sort is ascending or descending (it must be asc or desc
# except in the relevancy case).
- config.add_sort_field 'score desc, dc_title_sort asc', label: 'relevance'
- config.add_sort_field 'solr_year_i desc, dc_title_sort asc', label: 'year'
- config.add_sort_field 'dc_publisher_sort asc, dc_title_sort asc', label: 'publisher'
- config.add_sort_field 'dc_title_sort asc', label: 'title'
- config.add_sort_field 'layer_modified_dt asc', label: 'Layer modified date (for API use only)', if: false
+ config.add_sort_field 'score desc, dct_title_sort asc', label: 'relevance'
+ config.add_sort_field "#{Settings.FIELDS.INDEX_YEAR} desc, dct_title_sort asc", label: 'year'
+ config.add_sort_field 'dct_title_sort asc', label: 'title'
+ config.add_sort_field "#{Settings.FIELDS.MODIFIED} asc", label: 'Layer modified date (for API use only)', if: false
# If there are more than this many search results, no spelling ("did you
# mean") suggestion is offered.
@@ -280,17 +309,15 @@ class CatalogController < ApplicationController
config.add_show_tools_partial(:sms, if: :render_sms_action?, callback: :sms_action, validator: :validate_sms_params)
# Custom tools for GeoBlacklight
- # rubocop:disable Layout/LineLength
- config.add_show_tools_partial :web_services, if: proc { |_context, _config, options|
- options[:document] && (Settings.WEBSERVICES_SHOWN & options[:document].references.refs.map { |r| r.type.to_s }).any?
- }
config.add_show_tools_partial :metadata, if: proc { |_context, _config, options|
options[:document] && (Settings.METADATA_SHOWN & options[:document].references.refs.map { |r| r.type.to_s }).any?
}
config.add_show_tools_partial :arcgis, partial: 'arcgis', if: proc { |_context, _config, options|
options[:document] && options[:document].arcgis_urls.present?
}
- # rubocop:enable Layout/LineLength
+ config.add_show_tools_partial :data_dictionary, partial: 'data_dictionary', if: proc { |_context, _config, options|
+ options[:document] && options[:document].data_dictionary_download.present?
+ }
config.show.document_actions.delete(:sms)
# Configure basemap provider
@@ -301,18 +328,21 @@ class CatalogController < ApplicationController
config.autocomplete_path = 'suggest'
end
+ def web_services
+ @response, @documents = action_documents
+
+ respond_to do |format|
+ format.html do
+ return render layout: false if request.xhr?
+ # Otherwise draw the full page
+ end
+ end
+ end
+
##
# Overrides default Blacklight method to return true for an empty q value
# @return [Boolean]
def has_search_parameters?
!params[:q].nil? || super
end
-
- def redirect_from_legacy_id
- if (redirect_id = LegacyIdMap.map[params[:id]])
- redirect_to solr_document_path(redirect_id)
- else
- raise Blacklight::Exceptions::RecordNotFound
- end
- end
end
diff --git a/app/helpers/earthworks_geoblacklight_helper.rb b/app/helpers/earthworks_geoblacklight_helper.rb
index c637c05a..c8f36b02 100644
--- a/app/helpers/earthworks_geoblacklight_helper.rb
+++ b/app/helpers/earthworks_geoblacklight_helper.rb
@@ -6,24 +6,22 @@ def document_available?
(@document.same_institution? && user_signed_in? && @document.available?)
end
- ##
- # Override from GeoBlacklight to include custom `featured` param
- def has_search_parameters?
- params[:featured].present? || super
+ # Override to render multi-valued description as individual paragraphs
+ def render_value_as_truncate_abstract(args)
+ tag.div class: 'truncate-abstract' do
+ Array(args[:value]).flatten.collect { |v| concat tag.p(v) }
+ end
end
- ##
- # Override from GeoBlacklight to include custom `featured` param
- def render_constraints_filters(localized_params = params)
- content = super(localized_params)
- localized_params = localized_params.to_unsafe_h unless localized_params.is_a?(Hash)
-
- if localized_params[:featured]
- value = localized_params[:featured].humanize.split.map(&:capitalize).join(' ')
- path = search_action_path(remove_spatial_filter_group(:featured, localized_params))
- content << render_constraint_element('Featured', value, remove: path)
- end
+ # Try to render a human-readable license description, or fall back to the URI
+ def render_license(args)
+ tag.span @document.license.description
+ rescue License::UnknownLicenseError
+ tag.span args[:value]
+ end
- content
+ # Use Mirador as the IIIF manifest viewer
+ def iiif_manifest_viewer
+ tag.div(nil, id: 'mirador', data: { 'manifest-url' => @document.viewer_endpoint })
end
end
diff --git a/app/jobs/check_layer_job.rb b/app/jobs/check_layer_job.rb
index a209006d..d7c140f9 100644
--- a/app/jobs/check_layer_job.rb
+++ b/app/jobs/check_layer_job.rb
@@ -3,6 +3,7 @@ class CheckLayerJob < ApplicationJob
##
# @param [GeoMonitor::Layer] layer
+ # TODO: migrate this to the geo_monitor gem itself?
def perform(layer)
# See if in Solr first, if not, deactivate and exit
num_found = Blacklight.default_index.connection.get(
diff --git a/app/models/concerns/featured_content_behavior.rb b/app/models/concerns/featured_content_behavior.rb
deleted file mode 100644
index 40786b10..00000000
--- a/app/models/concerns/featured_content_behavior.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-module FeaturedContentBehavior
- extend ActiveSupport::Concern
-
- def add_featured_content(solr_params)
- featured_content_params = send(:"#{blacklight_params[:featured]}_content_params")
- featured_content_params.each do |param|
- solr_params[:fq] ||= []
- solr_params[:fq] << param
- end
-
- solr_params
- rescue NoMethodError
- solr_params
- end
-
- private
-
- # rubocop:disable Layout/LineLength
- def scanned_maps_content_params
- [
- 'layer_geom_type_s:Image OR layer_geom_type_s:"Paper Map"'
- ]
- end
-
- def geospatial_data_content_params
- [
- '-layer_geom_type_s:Image AND -layer_geom_type_s:"Paper Map" AND -layer_geom_type_s:Mixed AND -layer_geom_type_s:Table'
- ]
- end
-
- def census_data_content_params
- [
- 'dc_title_ti:census OR dc_description_ti:census OR dc_publisher_ti:census OR dc_subject_tmi:census'
- ]
- end
-
- def california_data_content_params
- [
- 'dc_title_ti:california OR dc_description_ti:california OR dc_publisher_ti:california OR dc_subject_tmi:california'
- ]
- end
- # rubocop:enable Layout/LineLength
-end
diff --git a/app/models/concerns/license_concern.rb b/app/models/concerns/license_concern.rb
new file mode 100644
index 00000000..5f725796
--- /dev/null
+++ b/app/models/concerns/license_concern.rb
@@ -0,0 +1,12 @@
+# frozen_string_literal: true
+
+# Custom handling for license URIs
+module LicenseConcern
+ extend Geoblacklight::SolrDocument
+
+ # Use the first URI in the license field to create a License object
+ def license
+ license_uris = fetch(:dct_license_sm, [])
+ License.new(url: license_uris.first)
+ end
+end
diff --git a/app/models/concerns/rights_metadata_concern.rb b/app/models/concerns/rights_metadata_concern.rb
deleted file mode 100644
index 87a2e99a..00000000
--- a/app/models/concerns/rights_metadata_concern.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-module RightsMetadataConcern
- extend Geoblacklight::SolrDocument
-
- def rights_metadata
- RightsMetadata.new(fetch(:stanford_rights_metadata_s, {}))
- end
-end
diff --git a/app/models/concerns/status_extension.rb b/app/models/concerns/status_extension.rb
index 2be8bcee..bab1e403 100644
--- a/app/models/concerns/status_extension.rb
+++ b/app/models/concerns/status_extension.rb
@@ -7,7 +7,7 @@ module StatusExtension
def update_index
data = [{
layer_availability_score_f: { set: layer.availability_score },
- layer_slug_s: layer.slug
+ id: layer.id
}]
Indexer.new.solr_update(data)
end
diff --git a/app/models/concerns/wms_rewrite_concern.rb b/app/models/concerns/wms_rewrite_concern.rb
index c8308f6d..28b8b5f9 100644
--- a/app/models/concerns/wms_rewrite_concern.rb
+++ b/app/models/concerns/wms_rewrite_concern.rb
@@ -2,19 +2,11 @@ module WmsRewriteConcern
extend Geoblacklight::SolrDocument
def viewer_endpoint
- if is_stanford_restricted?
+ if stanford? && restricted?
# replace wms prefix with webauthed proxy
super.gsub(%r{.+?(?=/geoserver)}, Settings.PROXY_URL)
else
super
end
end
-
- def is_stanford_restricted?
- stanford? && restricted?
- end
-
- def stanford?
- fetch(:dct_provenance_s).casecmp('stanford').zero?
- end
end
diff --git a/app/models/search_builder.rb b/app/models/search_builder.rb
index c264bc0d..45f022a6 100644
--- a/app/models/search_builder.rb
+++ b/app/models/search_builder.rb
@@ -1,23 +1,5 @@
class SearchBuilder < Blacklight::SearchBuilder
include Blacklight::Solr::SearchBuilderBehavior
include BlacklightRangeLimit::RangeLimitBuilder
-
- include Geoblacklight::SpatialSearchBehavior
- include ::FeaturedContentBehavior
-
- self.default_processor_chain += %i[add_featured_content]
-
- def add_spatial_params(solr_params)
- if blacklight_params[:bbox]
- solr_params[:bq] ||= []
- solr_params[:bq] =
- ["#{Settings.GEOMETRY_FIELD}:\"IsWithin(#{envelope_bounds})\"^300"]
- solr_params[:fq] ||= []
- solr_params[:fq] <<
- "#{Settings.GEOMETRY_FIELD}:\"Intersects(#{envelope_bounds})\""
- end
- solr_params
- rescue Geoblacklight::Exceptions::WrongBoundingBoxFormat
- solr_params
- end
+ include Geoblacklight::SuppressedRecordsSearchBehavior
end
diff --git a/app/models/solr_document.rb b/app/models/solr_document.rb
index c3ea4118..2dfa5414 100644
--- a/app/models/solr_document.rb
+++ b/app/models/solr_document.rb
@@ -1,19 +1,15 @@
class SolrDocument
include Blacklight::Solr::Document
include Geoblacklight::SolrDocument
- include GeomonitorConcern
- include RightsMetadataConcern
+ # include GeomonitorConcern
+ # https://github.com/geoblacklight/geo_monitor/issues/12
include WmsRewriteConcern
+ include LicenseConcern
- # self.unique_key = 'id'
- self.unique_key = 'layer_slug_s'
-
- field_semantics[:author] = :dc_creator_sm
- field_semantics[:title] = :dc_title_s
- field_semantics[:year] = :dct_temporal_sm
+ alias stanford? same_institution?
def institution
- fetch(Settings.FIELDS.PROVENANCE)
+ fetch(Settings.FIELDS.PROVIDER, '')
end
def contact_email
@@ -25,11 +21,11 @@ def department
end
def collection?
- fetch(Settings.FIELDS.GEOM_TYPE, nil) == 'Collection'
+ fetch(Settings.FIELDS.RESOURCE_CLASS, []).include? 'Collections'
end
def mixed?
- fetch(Settings.FIELDS.GEOM_TYPE, nil) == 'Mixed'
+ fetch(Settings.FIELDS.RESOURCE_CLASS, []) == 'Other'
end
# Email uses the semantic field mappings below to generate the body of an email.
diff --git a/app/views/catalog/_home_text.html.erb b/app/views/catalog/_home_text.html.erb
index 2adb81b2..04c808b6 100644
--- a/app/views/catalog/_home_text.html.erb
+++ b/app/views/catalog/_home_text.html.erb
@@ -16,7 +16,7 @@
- <%= link_to search_catalog_path(featured: 'geospatial_data', q: '') do %>
+ <%= link_to search_catalog_path(f: { gbl_resourceClass_sm: ['Datasets']}) do %>
<%= image_tag 'geospatial_data.png', alt: '' %>
Geospatial data
<% end %>
@@ -26,7 +26,7 @@
- <%= link_to search_catalog_path(featured: 'scanned_maps', q: '') do %>
+ <%= link_to search_catalog_path(f: { gbl_resourceClass_sm: ['Maps'] }) do %>
<%= image_tag 'scanned_maps.png', alt: '' %>
Scanned maps
<% end %>
@@ -36,7 +36,7 @@
- <%= link_to search_catalog_path(featured: 'census_data', q: '') do %>
+ <%= link_to search_catalog_path(f: { dct_subject_sm: ['Census']}) do %>
<%= image_tag 'census_data.png', alt: '' %>
Census data
<% end %>
@@ -46,7 +46,7 @@
- <%= link_to search_catalog_path(featured: 'california_data', q: '') do %>
+ <%= link_to search_catalog_path(f: { dct_spatial_sm: ['California'] }) do %>
<%= image_tag 'california_data.png', alt: '' %>
California data
<% end %>
diff --git a/app/views/catalog/_rights_metadata.html.erb b/app/views/catalog/_rights_metadata.html.erb
deleted file mode 100644
index 7b9c3f0d..00000000
--- a/app/views/catalog/_rights_metadata.html.erb
+++ /dev/null
@@ -1,36 +0,0 @@
-<% document ||= @document %>
-
-<% rights_metadata ||= document.rights_metadata %>
-
-
- <% if document.first('stanford_use_and_reproduction_s') %>
- - Use and reproduction
- - <%= document.first('stanford_use_and_reproduction_s') %>
- <% elsif rights_metadata.use_and_reproduction %>
- - Use and reproduction
- - <%= rights_metadata.use_and_reproduction %>
- <% end %>
-
- <% if document.first('stanford_copyright_s') %>
- - Copyright
- - <%= document.first('stanford_copyright_s') %>
- <% elsif rights_metadata.copyright %>
- - Copyright
- - <%= rights_metadata.copyright %>
- <% end %>
-
- <% if document.first('stanford_license_s') %>
- - License
- -
- <%= document.first('stanford_license_s').html_safe %>
-
- <% elsif rights_metadata.license %>
- - License
- -
- <% if rights_metadata.license[:machine] != 'odc-odbl' %>
- <%= image_tag "#{rights_metadata.license[:machine]}.png", class: "earthworks-license earthworks-license-#{rights_metadata.license[:machine]}", alt: "", aria: { hidden: true } %>
- <% end %>
- <%= rights_metadata.license[:human] %>
-
- <% end %>
-
diff --git a/app/views/layouts/blacklight/base.html.erb b/app/views/layouts/blacklight/base.html.erb
index 21ad13ec..77073327 100644
--- a/app/views/layouts/blacklight/base.html.erb
+++ b/app/views/layouts/blacklight/base.html.erb
@@ -15,7 +15,7 @@
gtag('js', new Date());
const config = {};
- <% if Settings.analytics_debug %>
+ <% if Settings.ANALYTICS_DEBUG %>
config.debug_mode = true
<% end %>
@@ -29,6 +29,7 @@
+
<%= javascript_include_tag 'application' %>
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
@@ -44,26 +58,8 @@
-
-
-
+
+
@@ -80,6 +76,9 @@
A Trie based date field for faster date range queries and date faceting. -->
+
+
+
@@ -134,54 +133,65 @@
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
+
-
-
+
+
-
-
-
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/config/solr_configs/solrconfig.xml b/config/solr_configs/solrconfig.xml
index f0ece28f..c06b819d 100644
--- a/config/solr_configs/solrconfig.xml
+++ b/config/solr_configs/solrconfig.xml
@@ -18,7 +18,7 @@
this file, see http://wiki.apache.org/solr/SolrConfigXml.
-->
- 6.1.0
+ 8.11.2
${solr.data.dir:}
@@ -51,8 +51,6 @@
-
-
@@ -109,54 +107,54 @@
0
0.01
*,score
- score desc, dc_title_sort asc
+ score desc, dct_title_sort asc
*:*
text^1
- dc_description_ti^2
- dc_creator_tmi^3
- dc_publisher_ti^3
+ dct_description_ti^2
+ dct_creator_tmi^3
+ dct_publisher_ti^3
dct_isPartOf_tmi^4
- dc_subject_tmi^5
+ dct_subject_tmi^5
dct_spatial_tmi^5
dct_temporal_tmi^5
- dc_title_ti^6
- dc_rights_ti^7
- dct_provenance_ti^8
+ dct_title_ti^6
+ dct_accessRights_ti^7
+ dct_provider_ti^8
layer_geom_type_ti^9
layer_slug_ti^10
- dc_identifier_ti^10
+ dct_identifier_ti^10
text^1
- dc_description_ti^2
- dc_creator_tmi^3
- dc_publisher_ti^3
+ dct_description_ti^2
+ dct_creator_tmi^3
+ dct_publisher_ti^3
dct_isPartOf_tmi^4
- dc_subject_tmi^5
+ dct_subject_tmi^5
dct_spatial_tmi^5
dct_temporal_tmi^5
- dc_title_ti^6
- dc_rights_ti^7
- dct_provenance_ti^8
+ dct_title_ti^6
+ dct_accessRights_ti^7
+ dct_provider_ti^8
layer_geom_type_ti^9
layer_slug_ti^10
- dc_identifier_ti^10
+ dct_identifier_ti^10
true
1
10
dct_isPartOf_sm
- dct_provenance_s
+ schema_provider_s
dct_spatial_sm
- dc_creator_sm
- dc_format_s
- dc_language_s
- dc_publisher_s
- dc_rights_s
- dc_subject_sm
- layer_geom_type_s
- solr_year_i
+ dct_creator_sm
+ dct_format_s
+ dct_language_sm
+ dct_publisher_sm
+ dct_accessRights_s
+ dct_subject_sm
+ locn_geometry_s
+ gbl_indexYear_im
true
diff --git a/lib/earthworks/harvester.rb b/lib/earthworks/harvester.rb
index 7d4b6cb9..d0591f35 100644
--- a/lib/earthworks/harvester.rb
+++ b/lib/earthworks/harvester.rb
@@ -34,9 +34,9 @@ def skip_record?(_record, path)
# We transform some records in order to get more consistent metadata display
# in Earthworks, especially for facets.
def transform_record(record, path)
- # Transform provenance to a shorter, consistent value based on the repository
- if (transformed_provenance = @ogm_repos.dig(record_repo(path), :provenance))
- record.update({ 'dct_provenance_s' => transformed_provenance })
+ # Transform provider name to a shorter, consistent value based on the repository
+ if (transformed_provider = @ogm_repos.dig(record_repo(path), :provider))
+ record.update({ 'schema_provider_s' => transformed_provider })
end
record
diff --git a/lib/legacy_id_map.rb b/lib/legacy_id_map.rb
deleted file mode 100644
index e30d43a3..00000000
--- a/lib/legacy_id_map.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-# frozen_string_literal: true
-
-class LegacyIdMap
- class << self
- def map
- @map ||= YAML.safe_load_file(path)
- end
-
- private
-
- def path
- Rails.root.join('config', 'legacy_id.map')
- end
- end
-end
diff --git a/lib/license.rb b/lib/license.rb
new file mode 100644
index 00000000..5eded02f
--- /dev/null
+++ b/lib/license.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+# This is the license entity used for translating a license URL into text
+# that is rendered on an item's show page
+class License
+ attr_reader :description, :uri
+
+ # Raised when the license provided is not valid
+ class UnknownLicenseError < StandardError; end
+
+ def self.licenses
+ @licenses ||= Rails.application.config_for(:licenses, env: 'production').stringify_keys
+ end
+
+ def initialize(url:)
+ raise UnknownLicenseError unless License.licenses.key?(url)
+
+ attrs = License.licenses.fetch(url)
+ @uri = url
+ @description = attrs.fetch(:description)
+ end
+end
diff --git a/lib/rights_metadata.rb b/lib/rights_metadata.rb
deleted file mode 100644
index f0ee596e..00000000
--- a/lib/rights_metadata.rb
+++ /dev/null
@@ -1,52 +0,0 @@
-class RightsMetadata
- def initialize(rights_metadata)
- @rights_metadata = rights_metadata
- end
-
- def use_and_reproduction
- ng_xml.xpath('//rightsMetadata/use/human[@type="useAndReproduction"]').first.try(:content)
- end
-
- def copyright
- ng_xml.xpath('//rightsMetadata/copyright').first.try(:content)
- end
-
- def license
- cc_license || odc_licence
- end
-
- def ng_xml
- @ng_xml ||= Nokogiri::XML(@rights_metadata)
- end
-
- private
-
- def cc_license
- { human: cc_license_human, machine: cc_license_machine } if cc_license_human.present? && cc_license_machine.present?
- end
-
- def cc_license_machine
- ng_xml.xpath('//rightsMetadata/use/machine[@type="creativeCommons"]').first.try(:content)
- end
-
- def cc_license_human
- ng_xml.xpath('//rightsMetadata/use/human[@type="creativeCommons"]').first.try(:content)
- end
-
- def odc_licence
- return unless odc_licence_human.present? && odc_licence_machine.present?
-
- {
- human: odc_licence_human,
- machine: odc_licence_machine
- }
- end
-
- def odc_licence_human
- ng_xml.xpath('//rightsMetadata/use/human[@type="openDataCommons"]').first.try(:content)
- end
-
- def odc_licence_machine
- ng_xml.xpath('//rightsMetadata/use/machine[@type="openDataCommons"]').first.try(:content)
- end
-end
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 00000000..85bcda40
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,1059 @@
+{
+ "name": "earthworks",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "devDependencies": {
+ "vite": "^5.2.11",
+ "vite-plugin-ruby": "^5.0.0"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz",
+ "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz",
+ "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz",
+ "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz",
+ "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz",
+ "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz",
+ "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz",
+ "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz",
+ "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz",
+ "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz",
+ "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz",
+ "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz",
+ "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz",
+ "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz",
+ "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz",
+ "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz",
+ "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz",
+ "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz",
+ "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz",
+ "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz",
+ "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz",
+ "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz",
+ "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz",
+ "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz",
+ "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz",
+ "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz",
+ "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz",
+ "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz",
+ "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz",
+ "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz",
+ "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz",
+ "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz",
+ "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz",
+ "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz",
+ "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz",
+ "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz",
+ "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz",
+ "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz",
+ "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz",
+ "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+ "dev": true
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz",
+ "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.20.2",
+ "@esbuild/android-arm": "0.20.2",
+ "@esbuild/android-arm64": "0.20.2",
+ "@esbuild/android-x64": "0.20.2",
+ "@esbuild/darwin-arm64": "0.20.2",
+ "@esbuild/darwin-x64": "0.20.2",
+ "@esbuild/freebsd-arm64": "0.20.2",
+ "@esbuild/freebsd-x64": "0.20.2",
+ "@esbuild/linux-arm": "0.20.2",
+ "@esbuild/linux-arm64": "0.20.2",
+ "@esbuild/linux-ia32": "0.20.2",
+ "@esbuild/linux-loong64": "0.20.2",
+ "@esbuild/linux-mips64el": "0.20.2",
+ "@esbuild/linux-ppc64": "0.20.2",
+ "@esbuild/linux-riscv64": "0.20.2",
+ "@esbuild/linux-s390x": "0.20.2",
+ "@esbuild/linux-x64": "0.20.2",
+ "@esbuild/netbsd-x64": "0.20.2",
+ "@esbuild/openbsd-x64": "0.20.2",
+ "@esbuild/sunos-x64": "0.20.2",
+ "@esbuild/win32-arm64": "0.20.2",
+ "@esbuild/win32-ia32": "0.20.2",
+ "@esbuild/win32-x64": "0.20.2"
+ }
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fastq": {
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+ "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
+ "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+ "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
+ "dev": true
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.38",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
+ "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.2.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz",
+ "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "1.0.5"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.18.0",
+ "@rollup/rollup-android-arm64": "4.18.0",
+ "@rollup/rollup-darwin-arm64": "4.18.0",
+ "@rollup/rollup-darwin-x64": "4.18.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.18.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.18.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.18.0",
+ "@rollup/rollup-linux-arm64-musl": "4.18.0",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.18.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.18.0",
+ "@rollup/rollup-linux-x64-gnu": "4.18.0",
+ "@rollup/rollup-linux-x64-musl": "4.18.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.18.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.18.0",
+ "@rollup/rollup-win32-x64-msvc": "4.18.0",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+ "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/vite": {
+ "version": "5.2.11",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz",
+ "integrity": "sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==",
+ "dev": true,
+ "dependencies": {
+ "esbuild": "^0.20.1",
+ "postcss": "^8.4.38",
+ "rollup": "^4.13.0"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^18.0.0 || >=20.0.0",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite-plugin-ruby": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/vite-plugin-ruby/-/vite-plugin-ruby-5.0.0.tgz",
+ "integrity": "sha512-c8PjTp21Ah/ttgnNUyu0qvCXZI08Jr9I24oUKg3TRIRhF5GcOZ++6wtlTCrNFd9COEQbpXHxlRIXd/MEg0iZJw==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.3.4",
+ "fast-glob": "^3.3.2"
+ },
+ "peerDependencies": {
+ "vite": ">=5.0.0"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 00000000..c23fdb0a
--- /dev/null
+++ b/package.json
@@ -0,0 +1,6 @@
+{
+ "devDependencies": {
+ "vite": "^5.2.11",
+ "vite-plugin-ruby": "^5.0.0"
+ }
+}
diff --git a/spec/controllers/catalog_controller_spec.rb b/spec/controllers/catalog_controller_spec.rb
deleted file mode 100644
index 09d70da6..00000000
--- a/spec/controllers/catalog_controller_spec.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-describe CatalogController do
- describe 'Mapping legacy IDs to new ones' do
- it 'redirects from an old ID to a new one (when it does not exist)' do
- get :show, params: { id: 'mit-ao-p2roads-2005' }
-
- expect(response).to redirect_to(solr_document_path('mit-f4b5a2yjdflbi'))
- end
- end
-end
diff --git a/spec/factories/layer.rb b/spec/factories/layer.rb
index fc4110ec..9b452431 100644
--- a/spec/factories/layer.rb
+++ b/spec/factories/layer.rb
@@ -1,5 +1,4 @@
-FactoryBot.define do
- factory :layer, class: 'GeoMonitor::Layer' do
- sequence(:slug) { |n| "institution-#{n}" }
- end
-end
+# https://github.com/geoblacklight/geo_monitor/issues/12
+# FactoryBot.define do
+# factory :layer, class: 'GeoMonitor::Layer'
+# end
diff --git a/spec/features/bookmarks_spec.rb b/spec/features/bookmarks_spec.rb
deleted file mode 100644
index 14224de4..00000000
--- a/spec/features/bookmarks_spec.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-require 'rails_helper'
-
-describe 'Blacklight Bookmarks' do
- it 'index has created bookmarks' do
- skip('Passes locally, not on Travis.') if ENV['CI']
- visit solr_document_path 'columbia-columbia-landinfo-global-aet'
- click_on 'Bookmark'
- visit bookmarks_path
- expect(page).to have_css '.document', count: 1
- end
-end
diff --git a/spec/features/canonical_urls_spec.rb b/spec/features/canonical_urls_spec.rb
index f29a064f..f0a92051 100644
--- a/spec/features/canonical_urls_spec.rb
+++ b/spec/features/canonical_urls_spec.rb
@@ -7,7 +7,7 @@
end
it 'not Stanford' do
- visit solr_document_path 'mit-us-ma-e25zcta5dct-2000'
+ visit solr_document_path 'princeton-02870w62c'
expect(page).to have_no_css 'link[rel="canonical"]', visible: false
end
end
diff --git a/spec/features/copyright_license_spec.rb b/spec/features/copyright_license_spec.rb
deleted file mode 100644
index d0115fc5..00000000
--- a/spec/features/copyright_license_spec.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-require 'rails_helper'
-
-# rubocop:disable Layout/LineLength
-describe 'Use and reproduction, copyright and license' do
- it 'Stanford restricted' do
- visit solr_document_path 'stanford-cg357zz0321'
- expect(page).to have_css 'dt', text: 'Use and reproduction'
- expect(page).to have_css 'dd',
- text: 'These data are licensed by Stanford Libraries and are available to Stanford University affiliates only. Affiliates are limited to current faculty, staff and students. These data may not be reproduced or used for any purpose without permission. For more information please contact brannerlibrary@stanford.edu.'
- expect(page).to have_css 'dt', text: 'Copyright'
- expect(page).to have_css 'dd', text: 'Copyright ownership resides with the originator.'
- end
-
- it 'Stanford public' do
- visit solr_document_path 'stanford-cz128vq0535'
- expect(page).to have_css 'dt', text: 'Use and reproduction'
- expect(page).to have_css 'dd', text: 'This item is in the public domain. There are no restrictions on use.'
- expect(page).to have_css 'dt', text: 'Copyright'
- expect(page).to have_css 'dd',
- text: 'This work is in the Public Domain, meaning that it is not subject to copyright.'
- expect(page).to have_css 'dt', text: 'License'
- expect(page).to have_css 'dd', text: 'Attribution Share Alike 3.0 Unported'
- end
-end
-# rubocop:enable Layout/LineLength
diff --git a/spec/features/custom_featured_searches_spec.rb b/spec/features/custom_featured_searches_spec.rb
deleted file mode 100644
index a5b716bf..00000000
--- a/spec/features/custom_featured_searches_spec.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-require 'rails_helper'
-
-describe 'Custom featured searches' do
- it 'breadcrumbs are present' do
- visit search_catalog_path(q: '', featured: 'geospatial_data')
- expect(page).to have_css '.filter-name', text: 'Featured'
- expect(page).to have_css '.filter-value', text: 'Geospatial Data'
- end
-end
diff --git a/spec/features/facets_spec.rb b/spec/features/facets_spec.rb
deleted file mode 100644
index 4e2fdc42..00000000
--- a/spec/features/facets_spec.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-require 'rails_helper'
-
-describe 'Custom facets' do
- describe 'dc_rights_s' do
- it 'handles a query, but not show up in facet bar' do
- visit search_catalog_path(q: '', f: { dc_rights_s: ['Restricted'] })
- expect(page).to have_no_css '.facet-select', text: 'Rights'
- expect(page).to have_css '.filter-name', text: 'Rights'
- expect(page).to have_css '.document', count: 2
- end
- end
-end
diff --git a/spec/features/license_spec.rb b/spec/features/license_spec.rb
new file mode 100644
index 00000000..dfbe2c11
--- /dev/null
+++ b/spec/features/license_spec.rb
@@ -0,0 +1,33 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+# rubocop:disable Layout/LineLength
+describe 'License rendering' do
+ context 'with a CC license' do
+ it 'renders the human-friendly license description' do
+ visit solr_document_path 'stanford-dy750qs3024'
+ expect(page).to have_css 'dt', text: 'License'
+ expect(page).to have_css 'dd',
+ text: 'This work is licensed under a Creative Commons Attribution Non Commercial 3.0 Unported license (CC BY-NC).'
+ end
+ end
+
+ context 'with an ODC license' do
+ it 'renders the human-friendly license description' do
+ visit solr_document_path 'stanford-cj936rq6257'
+ expect(page).to have_css 'dt', text: 'License'
+ expect(page).to have_css 'dd',
+ text: 'This work is licensed under an Open Data Commons Open Database License v1.0.'
+ end
+ end
+
+ context 'with an unknown license' do
+ it 'renders the license URI' do
+ visit solr_document_path 'harvard-g7064-s2-1834-k3'
+ expect(page).to have_css 'dt', text: 'License'
+ expect(page).to have_css 'dd', text: 'example.com/license'
+ end
+ end
+end
+# rubocop:enable Layout/LineLength
diff --git a/spec/features/page_title_spec.rb b/spec/features/page_title_spec.rb
index c388857e..fcad24fd 100644
--- a/spec/features/page_title_spec.rb
+++ b/spec/features/page_title_spec.rb
@@ -17,6 +17,6 @@
describe 'Show page' do
it 'have title' do
visit solr_document_path 'stanford-cg357zz0321'
- expect(page.title).to eq '10 Meter Countours: Russian River Basin, California in EarthWorks'
+ expect(page.title).to eq '10 Meter Contours: Russian River Basin, California in EarthWorks'
end
end
diff --git a/spec/features/record_spec.rb b/spec/features/record_spec.rb
deleted file mode 100644
index df829298..00000000
--- a/spec/features/record_spec.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-describe 'Record view' do
- it 'does not have empty values indexed' do
- visit solr_document_path('columbia-columbia-landinfo-global-aet')
-
- expect(page).to have_no_css('dt', text: 'Publisher')
- end
-end
diff --git a/spec/features/stanford_new_rights_spec.rb b/spec/features/stanford_new_rights_spec.rb
deleted file mode 100644
index da97b9e6..00000000
--- a/spec/features/stanford_new_rights_spec.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-require 'rails_helper'
-
-describe 'Stanford licenses done the new way' do
- it 'renders page with rights information and the license logo' do
- visit solr_document_path 'stanford-dy750qs3024'
- # rubocop:disable Layout/LineLength
- expect(page).to have_css 'dt', text: 'License'
- expect(page).to have_link 'This work is licensed under a Creative Commons Attribution-Noncommercial 3.0 Unported License',
- href: 'http://creativecommons.org/licenses/by-nc/3.0/'
- expect(page).to have_css 'dt', text: 'Use and reproduction'
- expect(page).to have_css 'dd',
- text: 'Image from the Map Collections courtesy Stanford University Libraries. If you have questions, please contact the Branner Earth Science Library & Map Collections at brannerlibrary@stanford.edu.'
- expect(page).to have_css 'dt', text: 'Copyright'
- expect(page).to have_css 'dd',
- text: 'Property rights reside with the repository. Copyright © Stanford University. All Rights Reserved.'
- # rubocop:enable Layout/LineLength
- end
-end
diff --git a/spec/features/unavailable_layer_spec.rb b/spec/features/unavailable_layer_spec.rb
index 0df85877..a41c8fa2 100644
--- a/spec/features/unavailable_layer_spec.rb
+++ b/spec/features/unavailable_layer_spec.rb
@@ -1,6 +1,6 @@
require 'rails_helper'
-describe 'Unavailable layer' do
+describe 'Unavailable layer', skip: 'needs GBLv4 compatibility' do
it 'hides and shows appropriate messages for geomonitored unavailable' do
visit solr_document_path 'harvard-ntadcd106'
within '.unavailable-warning' do
diff --git a/spec/fixtures/solr_documents/actual-papermap1.json b/spec/fixtures/solr_documents/actual-papermap1.json
index 590d6453..25afc1a6 100644
--- a/spec/fixtures/solr_documents/actual-papermap1.json
+++ b/spec/fixtures/solr_documents/actual-papermap1.json
@@ -1,25 +1,23 @@
{
- "uuid": "urn:arrowsmith.mit.edu:MIT.001145244",
- "dc_description_s": "Panel title. Depths shown by isolines. \"Geological map [copyright] NERC 1996.\" Also available on flat sheet. \"Sheet 1\"--on panel. Includes text, notes, organizations' logos, and ancillary map of \"Orogenic terranes of Britain, Ireland and surrounding seas.\"",
- "dc_format_s": "Paper",
- "dc_identifier_s": "urn:arrowsmith.mit.edu:MIT.001145244",
- "dc_language_s": "English",
- "dc_publisher_s": "British Geological Survey",
- "dc_rights_s": "Public",
- "dc_title_s": "1:1 500 000 series [cartographic material] : tectonic map of Britain, Ireland and adjacent areas / British Geological Survey ; Geological Survey of Ireland ; Geological Survey of Northern Ireland.",
- "dc_type_s": "Dataset",
- "dct_references_s": "{\"http://schema.org/url\":\"http://library.mit.edu/item/001145244\",\"http://www.opengis.net/cat/csw/csdgm\":\"http://opengeometadata.stanford.edu/metadata/org.opengeoportal/MIT:001145244/fgdc.xml\",\"http://www.w3.org/1999/xhtml\":\"http://opengeometadata.stanford.edu/metadata/org.opengeoportal/MIT:001145244/fgdc.html\"}",
- "dct_temporal_sm": [
- "1996"
- ],
- "dct_issued_s": "2000",
- "dct_provenance_s": "MIT",
- "georss_box_s": "49.0 -13.0 62.0 4.0",
- "georss_polygon_s": "62.0 -13.0 62.0 4.0 49.0 4.0 49.0 -13.0 62.0 -13.0",
- "layer_slug_s": "mit-001145244",
- "layer_id_s": "MIT:001145244",
- "layer_geom_type_s": "Paper Map",
- "layer_modified_dt": "2014-12-04T21:32:59Z",
- "solr_geom": "ENVELOPE(-13.0, 4.0, 62.0, 49.0)",
- "solr_year_i": 1996
- }
\ No newline at end of file
+ "dct_description_sm": [
+ "Panel title. Depths shown by isolines. \"Geological map [copyright] NERC 1996.\" Also available on flat sheet. \"Sheet 1\"--on panel. Includes text, notes, organizations' logos, and ancillary map of \"Orogenic terranes of Britain, Ireland and surrounding seas.\""
+ ],
+ "dct_format_s": "Paper",
+ "dct_identifier_sm": ["urn:arrowsmith.mit.edu:MIT.001145244"],
+ "dct_language_sm": ["eng"],
+ "dct_publisher_sm": ["British Geological Survey"],
+ "dct_accessRights_s": "Public",
+ "dct_title_s": "1:1 500 000 series [cartographic material] : tectonic map of Britain, Ireland and adjacent areas / British Geological Survey ; Geological Survey of Ireland ; Geological Survey of Northern Ireland.",
+ "dct_references_s": "{\"http://schema.org/url\":\"http://library.mit.edu/item/001145244\",\"http://www.opengis.net/cat/csw/csdgm\":\"http://opengeometadata.stanford.edu/metadata/org.opengeoportal/MIT:001145244/fgdc.xml\",\"http://www.w3.org/1999/xhtml\":\"http://opengeometadata.stanford.edu/metadata/org.opengeoportal/MIT:001145244/fgdc.html\"}",
+ "dct_temporal_sm": ["1996"],
+ "dct_issued_s": "2000",
+ "schema_provider_s": "MIT",
+ "id": "mit-001145244",
+ "gbl_wxsIdentifier_s": "MIT:001145244",
+ "gbl_mdModified_dt": "2014-12-04T21:32:59Z",
+ "dcat_bbox": "ENVELOPE(-13.0, 4.0, 62.0, 49.0)",
+ "locn_geometry": "ENVELOPE(-13.0, 4.0, 62.0, 49.0)",
+ "gbl_indexYear_im": [1996],
+ "gbl_resourceClass_sm": ["Datasets"],
+ "gbl_mdVersion_s": "Aardvark"
+}
diff --git a/spec/fixtures/solr_documents/actual-point1.json b/spec/fixtures/solr_documents/actual-point1.json
index d0cccdd5..1da2b7ed 100644
--- a/spec/fixtures/solr_documents/actual-point1.json
+++ b/spec/fixtures/solr_documents/actual-point1.json
@@ -1,28 +1,29 @@
{
- "uuid": "urn:columbia.edu:Columbia.landinfo_global_aet",
- "dc_description_s": "Actual Evapotrans is a point theme representing the sum of evaporation and plant transpiration to the atmosphere from throughout the world. Measurements are represented by points at every.5 degrees and provided for every month of the year. This dataset is a part of the Global Climate Database from the Global Change Department National Institute of Public Health and Environmental Protection.",
- "dc_format_s": "Shapefile",
- "dc_identifier_s": "urn:columbia.edu:Columbia.landinfo_global_aet",
- "dc_language_s": "English",
- "dc_rights_s": "Public",
- "dc_title_s": "Actual Evapotrans",
- "dc_publisher_s": "",
- "dc_type_s": "Dataset",
+ "dct_description_sm": [
+ "Actual Evapotrans is a point theme representing the sum of evaporation and plant transpiration to the atmosphere from throughout the world. Measurements are represented by points at every.5 degrees and provided for every month of the year. This dataset is a part of the Global Climate Database from the Global Change Department National Institute of Public Health and Environmental Protection."
+ ],
+ "dct_format_s": "Shapefile",
+ "dct_identifier_sm": ["urn:columbia.edu:Columbia.landinfo_global_aet"],
+ "dct_language_sm": ["eng"],
+ "dct_accessRights_s": "Public",
+ "dct_title_s": "Actual Evapotrans",
+ "dct_publisher_sm": [""],
"dct_references_s": "{\"http://www.opengis.net/cat/csw/csdgm\":\"http://opengeometadata.stanford.edu/metadata/org.opengeoportal/Columbia:Columbia.landinfo_global_aet/fgdc.xml\",\"http://www.w3.org/1999/xhtml\":\"http://opengeometadata.stanford.edu/metadata/org.opengeoportal/Columbia:Columbia.landinfo_global_aet/fgdc.html\"}",
"dct_spatial_sm": [
"World",
"Erat me exerci eorum anteposuerit quam. Liber feugait iis lorem assum imperdiet. Nibh luptatum ipsum quis notare tation. Clari seacula aliquam futurum nunc sed. Lectorum eu lius velit tation lius. Delenit placerat claritas diam hendrerit diam. Dolor vero non nulla anteposuerit imperdiet. Erat me exerci eorum anteposuerit quam. Liber feugait iis lorem assum imperdiet. Nibh luptatum ipsum quis notare tation. Clari seacula aliquam futurum nunc sed. Lectorum eu lius velit tation lius. Delenit placerat claritas diam hendrerit diam. Dolor vero non nulla anteposuerit imperdiet. Erat me exerci eorum anteposuerit quam. Liber feugait iis lorem assum imperdiet. Nibh luptatum ipsum quis notare tation. Clari seacula aliquam futurum nunc sed. Lectorum eu lius velit tation lius. Delenit placerat claritas diam hendrerit diam. Dolor vero non nulla anteposuerit imperdiet. Erat me exerci eorum anteposuerit quam. Liber feugait iis lorem assum imperdiet. Nibh luptatum ipsum quis notare tation. Clari seacula aliquam futurum nunc sed. Lectorum eu lius velit tation lius. Delenit placerat claritas diam hendrerit diam. Dolor vero non nulla anteposuerit imperdiet. Erat me exerci eorum anteposuerit quam. Liber feugait iis lorem assum imperdiet. Nibh luptatum ipsum quis notare tation. Clari seacula aliquam futurum nunc sed. Lectorum eu lius velit tation lius. Delenit placerat claritas diam hendrerit diam. Dolor vero non nulla anteposuerit imperdiet. Erat me exerci eorum anteposuerit quam. Liber feugait iis lorem assum imperdiet. Nibh luptatum ipsum quis notare tation. Clari seacula aliquam futurum nunc sed. Lectorum eu lius velit tation lius. Delenit placerat claritas diam hendrerit diam. Dolor vero non nulla anteposuerit imperdiet. Erat me exerci eorum anteposuerit quam. Liber feugait iis lorem assum imperdiet. Nibh luptatum ipsum quis notare tation. Clari seacula aliquam futurum nunc sed. Lectorum eu lius velit tation lius. Delenit placerat claritas diam hendrerit diam. Dolor vero non nulla anteposuerit imperdiet. Erat me exerci eorum anteposuerit quam. Liber feugait iis lorem assum imperdiet. Nibh luptatum ipsum quis notare tation. Clari seacula aliquam futurum nunc sed. Lectorum eu lius velit tation lius. Delenit placerat claritas diam hendrerit diam. Dolor vero non nulla anteposuerit imperdiet. Erat me exerci eorum anteposuerit quam. Liber feugait iis lorem assum imperdiet. Nibh luptatum ipsum quis notare tation. Clari seacula aliquam futurum nunc sed. Lectorum eu lius velit tation lius. Delenit placerat claritas diam hendrerit diam. Dolor vero non nulla anteposuerit imperdiet. Erat me exerci eorum anteposuerit quam. Liber feugait iis lorem assum imperdiet. Nibh luptatum ipsum quis notare tation. Clari seacula aliquam futurum nunc sed. Lectorum eu lius velit tation lius. Delenit placerat claritas diam hendrerit diam. Dolor vero non nulla anteposuerit imperdiet. Erat me exerci eorum anteposuerit quam. Liber feugait iis lorem assum imperdiet. Nibh luptatum ipsum quis notare tation. Clari seacula aliquam futurum nunc sed. Lectorum eu lius velit tation lius. Delenit placerat claritas diam hendrerit diam. Dolor vero non nulla anteposuerit imperdiet. Erat me exerci eorum anteposuerit quam. Liber feugait iis lorem assum imperdiet. Nibh luptatum ipsum quis notare tation. Clari seacula aliquam futurum nunc sed. Lectorum eu lius velit tation lius. Delenit placerat claritas diam hendrerit diam. Dolor vero non nulla anteposuerit imperdiet."
],
- "dct_temporal_sm": [
- "1996"
- ],
- "dct_provenance_s": "Columbia",
+ "dct_temporal_sm": ["1996"],
+ "schema_provider_s": "Columbia",
"georss_box_s": "-56.0 -179.5 83.0 180.0",
"georss_polygon_s": "83.0 -179.5 83.0 180.0 -56.0 180.0 -56.0 -179.5 83.0 -179.5",
- "layer_slug_s": "columbia-columbia-landinfo-global-aet",
- "layer_id_s": "Columbia:Columbia.landinfo_global_aet",
- "layer_geom_type_s": "Point",
- "layer_modified_dt": "2014-12-12T19:54:57Z",
- "solr_geom": "ENVELOPE(-179.5, 180.0, 83.0, -56.0)",
- "solr_year_i": 1996
+ "id": "columbia-columbia-landinfo-global-aet",
+ "gbl_wxsIdentifier_s": "Columbia:Columbia.landinfo_global_aet",
+ "gbl_mdModified_dt": "2014-12-12T19:54:57Z",
+ "dcat_bbox": "ENVELOPE(-179.5, 180.0, 83.0, -56.0)",
+ "locn_geometry": "ENVELOPE(-179.5, 180.0, 83.0, -56.0)",
+ "gbl_indexYear_im": [1996],
+ "gbl_resourceClass_sm": ["Datasets"],
+ "gbl_resourceType_sm": ["Point data"],
+ "gbl_mdVersion_s": "Aardvark"
}
diff --git a/spec/fixtures/solr_documents/actual-polygon1.json b/spec/fixtures/solr_documents/actual-polygon1.json
index e37462c7..7d3a6f91 100644
--- a/spec/fixtures/solr_documents/actual-polygon1.json
+++ b/spec/fixtures/solr_documents/actual-polygon1.json
@@ -1,25 +1,26 @@
{
- "uuid": "urn:geodata.tufts.edu:Tufts.CambridgeGrid100_04",
- "dc_description_s": "This polygon dataset is a 100 foot grid overlay for Cambridge, MA.",
- "dc_format_s": "Shapefile",
- "dc_identifier_s": "urn:geodata.tufts.edu:Tufts.CambridgeGrid100_04",
- "dc_language_s": "English",
- "dc_publisher_s": "Cambridge (Mass.) Geographic Information Systems",
- "dc_rights_s": "Public",
- "dc_title_s": "100 Foot Grid Cambridge MA 2004",
- "dc_type_s": "Dataset",
- "dct_references_s": "{\"http://www.opengis.net/def/serviceType/ogc/wfs\":\"http://geoserver01.uit.tufts.edu/wfs\",\"http://www.opengis.net/def/serviceType/ogc/wms\":\"http://geoserver01.uit.tufts.edu/wms\",\"http://www.opengis.net/cat/csw/csdgm\":\"http://opengeometadata.stanford.edu/metadata/org.opengeoportal/sde:GISPORTAL.GISOWNER01.CAMBRIDGEGRID100_04/fgdc.xml\",\"http://www.w3.org/1999/xhtml\":\"http://opengeometadata.stanford.edu/metadata/org.opengeoportal/sde:GISPORTAL.GISOWNER01.CAMBRIDGEGRID100_04/fgdc.html\"}",
- "dct_temporal_sm": [
- "2004"
+ "dct_description_sm": [
+ "This polygon dataset is a 100 foot grid overlay for Cambridge, MA."
],
+ "dct_format_s": "Shapefile",
+ "dct_identifier_sm": ["urn:geodata.tufts.edu:Tufts.CambridgeGrid100_04"],
+ "dct_language_sm": ["eng"],
+ "dct_publisher_sm": ["Cambridge (Mass.) Geographic Information Systems"],
+ "dct_accessRights_s": "Public",
+ "dct_title_s": "100 Foot Grid Cambridge MA 2004",
+ "dct_references_s": "{\"http://www.opengis.net/def/serviceType/ogc/wfs\":\"http://geoserver01.uit.tufts.edu/wfs\",\"http://www.opengis.net/def/serviceType/ogc/wms\":\"http://geoserver01.uit.tufts.edu/wms\",\"http://www.opengis.net/cat/csw/csdgm\":\"http://opengeometadata.stanford.edu/metadata/org.opengeoportal/sde:GISPORTAL.GISOWNER01.CAMBRIDGEGRID100_04/fgdc.xml\",\"http://www.w3.org/1999/xhtml\":\"http://opengeometadata.stanford.edu/metadata/org.opengeoportal/sde:GISPORTAL.GISOWNER01.CAMBRIDGEGRID100_04/fgdc.html\"}",
+ "dct_temporal_sm": ["2004"],
"dct_issued_s": "2005",
- "dct_provenance_s": "Tufts",
+ "schema_provider_s": "Tufts",
"georss_box_s": "42.34757 -71.163984 42.408316 -71.052581",
"georss_polygon_s": "42.408316 -71.163984 42.408316 -71.052581 42.34757 -71.052581 42.34757 -71.163984 42.408316 -71.163984",
- "layer_slug_s": "tufts-cambridgegrid100-04",
- "layer_id_s": "sde:GISPORTAL.GISOWNER01.CAMBRIDGEGRID100_04",
- "layer_geom_type_s": "Polygon",
- "layer_modified_dt": "2014-12-04T21:33:07Z",
- "solr_geom": "ENVELOPE(-71.163984, -71.052581, 42.408316, 42.34757)",
- "solr_year_i": 2004
-}
\ No newline at end of file
+ "id": "tufts-cambridgegrid100-04",
+ "gbl_wxsIdentifier_s": "sde:GISPORTAL.GISOWNER01.CAMBRIDGEGRID100_04",
+ "gbl_mdModified_dt": "2014-12-04T21:33:07Z",
+ "dcat_bbox": "ENVELOPE(-71.163984, -71.052581, 42.408316, 42.34757)",
+ "locn_geometry": "ENVELOPE(-71.163984, -71.052581, 42.408316, 42.34757)",
+ "gbl_indexYear_im": [2004],
+ "gbl_resourceClass_sm": ["Datasets"],
+ "gbl_resourceType_sm": ["Polygon data"],
+ "gbl_mdVersion_s": "Aardvark"
+}
diff --git a/spec/fixtures/solr_documents/actual-raster1.json b/spec/fixtures/solr_documents/actual-raster1.json
index 00769480..365b9ddf 100644
--- a/spec/fixtures/solr_documents/actual-raster1.json
+++ b/spec/fixtures/solr_documents/actual-raster1.json
@@ -1,43 +1,39 @@
{
- "uuid": "http://purl.stanford.edu/dp018hs9766",
- "dc_identifier_s": "http://purl.stanford.edu/dp018hs9766",
- "dc_title_s": "1-Meter Shaded Relief Multibeam Bathymetry Image (Color): Elkhorn Slough, California, 2005",
- "dc_description_s": "This layer is a 10-color shaded relief GeoTIFF that contains high-resolution bathymetric data collected from the Elkhorn Slough region of Monterey Bay, California. The survey for Elkhorn Slough was conducted 8/12/2005 - 8/15/2005. Elkhorn Slough, one of the largest remaining coastal wetlands in California, has been directly subjected to tidal scour since the opening of Moss Landing Harbor in 1946. This erosion endangers the habitat of several rare and endangered species and disrupts the wetland ecosystem as a whole. In 2003, the Seafloor Mapping Lab of California State University, Monterey Bay created the most detailed bathymetry model of the Slough to date using a combination of multi-beam sonar, single-beam sonar and aerial photography. This layer was created as part of the California Seafloor Mapping Project.This project was conducted to determine changes in the pattern of erosion and deposition in Elkhorn Slough since surveys conducted in 1993, 2001 and 2003. Marine data offered here represent the efforts of a comprehensive state waters mapping program for California launched by the California State Coastal Conservancy, Ocean Protection Council, Department of Fish and Game, and the NOAA National Marine Sanctuary Program. The ultimate goal is the creation of a high-resolution 1:24,000 scale geologic and habitat base map series covering all of California's 14,500 km2 state waters out to the 3 mile limit, and support of the state's Marine Life Protection Act Initiative (MLPA) goal to create a statewide network of Marine Protected Areas (MPAs). This statewide project requires, involves and leverages expertise from industry, resource management agencies and academia. The tiered mapping campaign involves the use of state-of-the-art sonar, LIDAR (aerial laser) and video seafloor mapping technologies; computer aided classification and visualization; expert geologic and habitat interpretations codified into strip maps spanning California's land/sea boundary; and the creation of an online, publicly accessible data repository for the dissemination of all mapping products.\n",
- "dc_rights_s": "Restricted",
- "dct_provenance_s": "Stanford",
- "dct_references_s": "{\"http://schema.org/url\":\"http://purl.stanford.edu/dp018hs9766\",\"http://schema.org/downloadUrl\":\"http://stacks.stanford.edu/file/druid:dp018hs9766/data.zip\",\"http://www.loc.gov/mods/v3\":\"http://purl.stanford.edu/dp018hs9766.mods\",\"http://www.isotc211.org/schemas/2005/gmd/\":\"http://opengeometadata.stanford.edu/metadata/edu.stanford.purl/druid:dp018hs9766/iso19139.xml\",\"http://www.w3.org/1999/xhtml\":\"http://opengeometadata.stanford.edu/metadata/edu.stanford.purl/druid:dp018hs9766/default.html\",\"http://www.opengis.net/def/serviceType/ogc/wcs\":\"http://kurma-podd1.stanford.edu/geoserver/wcs\",\"http://www.opengis.net/def/serviceType/ogc/wms\":\"http://kurma-podd1.stanford.edu/geoserver/wms\"}",
- "layer_id_s": "druid:dp018hs9766",
- "layer_slug_s": "stanford-dp018hs9766",
- "layer_geom_type_s": "Raster",
- "layer_modified_dt": "2014-12-03T02:15:20Z",
- "dc_format_s": "GeoTIFF",
- "dc_language_s": "English",
- "dc_type_s": "Dataset",
- "dc_publisher_s": "Seafloor Mapping Lab",
- "dc_creator_sm": [
- "Seafloor Mapping Lab"
- ],
- "dc_subject_sm": [
- "Continental margins",
- "Multibeam mapping",
- "Elevation",
- "Imagery and Base Maps",
- "Inland Waters"
- ],
- "dct_issued_s": "2006",
- "dct_temporal_sm": [
- "2005"
- ],
- "dct_spatial_sm": [
- "Elkhorn Slough (Calif.)",
- "Monterey Bay (Calif.)"
- ],
- "dc_relation_sm": [
- "http://sws.geonames.org/5346182/about.rdf",
- "http://sws.geonames.org/5374363/about.rdf"
- ],
- "georss_box_s": "36.8085911 -121.7948738 36.8606925 -121.7389503",
- "georss_polygon_s": "36.8085911 -121.7948738 36.8606925 -121.7948738 36.8606925 -121.7389503 36.8085911 -121.7389503 36.8085911 -121.7948738",
- "solr_geom": "ENVELOPE(-121.7948738, -121.7389503, 36.8606925, 36.8085911)",
- "solr_year_i": 2005
- }
\ No newline at end of file
+ "dct_identifier_sm": ["http://purl.stanford.edu/dp018hs9766"],
+ "dct_title_s": "1-Meter Shaded Relief Multibeam Bathymetry Image (Color): Elkhorn Slough, California, 2005",
+ "dct_description_sm": [
+ "This layer is a 10-color shaded relief GeoTIFF that contains high-resolution bathymetric data collected from the Elkhorn Slough region of Monterey Bay, California. The survey for Elkhorn Slough was conducted 8/12/2005 - 8/15/2005. Elkhorn Slough, one of the largest remaining coastal wetlands in California, has been directly subjected to tidal scour since the opening of Moss Landing Harbor in 1946. This erosion endangers the habitat of several rare and endangered species and disrupts the wetland ecosystem as a whole. In 2003, the Seafloor Mapping Lab of California State University, Monterey Bay created the most detailed bathymetry model of the Slough to date using a combination of multi-beam sonar, single-beam sonar and aerial photography. This layer was created as part of the California Seafloor Mapping Project.This project was conducted to determine changes in the pattern of erosion and deposition in Elkhorn Slough since surveys conducted in 1993, 2001 and 2003. Marine data offered here represent the efforts of a comprehensive state waters mapping program for California launched by the California State Coastal Conservancy, Ocean Protection Council, Department of Fish and Game, and the NOAA National Marine Sanctuary Program. The ultimate goal is the creation of a high-resolution 1:24,000 scale geologic and habitat base map series covering all of California's 14,500 km2 state waters out to the 3 mile limit, and support of the state's Marine Life Protection Act Initiative (MLPA) goal to create a statewide network of Marine Protected Areas (MPAs). This statewide project requires, involves and leverages expertise from industry, resource management agencies and academia. The tiered mapping campaign involves the use of state-of-the-art sonar, LIDAR (aerial laser) and video seafloor mapping technologies; computer aided classification and visualization; expert geologic and habitat interpretations codified into strip maps spanning California's land/sea boundary; and the creation of an online, publicly accessible data repository for the dissemination of all mapping products.\n"
+ ],
+ "dct_accessRights_s": "Restricted",
+ "schema_provider_s": "Stanford",
+ "dct_references_s": "{\"http://schema.org/url\":\"http://purl.stanford.edu/dp018hs9766\",\"http://schema.org/downloadUrl\":\"http://stacks.stanford.edu/file/druid:dp018hs9766/data.zip\",\"http://www.loc.gov/mods/v3\":\"http://purl.stanford.edu/dp018hs9766.mods\",\"http://www.isotc211.org/schemas/2005/gmd/\":\"http://opengeometadata.stanford.edu/metadata/edu.stanford.purl/druid:dp018hs9766/iso19139.xml\",\"http://www.w3.org/1999/xhtml\":\"http://opengeometadata.stanford.edu/metadata/edu.stanford.purl/druid:dp018hs9766/default.html\",\"http://www.opengis.net/def/serviceType/ogc/wcs\":\"http://kurma-podd1.stanford.edu/geoserver/wcs\",\"http://www.opengis.net/def/serviceType/ogc/wms\":\"http://kurma-podd1.stanford.edu/geoserver/wms\"}",
+ "gbl_wxsIdentifier_s": "druid:dp018hs9766",
+ "id": "stanford-dp018hs9766",
+ "gbl_mdModified_dt": "2014-12-03T02:15:20Z",
+ "dct_format_s": "GeoTIFF",
+ "dct_language_sm": ["eng"],
+ "dct_publisher_sm": ["Seafloor Mapping Lab"],
+ "dct_creator_sm": ["Seafloor Mapping Lab"],
+ "dct_subject_sm": [
+ "Continental margins",
+ "Multibeam mapping",
+ "Elevation",
+ "Imagery and Base Maps",
+ "Inland Waters"
+ ],
+ "dct_issued_s": "2006",
+ "dct_temporal_sm": ["2005"],
+ "dct_spatial_sm": ["Elkhorn Slough (Calif.)", "Monterey Bay (Calif.)"],
+ "dc_relation_sm": [
+ "http://sws.geonames.org/5346182/about.rdf",
+ "http://sws.geonames.org/5374363/about.rdf"
+ ],
+ "georss_box_s": "36.8085911 -121.7948738 36.8606925 -121.7389503",
+ "georss_polygon_s": "36.8085911 -121.7948738 36.8606925 -121.7948738 36.8606925 -121.7389503 36.8085911 -121.7389503 36.8085911 -121.7948738",
+ "dcat_bbox": "ENVELOPE(-121.7948738, -121.7389503, 36.8606925, 36.8085911)",
+ "locn_geometry": "ENVELOPE(-121.7948738, -121.7389503, 36.8606925, 36.8085911)",
+ "gbl_indexYear_im": [2005],
+ "gbl_resourceClass_sm": ["Datasets"],
+ "gbl_resourceType_sm": ["Raster data"],
+ "gbl_mdVersion_s": "Aardvark"
+}
diff --git a/spec/fixtures/solr_documents/collection.json b/spec/fixtures/solr_documents/collection.json
index 654063e3..be0b590c 100644
--- a/spec/fixtures/solr_documents/collection.json
+++ b/spec/fixtures/solr_documents/collection.json
@@ -1,31 +1,24 @@
{
- "dc_identifier_s": "http://purl.stanford.edu/bq589tv8583",
- "dc_title_s": "Metropolitan Transportation Commission GIS Maps & Data",
- "dc_description_s": "by Bay Area Metropolitan Transportation Commission These are geospatial data layers acquired from the Bay Area Metropolitan Transportation Commission (MTC) spatial data library. Layers contain feature data related to transportation, administrative boundaries, demographics, environmental factors, census activities, and regional projects. New data layers are added on an ongoing basis.",
- "dc_rights_s": "Public",
- "layer_modified_dt": "2020-03-21T21:39:02Z",
- "dct_issued_s": "c2010",
- "layer_geom_type_s": "Collection",
- "dc_language_s": "English",
- "dc_subject_sm": [
- "Transportation",
- "Boundaries",
- "Census"
- ],
- "dct_spatial_sm": [
- "San Francisco Bay Area",
- "California"
- ],
- "dc_publisher_s": "California. Metropolitan Transportation Commission",
- "dc_creator_sm": [
- "California Metropolitan Transportation Commission"
+ "dct_identifier_sm": ["http://purl.stanford.edu/bq589tv8583"],
+ "dct_title_s": "Metropolitan Transportation Commission GIS Maps & Data",
+ "dct_description_sm": [
+ "by Bay Area Metropolitan Transportation Commission These are geospatial data layers acquired from the Bay Area Metropolitan Transportation Commission (MTC) spatial data library. Layers contain feature data related to transportation, administrative boundaries, demographics, environmental factors, census activities, and regional projects. New data layers are added on an ongoing basis."
],
+ "dct_accessRights_s": "Public",
+ "gbl_mdModified_dt": "2020-03-21T21:39:02Z",
+ "dct_issued_s": "c2010",
+ "dct_language_sm": ["eng"],
+ "dct_subject_sm": ["Transportation", "Boundaries", "Census"],
+ "dct_spatial_sm": ["San Francisco Bay Area", "California"],
+ "dct_publisher_sm": ["California. Metropolitan Transportation Commission"],
+ "dct_creator_sm": ["California Metropolitan Transportation Commission"],
"layer_availability_score_f": 1,
- "geoblacklight_version": "1.0",
+ "gbl_mdVersion_s": "Aardvark",
"dct_references_s": "{\"http://schema.org/url\":\"https://purl.stanford.edu/bq589tv8583\",\"http://www.loc.gov/mods/v3\":\"https://purl.stanford.edu/bq589tv8583.mods\"}",
- "solr_geom": "ENVELOPE(-123.10749999999999, -122.32777777777777, 37.92972222222222, 37.69333333333333)",
- "layer_slug_s": "stanford-bq589tv8583",
- "dct_provenance_s": "Stanford",
- "stanford_rights_metadata_s": "\n \n \n \n \n \n \n \n \n \n \n \n \n This work is in the Public Domain, meaning that it is not subject to copyright.\n \n ",
- "solr_year_i": 2010
+ "dcat_bbox": "ENVELOPE(-123.10749999999999, -122.32777777777777, 37.92972222222222, 37.69333333333333)",
+ "locn_geometry": "ENVELOPE(-123.10749999999999, -122.32777777777777, 37.92972222222222, 37.69333333333333)",
+ "id": "stanford-bq589tv8583",
+ "schema_provider_s": "Stanford",
+ "gbl_indexYear_im": [2010],
+ "gbl_resourceClass_sm": ["Other"]
}
diff --git a/spec/fixtures/solr_documents/harvard-unavailable.json b/spec/fixtures/solr_documents/harvard-unavailable.json
index 43d026e8..87cccaac 100644
--- a/spec/fixtures/solr_documents/harvard-unavailable.json
+++ b/spec/fixtures/solr_documents/harvard-unavailable.json
@@ -1,25 +1,26 @@
{
- "uuid":"urn:hul.harvard.edu:HARVARD.SDE.NTADCD106",
- "dc_description_s":"The 106th Congressional District Boundaries data set contains geographic information for the political entities of the Congressional districts of the United States and U.S. Territories.",
- "dc_format_s":"Shapefile",
- "dc_identifier_s":"urn:hul.harvard.edu:HARVARD.SDE.NTADCD106",
- "dc_language_s":"English",
- "dc_publisher_s":"Bureau of Transportation Statistics",
- "dc_rights_s":"Public",
- "dc_title_s":"106th Congressional District Boundaries",
- "dc_type_s":"Dataset",
- "dct_references_s":"{\"http://www.opengis.net/def/serviceType/ogc/wfs\":\"http://hgl.harvard.edu:8080/geoserver/wfs\",\"http://www.opengis.net/def/serviceType/ogc/wms\":\"http://hgl.harvard.edu:8080/geoserver/wms\",\"http://schema.org/UserDownloads\":\"http://hgl.harvard.edu:8080/HGL/RemoteServiceStarter\",\"http://tilecache.org\":\"http://hgl.harvard.edu/cgi-bin/tilecache/tilecache.cgi\",\"http://www.opengis.net/cat/csw/csdgm\":\"http://opengeometadata.stanford.edu/metadata/org.opengeoportal/sde:SDE.NTADCD106/fgdc.xml\",\"http://www.w3.org/1999/xhtml\":\"http://opengeometadata.stanford.edu/metadata/org.opengeoportal/sde:SDE.NTADCD106/fgdc.html\",\"http://schema.org/url\":\"http://opengeometadata.stanford.edu/metadata/org.opengeoportal/sde:SDE.NTADCD106/fgdc.html\"}",
- "dct_temporal_sm":[
- "1999"
+ "dct_description_sm": [
+ "The 106th Congressional District Boundaries data set contains geographic information for the political entities of the Congressional districts of the United States and U.S. Territories."
],
- "dct_provenance_s":"Harvard",
- "georss_box_s":"-14.602623 -179.149436 71.331916 179.759346",
- "georss_polygon_s":"71.331916 -179.149436 71.331916 179.759346 -14.602623 179.759346 -14.602623 -179.149436 71.331916 -179.149436",
- "layer_slug_s":"harvard-ntadcd106",
- "layer_id_s":"sde:SDE.NTADCD106",
- "layer_geom_type_s":"Polygon",
- "layer_modified_dt":"2014-12-16T00:47:27Z",
- "solr_geom":"ENVELOPE(-179.149436, 179.759346, 71.331916, -14.602623)",
- "solr_year_i":1999,
- "layer_availability_score_f":0.0
-}
\ No newline at end of file
+ "dct_format_s": "Shapefile",
+ "dct_identifier_sm": ["urn:hul.harvard.edu:HARVARD.SDE.NTADCD106"],
+ "dct_language_sm": ["eng"],
+ "dct_publisher_sm": ["Bureau of Transportation Statistics"],
+ "dct_accessRights_s": "Public",
+ "dct_title_s": "106th Congressional District Boundaries",
+ "dct_references_s": "{\"http://www.opengis.net/def/serviceType/ogc/wfs\":\"http://hgl.harvard.edu:8080/geoserver/wfs\",\"http://www.opengis.net/def/serviceType/ogc/wms\":\"http://hgl.harvard.edu:8080/geoserver/wms\",\"http://schema.org/UserDownloads\":\"http://hgl.harvard.edu:8080/HGL/RemoteServiceStarter\",\"http://tilecache.org\":\"http://hgl.harvard.edu/cgi-bin/tilecache/tilecache.cgi\",\"http://www.opengis.net/cat/csw/csdgm\":\"http://opengeometadata.stanford.edu/metadata/org.opengeoportal/sde:SDE.NTADCD106/fgdc.xml\",\"http://www.w3.org/1999/xhtml\":\"http://opengeometadata.stanford.edu/metadata/org.opengeoportal/sde:SDE.NTADCD106/fgdc.html\",\"http://schema.org/url\":\"http://opengeometadata.stanford.edu/metadata/org.opengeoportal/sde:SDE.NTADCD106/fgdc.html\"}",
+ "dct_temporal_sm": ["1999"],
+ "schema_provider_s": "Harvard",
+ "georss_box_s": "-14.602623 -179.149436 71.331916 179.759346",
+ "georss_polygon_s": "71.331916 -179.149436 71.331916 179.759346 -14.602623 179.759346 -14.602623 -179.149436 71.331916 -179.149436",
+ "id": "harvard-ntadcd106",
+ "gbl_wxsIdentifier_s": "sde:SDE.NTADCD106",
+ "gbl_mdModified_dt": "2014-12-16T00:47:27Z",
+ "dcat_bbox": "ENVELOPE(-179.149436, 179.759346, 71.331916, -14.602623)",
+ "locn_geometry": "ENVELOPE(-179.149436, 179.759346, 71.331916, -14.602623)",
+ "gbl_indexYear_im": [1999],
+ "layer_availability_score_f": 0.0,
+ "gbl_resourceClass_sm": ["Datasets"],
+ "gbl_resourceType_sm": ["Polygon data"],
+ "gbl_mdVersion_s": "Aardvark"
+}
diff --git a/spec/fixtures/solr_documents/harvard_raster.json b/spec/fixtures/solr_documents/harvard_raster.json
index e73294b5..d7a93d4a 100644
--- a/spec/fixtures/solr_documents/harvard_raster.json
+++ b/spec/fixtures/solr_documents/harvard_raster.json
@@ -1,12 +1,14 @@
{
- "uuid": "urn:hul.harvard.edu:HARVARD.SDE2.G7064_S2_1834_K3",
- "dc_description_s": "This layer is a georeferenced raster image of the historic paper map entitled: [Karta mesta zanimaemago Sanktpeterburgom : v tom vide v kakom onoe nakhodilos' za god do osnovaniia goroda; sostavlena dlia panoramy S. Peterburga, 1834]. It was published in 1834. Scale [ca. 1:76,000]. Covers Saint Petersburg Region, Russia. Map in Russian and Swedish.\n\nThe image inside the map neatline is georeferenced to the surface of the earth and fit to the 'Pulkovo 1995 Gauss Kruger Zone 6N' coordinate system. All map collar and inset information is also available as part of the raster image, including any inset maps, profiles, statistical tables, directories, text, illustrations, index maps, legends, or other information associated with the principal map.\n\nThis map shows features such as roads, drainage, built-up areas and selected buildings, ground cover, and more. Relief is shown by hachures. Depths shown by soundings. Includes insets: [Retusari island] -- [Sluselberg]. \n\nThis layer is part of a selection of digitally scanned and georeferenced historic maps from The Harvard Map Collection as part of the Imaging the Urban Environment project. Maps selected for this project represent major urban areas and cities of the world, at various time periods. These maps typically portray both natural and manmade features at a large scale. The selection represents a range of regions, originators, ground condition dates, scales, and purposes.",
- "dc_format_s": "GeoTIFF",
- "dc_identifier_s": "urn:hul.harvard.edu:HARVARD.SDE2.G7064_S2_1834_K3",
- "dc_language_s": "English",
- "dc_publisher_s": "Harvard Map Collection, Harvard College Library",
- "dc_rights_s": "Public",
- "dc_subject_sm": [
+ "dct_description_sm": [
+ "This layer is a georeferenced raster image of the historic paper map entitled: [Karta mesta zanimaemago Sanktpeterburgom : v tom vide v kakom onoe nakhodilos' za god do osnovaniia goroda; sostavlena dlia panoramy S. Peterburga, 1834]. It was published in 1834. Scale [ca. 1:76,000]. Covers Saint Petersburg Region, Russia. Map in Russian and Swedish.\n\nThe image inside the map neatline is georeferenced to the surface of the earth and fit to the 'Pulkovo 1995 Gauss Kruger Zone 6N' coordinate system. All map collar and inset information is also available as part of the raster image, including any inset maps, profiles, statistical tables, directories, text, illustrations, index maps, legends, or other information associated with the principal map.\n\nThis map shows features such as roads, drainage, built-up areas and selected buildings, ground cover, and more. Relief is shown by hachures. Depths shown by soundings. Includes insets: [Retusari island] -- [Sluselberg]. \n\nThis layer is part of a selection of digitally scanned and georeferenced historic maps from The Harvard Map Collection as part of the Imaging the Urban Environment project. Maps selected for this project represent major urban areas and cities of the world, at various time periods. These maps typically portray both natural and manmade features at a large scale. The selection represents a range of regions, originators, ground condition dates, scales, and purposes."
+ ],
+ "dct_format_s": "GeoTIFF",
+ "dct_identifier_sm": ["urn:hul.harvard.edu:HARVARD.SDE2.G7064_S2_1834_K3"],
+ "dct_language_sm": ["eng"],
+ "dct_publisher_sm": ["Harvard Map Collection, Harvard College Library"],
+ "dct_accessRights_s": "Public",
+ "dct_license_sm": ["example.com/license"],
+ "dct_subject_sm": [
"Maps",
"Human",
"settlements",
@@ -24,24 +26,22 @@
"water",
"imageryBaseMapsEarthCover"
],
- "dc_title_s": "Saint Petersburg Region, Russia, 1834 (Raster Image)",
- "dc_type_s": "Dataset",
+ "dct_title_s": "Saint Petersburg Region, Russia, 1834 (Raster Image)",
"dct_references_s": "{\"http://schema.org/DownloadAction\":\"http://hgl.harvard.edu:8080/HGL/HGLOpenDelivery\",\"http://www.opengis.net/def/serviceType/ogc/wcs\":\"http://hgl.harvard.edu:8080/geoserver/wcs\",\"http://www.opengis.net/def/serviceType/ogc/wms\":\"http://hgl.harvard.edu:8080/geoserver/wms\"}",
- "dct_spatial_sm": [
- "Russia Saint Petersburg"
- ],
- "dct_temporal_sm": [
- "1834"
- ],
+ "dct_spatial_sm": ["Russia Saint Petersburg"],
+ "dct_temporal_sm": ["1834"],
"dct_issued_s": "2000",
- "dct_provenance_s": "Harvard",
+ "schema_provider_s": "Harvard",
"georss_box_s": "59.669749 30.013108 60.041712 30.875309",
"georss_polygon_s": "60.041712 30.013108 60.041712 30.875309 59.669749 30.875309 59.669749 30.013108 60.041712 30.013108",
- "layer_slug_s": "harvard-g7064-s2-1834-k3",
- "layer_id_s": "cite:SDE2.G7064_S2_1834_K3",
- "layer_geom_type_s": "Raster",
- "layer_modified_dt": "2014-05-27T18:09:36Z",
- "solr_geom": "ENVELOPE(30.013108, 30.875309, 60.041712, 59.669749)",
- "solr_year_i": 1834,
- "solr_issued_dt": "2000-01-01T00:00:00Z"
-}
\ No newline at end of file
+ "id": "harvard-g7064-s2-1834-k3",
+ "gbl_wxsIdentifier_s": "cite:SDE2.G7064_S2_1834_K3",
+ "gbl_mdModified_dt": "2014-05-27T18:09:36Z",
+ "dcat_bbox": "ENVELOPE(30.013108, 30.875309, 60.041712, 59.669749)",
+ "locn_geometry": "ENVELOPE(30.013108, 30.875309, 60.041712, 59.669749)",
+ "gbl_indexYear_im": [1834],
+ "solr_issued_dt": "2000-01-01T00:00:00Z",
+ "gbl_resourceClass_sm": ["Datasets"],
+ "gbl_resourceType_sm": ["Raster data"],
+ "gbl_mdVersion_s": "Aardvark"
+}
diff --git a/spec/fixtures/solr_documents/part_of_collection.json b/spec/fixtures/solr_documents/part_of_collection.json
index 96209618..96f53891 100644
--- a/spec/fixtures/solr_documents/part_of_collection.json
+++ b/spec/fixtures/solr_documents/part_of_collection.json
@@ -1,22 +1,18 @@
{
- "dc_creator_sm": [
- "California. Metropolitan Transportation Commission"
+ "dct_creator_sm": ["California. Metropolitan Transportation Commission"],
+ "dct_description_sm": [
+ "This line shapefile represents high-occupancy vehicle (HOV) lanes within the San Francisco Bay Area of California. An HOV lane (also known as carpool lane) is a restricted traffic lane reserved at peak travel times or longer for the exclusive use of vehicles with a driver and one or more passengers, including carpools, vanpools, and transit buses. This layer is part of the Bay Area Metropolitan Transportation Commission (MTC) GIS Maps and Data collection.This dataset is intended for researchers, students, and policy makers for reference and mapping purposes, and may be used for basic applications such as viewing, querying, and map output production, or to provide a basemap to support graphical overlays and analysis with other spatial data."
],
- "dc_description_s": "This line shapefile represents high-occupancy vehicle (HOV) lanes within the San Francisco Bay Area of California. An HOV lane (also known as carpool lane) is a restricted traffic lane reserved at peak travel times or longer for the exclusive use of vehicles with a driver and one or more passengers, including carpools, vanpools, and transit buses. This layer is part of the Bay Area Metropolitan Transportation Commission (MTC) GIS Maps and Data collection.This dataset is intended for researchers, students, and policy makers for reference and mapping purposes, and may be used for basic applications such as viewing, querying, and map output production, or to provide a basemap to support graphical overlays and analysis with other spatial data.",
- "dc_format_s": "Shapefile",
- "dc_identifier_s": "http://purl.stanford.edu/mc977kq8162",
- "dc_language_s": "English",
- "dc_publisher_s": "California. Metropolitan Transportation Commission",
- "dc_rights_s": "Public",
- "dc_subject_sm": [
- "High occupancy vehicle lanes",
- "Transportation"
- ],
- "dc_source_sm": ["stanford-bq589tv8583"],
- "dc_title_s": "HOV Lanes, San Francisco Bay Area, 2002",
- "dc_type_s": "Dataset",
+ "dct_format_s": "Shapefile",
+ "dct_identifier_sm": ["http://purl.stanford.edu/mc977kq8162"],
+ "dct_language_sm": ["eng"],
+ "dct_publisher_sm": ["California. Metropolitan Transportation Commission"],
+ "dct_accessRights_s": "Public",
+ "dct_subject_sm": ["High occupancy vehicle lanes", "Transportation"],
+ "pcdm_memberOf_sm": ["stanford-bq589tv8583"],
+ "dct_title_s": "HOV Lanes, San Francisco Bay Area, 2002",
"dct_issued_s": "2002",
- "dct_provenance_s": "Stanford",
+ "schema_provider_s": "Stanford",
"dct_references_s": "{\"http://schema.org/url\":\"http://purl.stanford.edu/mc977kq8162\",\"http://schema.org/downloadUrl\":\"http://stacks.stanford.edu/file/druid:mc977kq8162/data.zip\",\"http://www.loc.gov/mods/v3\":\"http://purl.stanford.edu/mc977kq8162.mods\",\"http://www.isotc211.org/schemas/2005/gmd/\":\"https://raw.githubusercontent.com/OpenGeoMetadata/edu.stanford.purl/master/mc/977/kq/8162/iso19139.xml\",\"http://www.opengis.net/def/serviceType/ogc/wfs\":\"https://geowebservices.stanford.edu/geoserver/wfs\",\"http://www.opengis.net/def/serviceType/ogc/wms\":\"https://geowebservices.stanford.edu/geoserver/wms\"}",
"dct_spatial_sm": [
"San Francisco Bay Area (Calif.)",
@@ -30,16 +26,15 @@
"Marin County (Calif.)",
"Alameda County (Calif.)"
],
- "dct_temporal_sm": [
- "2002"
- ],
- "geoblacklight_version": "1.0",
+ "dct_temporal_sm": ["2002"],
+ "gbl_mdVersion_s": "Aardvark",
"layer_availability_score_f": 1,
- "layer_geom_type_s": "Line",
- "layer_id_s": "druid:mc977kq8162",
- "layer_modified_dt": "2016-02-04T00:03:29Z",
- "layer_slug_s": "stanford-mc977kq8162",
- "solr_geom": "ENVELOPE(-122.54625, -121.751457, 38.080099, 37.239303)",
- "solr_year_i": 2002,
- "stanford_rights_metadata_s": "\n\n \n \n \n \n \n \n \n \n \n \n \n \n This work is in the Public Domain, meaning that it is not subject to copyright.\n \n\n"
+ "gbl_wxsIdentifier_s": "druid:mc977kq8162",
+ "gbl_mdModified_dt": "2016-02-04T00:03:29Z",
+ "id": "stanford-mc977kq8162",
+ "dcat_bbox": "ENVELOPE(-122.54625, -121.751457, 38.080099, 37.239303)",
+ "locn_geometry": "ENVELOPE(-122.54625, -121.751457, 38.080099, 37.239303)",
+ "gbl_indexYear_im": [2002],
+ "gbl_resourceClass_sm": ["Datasets"],
+ "gbl_resourceType_sm": ["Line data"]
}
diff --git a/spec/fixtures/solr_documents/public-stanford.json b/spec/fixtures/solr_documents/public-stanford.json
index c3f54b22..b6d92485 100644
--- a/spec/fixtures/solr_documents/public-stanford.json
+++ b/spec/fixtures/solr_documents/public-stanford.json
@@ -1,39 +1,36 @@
{
- "uuid":"http://purl.stanford.edu/cz128vq0535",
- "dc_identifier_s":"http://purl.stanford.edu/cz128vq0535",
- "dc_title_s":"2005 Rural Poverty GIS Database: Uganda",
- "dc_description_s":"This polygon shapefile contains 2005 poverty data for 855 rural subcounties in Uganda. These data are intended for researchers, students, policy makers and the general public for reference and mapping purposes, and may be used for basic applications such as viewing, querying, and map output production.",
- "dc_rights_s":"Public",
- "dct_provenance_s":"Stanford",
- "dct_references_s":"{\"http://schema.org/url\":\"http://purl.stanford.edu/cz128vq0535\",\"http://schema.org/downloadUrl\":\"http://stacks.stanford.edu/file/druid:cz128vq0535/data.zip\",\"http://www.loc.gov/mods/v3\":\"http://purl.stanford.edu/cz128vq0535.mods\",\"http://www.isotc211.org/schemas/2005/gmd/\":\"http://opengeometadata.stanford.edu/metadata/edu.stanford.purl/druid:cz128vq0535/iso19139.xml\",\"http://www.w3.org/1999/xhtml\":\"http://opengeometadata.stanford.edu/metadata/edu.stanford.purl/druid:cz128vq0535/default.html\",\"http://www.opengis.net/def/serviceType/ogc/wfs\":\"https://geowebservices.stanford.edu/geoserver/wfs\",\"http://www.opengis.net/def/serviceType/ogc/wms\":\"https://geowebservices.stanford.edu/geoserver/wms\"}",
- "layer_id_s":"druid:cz128vq0535",
- "layer_slug_s":"stanford-cz128vq0535",
- "layer_geom_type_s":"Polygon",
- "layer_modified_dt":"2015-01-13T18:46:38Z",
- "dc_format_s":"Shapefile",
- "dc_language_s":"English",
- "dc_type_s":"Dataset",
- "dc_publisher_s":"Uganda Bureau of Statistics",
- "dc_creator_sm":[
- "Uganda Bureau of Statistics"
+ "id": ["stanford-cz128vq0535"],
+ "dct_title_s": "2005 Rural Poverty GIS Database: Uganda",
+ "dct_description_sm": [
+ "This polygon shapefile contains 2005 poverty data for 855 rural subcounties in Uganda.",
+ "These data are intended for researchers, students, policy makers and the general public for reference and mapping purposes, and may be used for basic applications such as viewing, querying, and map output production."
],
- "dc_subject_sm":[
- "Poverty",
- "Statistics"
+ "dct_language_sm": ["eng"],
+ "dct_creator_sm": ["Uganda Bureau of Statistics"],
+ "dct_publisher_sm": ["Uganda Bureau of Statistics"],
+ "dct_issued_s": "2005",
+ "dct_subject_sm": ["Poverty", "Statistics"],
+ "dct_spatial_sm": ["Uganda"],
+ "dct_temporal_sm": ["2005"],
+ "gbl_dateRange_drsim": ["[2005 TO 2005]"],
+ "gbl_indexYear_im": [2005],
+ "schema_provider_s": "Stanford",
+ "dct_identifier_sm": ["https://purl.stanford.edu/cz128vq0535"],
+ "gbl_resourceClass_sm": ["Datasets"],
+ "gbl_resourceType_sm": ["Polygon data"],
+ "dct_format_s": "Shapefile",
+ "locn_geometry": "ENVELOPE(29.572742, 35.000308, 4.234077, -1.478794)",
+ "dcat_bbox": "ENVELOPE(29.572742, 35.000308, 4.234077, -1.478794)",
+ "pcdm_memberOf_sm": ["stanford-rb371kw9607"],
+ "dct_rights_sm": [
+ "This item is in the public domain. There are no restrictions on use."
],
- "dct_issued_s":"2005",
- "dct_temporal_sm":[
- "2005"
+ "dct_rightsHolder_sm": [
+ "This work is in the Public Domain, meaning that it is not subject to copyright."
],
- "dct_spatial_sm":[
- "Uganda"
- ],
- "dc_relation_sm":[
- "http://sws.geonames.org/226074/about.rdf"
- ],
- "georss_box_s":"-1.478794 29.572742 4.234077 35.000308",
- "georss_polygon_s":"-1.478794 29.572742 4.234077 29.572742 4.234077 35.000308 -1.478794 35.000308 -1.478794 29.572742",
- "solr_geom":"ENVELOPE(29.572742, 35.000308, 4.234077, -1.478794)",
- "solr_year_i":2005,
- "stanford_rights_metadata_s": "<\/machine><\/access><\/machine><\/access>