arclight 0.4.0 → 1.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.eslintrc +11 -4
- data/.github/workflows/ruby.yml +37 -15
- data/.gitignore +1 -0
- data/.rspec +0 -1
- data/.rubocop.yml +498 -21
- data/.rubocop_todo.yml +69 -86
- data/.solr_wrapper +2 -1
- data/CONTRIBUTING.md +5 -5
- data/CONTRIBUTORS.md +1 -1
- data/Gemfile +15 -10
- data/README.md +20 -16
- data/app/assets/javascripts/arclight/arclight.js +4 -8
- data/app/assets/javascripts/arclight/oembed_controller.js +58 -0
- data/app/assets/javascripts/arclight/truncate_controller.js +27 -0
- data/app/assets/stylesheets/arclight/application.scss +2 -5
- data/app/assets/stylesheets/arclight/build.scss +4 -0
- data/app/assets/stylesheets/arclight/modules/hierarchy_and_online_contents.scss +108 -130
- data/app/assets/stylesheets/arclight/modules/icons.scss +19 -3
- data/app/assets/stylesheets/arclight/modules/layout.scss +129 -99
- data/app/assets/stylesheets/arclight/modules/mastheads.scss +23 -96
- data/app/assets/stylesheets/arclight/modules/repositories.scss +2 -2
- data/app/assets/stylesheets/arclight/modules/repository_card.scss +4 -48
- data/app/assets/stylesheets/arclight/modules/search_form.scss +9 -0
- data/app/assets/stylesheets/arclight/modules/search_results.scss +95 -45
- data/app/assets/stylesheets/arclight/modules/show_collection.scss +5 -32
- data/app/assets/stylesheets/arclight/modules/truncator.scss +58 -0
- data/app/assets/stylesheets/arclight/variables.scss +7 -4
- data/app/components/arclight/access_component.html.erb +14 -0
- data/app/components/arclight/access_component.rb +25 -0
- data/app/components/arclight/bookmark_component.html.erb +25 -0
- data/app/components/arclight/bookmark_component.rb +9 -0
- data/app/components/arclight/breadcrumb_component.rb +50 -0
- data/app/components/arclight/breadcrumbs_hierarchy_component.html.erb +34 -0
- data/app/components/arclight/breadcrumbs_hierarchy_component.rb +25 -0
- data/app/components/arclight/collection_context_component.html.erb +12 -0
- data/app/components/arclight/collection_context_component.rb +27 -0
- data/app/components/arclight/collection_info_component.html.erb +28 -0
- data/app/components/arclight/collection_info_component.rb +26 -0
- data/app/components/arclight/collection_sidebar_component.html.erb +15 -0
- data/app/components/arclight/collection_sidebar_component.rb +39 -0
- data/app/{views/catalog/_search_results_repository.html.erb → components/arclight/constraints_component.html.erb} +2 -1
- data/app/components/arclight/constraints_component.rb +17 -0
- data/app/components/arclight/document_collection_context_component.html.erb +29 -0
- data/app/components/arclight/document_collection_context_component.rb +28 -0
- data/app/components/arclight/document_collection_hierarchy_component.html.erb +50 -0
- data/app/components/arclight/document_collection_hierarchy_component.rb +62 -0
- data/app/components/arclight/document_component.html.erb +39 -0
- data/app/components/arclight/document_component.rb +49 -0
- data/app/components/arclight/document_components_hierarchy_component.html.erb +20 -0
- data/app/components/arclight/document_components_hierarchy_component.rb +34 -0
- data/app/components/arclight/document_download_component.html.erb +24 -0
- data/app/components/arclight/document_download_component.rb +71 -0
- data/app/components/arclight/embed_component.html.erb +10 -0
- data/app/components/arclight/embed_component.rb +43 -0
- data/app/components/arclight/expand_hierarchy_button_component.html.erb +5 -0
- data/app/components/arclight/expand_hierarchy_button_component.rb +16 -0
- data/app/components/arclight/group_component.html.erb +34 -0
- data/app/components/arclight/group_component.rb +23 -0
- data/app/components/arclight/header_component.html.erb +5 -0
- data/app/components/arclight/header_component.rb +10 -0
- data/app/components/arclight/index_metadata_field_component.html.erb +16 -0
- data/app/components/arclight/index_metadata_field_component.rb +20 -0
- data/app/components/arclight/masthead_component.html.erb +17 -0
- data/app/components/arclight/masthead_component.rb +10 -0
- data/app/components/arclight/metadata_section_component.html.erb +13 -0
- data/app/components/arclight/metadata_section_component.rb +22 -0
- data/app/components/arclight/oembed_viewer_component.html.erb +5 -0
- data/app/components/arclight/oembed_viewer_component.rb +16 -0
- data/app/components/arclight/online_content_filter_component.html.erb +15 -0
- data/app/components/arclight/online_content_filter_component.rb +17 -0
- data/app/components/arclight/online_status_indicator_component.rb +19 -0
- data/app/components/arclight/repository_breadcrumb_component.html.erb +10 -0
- data/app/components/arclight/repository_breadcrumb_component.rb +17 -0
- data/app/components/arclight/repository_location_component.html.erb +20 -0
- data/app/components/arclight/repository_location_component.rb +10 -0
- data/app/components/arclight/search_bar_component.html.erb +27 -0
- data/app/components/arclight/search_bar_component.rb +32 -0
- data/app/components/arclight/search_result_breadcrumbs_component.html.erb +6 -0
- data/app/components/arclight/search_result_breadcrumbs_component.rb +37 -0
- data/app/components/arclight/search_result_component.html.erb +20 -0
- data/app/components/arclight/search_result_component.rb +18 -0
- data/app/components/arclight/search_result_title_component.html.erb +15 -0
- data/app/components/arclight/search_result_title_component.rb +15 -0
- data/app/components/arclight/sidebar_component.html.erb +9 -0
- data/app/components/arclight/sidebar_component.rb +19 -0
- data/app/components/arclight/upper_metadata_layout_component.rb +10 -0
- data/app/components/blacklight/icons/bookmark_component.rb +12 -0
- data/app/components/blacklight/icons/collection_component.rb +14 -0
- data/app/components/blacklight/icons/compact_component.rb +12 -0
- data/app/components/blacklight/icons/container_component.rb +14 -0
- data/app/components/blacklight/icons/ead_component.rb +12 -0
- data/app/components/blacklight/icons/file_component.rb +14 -0
- data/app/components/blacklight/icons/folder_component.rb +12 -0
- data/app/components/blacklight/icons/online_component.rb +15 -0
- data/app/components/blacklight/icons/pdf_component.rb +12 -0
- data/app/components/blacklight/icons/repository_component.rb +12 -0
- data/app/controllers/arclight/repositories_controller.rb +4 -4
- data/app/{controllers/concerns → helpers}/arclight/ead_format_helpers.rb +91 -7
- data/app/helpers/arclight/field_config_helpers.rb +26 -0
- data/app/helpers/arclight_helper.rb +24 -251
- data/app/models/arclight/document_downloads.rb +12 -15
- data/app/models/arclight/parent.rb +6 -8
- data/app/models/arclight/parents.rb +7 -4
- data/app/models/arclight/requests/aeon_external_request.rb +1 -1
- data/app/models/arclight/requests/aeon_web_ead.rb +8 -3
- data/app/models/arclight/requests/google_form.rb +8 -3
- data/app/models/concerns/arclight/catalog.rb +25 -15
- data/app/models/concerns/arclight/search_behavior.rb +12 -26
- data/app/models/concerns/arclight/solr_document.rb +80 -73
- data/app/presenters/arclight/show_presenter.rb +34 -7
- data/app/views/arclight/_requests.html.erb +2 -2
- data/app/views/arclight/repositories/_repository.html.erb +21 -40
- data/app/views/arclight/repositories/index.html.erb +3 -1
- data/app/views/arclight/repositories/show.html.erb +4 -6
- data/app/views/arclight/requests/_aeon_external_request_endpoint.html.erb +4 -5
- data/app/views/arclight/requests/_aeon_web_ead.html.erb +3 -4
- data/app/views/arclight/requests/_google_form.html.erb +4 -6
- data/app/views/catalog/_document_list.html.erb +8 -0
- data/app/views/catalog/_group.html.erb +2 -19
- data/app/views/catalog/_group_toggle.html.erb +1 -1
- data/app/views/catalog/_search_results_header.html.erb +3 -0
- data/app/views/catalog/hierarchy.html.erb +19 -0
- data/app/views/catalog/index.html.erb +16 -7
- data/app/views/shared/_breadcrumbs.html.erb +2 -14
- data/app/views/shared/_main_menu_links.html.erb +1 -1
- data/arclight.gemspec +16 -14
- data/config/breadcrumbs.rb +24 -0
- data/config/i18n-tasks.yml +9 -8
- data/config/importmap.rb +3 -0
- data/config/locales/arclight.en.yml +31 -30
- data/config/routes.rb +1 -1
- data/docker-compose.yml +16 -0
- data/lib/arclight/digital_object.rb +2 -1
- data/lib/arclight/engine.rb +18 -37
- data/lib/arclight/exceptions.rb +1 -0
- data/lib/arclight/hash_absolute_xpath.rb +2 -1
- data/lib/arclight/normalized_date.rb +5 -10
- data/lib/arclight/normalized_id.rb +6 -2
- data/lib/arclight/normalized_title.rb +2 -0
- data/lib/arclight/repository.rb +46 -57
- data/lib/arclight/routes/hierarchy.rb +19 -0
- data/lib/arclight/routes.rb +8 -0
- data/lib/arclight/traject/ead2_component_config.rb +335 -0
- data/lib/arclight/traject/ead2_config.rb +120 -299
- data/lib/arclight/version.rb +1 -1
- data/lib/arclight/year_range.rb +4 -3
- data/lib/arclight.rb +6 -1
- data/lib/generators/arclight/install_generator.rb +94 -21
- data/lib/generators/arclight/templates/arclight.scss +6 -3
- data/lib/generators/arclight/templates/catalog_controller.rb +193 -165
- data/lib/generators/arclight/templates/config/locales/arclight.en.yml +61 -0
- data/lib/generators/arclight/templates/config/repositories.yml +22 -29
- data/lib/tasks/index.rake +14 -17
- data/package.json +13 -14
- data/solr/conf/schema.xml +49 -39
- data/solr/conf/solrconfig.xml +78 -58
- data/tasks/arclight.rake +17 -9
- data/template.rb +6 -7
- metadata +149 -123
- data/.babelrc +0 -3
- data/app/assets/javascripts/arclight/collection_navigation.js +0 -100
- data/app/assets/javascripts/arclight/collection_scrollspy.js +0 -6
- data/app/assets/javascripts/arclight/context_navigation.js +0 -351
- data/app/assets/javascripts/arclight/oembed_viewer.js +0 -46
- data/app/assets/javascripts/arclight/truncator.js.erb +0 -29
- data/app/assets/stylesheets/arclight/bootstrap_overrides.scss +0 -26
- data/app/assets/stylesheets/arclight/modules/context_navigation.scss +0 -75
- data/app/controllers/concerns/arclight/field_config_helpers.rb +0 -102
- data/app/factories/blacklight_field_configuration_factory.rb +0 -30
- data/app/views/arclight/repositories/_in_person_repository.html.erb +0 -19
- data/app/views/arclight/repositories/_repository_contact.html.erb +0 -9
- data/app/views/arclight/viewers/_oembed.html.erb +0 -8
- data/app/views/catalog/_access_contents.html.erb +0 -15
- data/app/views/catalog/_arclight_abstract_or_scope.html.erb +0 -5
- data/app/views/catalog/_arclight_bookmark_control.html.erb +0 -38
- data/app/views/catalog/_arclight_document_header_icon.html.erb +0 -1
- data/app/views/catalog/_arclight_document_index_header.html.erb +0 -13
- data/app/views/catalog/_arclight_document_index_header_hierarchy_default.html.erb +0 -0
- data/app/views/catalog/_arclight_document_index_header_online_contents_default.html.erb +0 -0
- data/app/views/catalog/_arclight_index_compact_default.html.erb +0 -22
- data/app/views/catalog/_arclight_index_default.html.erb +0 -45
- data/app/views/catalog/_arclight_index_group_document_compact_default.html.erb +0 -19
- data/app/views/catalog/_arclight_index_group_document_default.html.erb +0 -18
- data/app/views/catalog/_arclight_online_content_indicator.html.erb +0 -3
- data/app/views/catalog/_arclight_rangelimit.html.erb +0 -24
- data/app/views/catalog/_arclight_viewer_default.html.erb +0 -1
- data/app/views/catalog/_collection_contents.html.erb +0 -4
- data/app/views/catalog/_collection_context.html.erb +0 -15
- data/app/views/catalog/_collection_context_nav.html.erb +0 -12
- data/app/views/catalog/_collection_online_contents.html.erb +0 -17
- data/app/views/catalog/_component_context.html.erb +0 -5
- data/app/views/catalog/_containers.html.erb +0 -3
- data/app/views/catalog/_context_card.html.erb +0 -27
- data/app/views/catalog/_context_sidebar.html.erb +0 -8
- data/app/views/catalog/_custom_metadata.html.erb +0 -16
- data/app/views/catalog/_document_downloads.html.erb +0 -14
- data/app/views/catalog/_group_header_compact_default.html.erb +0 -15
- data/app/views/catalog/_group_header_default.html.erb +0 -20
- data/app/views/catalog/_home.html.erb +0 -1
- data/app/views/catalog/_index_breadcrumb_default.html.erb +0 -6
- data/app/views/catalog/_index_collection_context_default.html.erb +0 -53
- data/app/views/catalog/_index_default.html.erb +0 -17
- data/app/views/catalog/_index_header.html.erb +0 -7
- data/app/views/catalog/_index_header_online_contents_default.html.erb +0 -1
- data/app/views/catalog/_index_online_contents_default.html.erb +0 -6
- data/app/views/catalog/_online_content_label.html.erb +0 -5
- data/app/views/catalog/_search_form.html.erb +0 -34
- data/app/views/catalog/_search_results.html.erb +0 -28
- data/app/views/catalog/_show_actions_box_default.html.erb +0 -27
- data/app/views/catalog/_show_breadcrumbs_default.html.erb +0 -6
- data/app/views/catalog/_show_collection.html.erb +0 -66
- data/app/views/catalog/_show_default.html.erb +0 -70
- data/app/views/catalog/_show_upper_metadata_collection.html.erb +0 -1
- data/app/views/catalog/_show_upper_metadata_default.html.erb +0 -14
- data/app/views/catalog/_sort_and_per_page.html.erb +0 -8
- data/app/views/catalog/_within_collection_dropdown.html.erb +0 -26
- data/app/views/layouts/catalog_result.html.erb +0 -7
- data/app/views/shared/_context_sidebar.html.erb +0 -8
- data/app/views/shared/_header_navbar.html.erb +0 -61
- data/app/views/shared/_show_breadcrumbs.html.erb +0 -27
- data/lib/arclight/viewer.rb +0 -45
- data/lib/arclight/viewers/oembed.rb +0 -57
- data/solr/conf/scripts.conf +0 -24
- data/vendor/assets/javascripts/responsiveTruncator.js +0 -69
- data/vendor/assets/javascripts/stickyfill.js +0 -480
- /data/app/assets/images/{blacklight → arclight}/logo.png +0 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Root crumb
|
|
4
|
+
crumb :root do
|
|
5
|
+
link t('arclight.routes.home'), root_path
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
crumb :repositories do
|
|
9
|
+
link t('arclight.routes.repositories'), arclight_engine.repositories_path
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
crumb :repository do |repository|
|
|
13
|
+
link repository.name, arclight_engine.repository_path(repository.slug)
|
|
14
|
+
|
|
15
|
+
parent :repositories
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
crumb :search_results do |search_state|
|
|
19
|
+
if search_state.filter('level').values == ['Collection']
|
|
20
|
+
link t('arclight.routes.collections')
|
|
21
|
+
else
|
|
22
|
+
link t('arclight.routes.search_results')
|
|
23
|
+
end
|
|
24
|
+
end
|
data/config/i18n-tasks.yml
CHANGED
|
@@ -53,16 +53,17 @@ data:
|
|
|
53
53
|
# Find translate calls
|
|
54
54
|
search:
|
|
55
55
|
## Paths or `File.find` patterns to search in:
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
paths:
|
|
57
|
+
- app/
|
|
58
|
+
- config/breadcrumbs.rb
|
|
58
59
|
|
|
59
60
|
## Root directories for relative keys resolution.
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
61
|
+
relative_roots:
|
|
62
|
+
- app/components
|
|
63
|
+
- app/controllers
|
|
64
|
+
- app/helpers
|
|
65
|
+
- app/presenters
|
|
66
|
+
- app/views
|
|
66
67
|
|
|
67
68
|
## Files or `File.fnmatch` patterns to exclude from search. Some files are always excluded regardless of this setting:
|
|
68
69
|
## %w(*.jpg *.png *.gif *.svg *.ico *.eot *.otf *.ttf *.woff *.woff2 *.pdf *.css *.sass *.scss *.less *.yml *.json)
|
data/config/importmap.rb
ADDED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
---
|
|
2
2
|
en:
|
|
3
3
|
arclight:
|
|
4
|
-
breadcrumb_separator: " » "
|
|
5
4
|
breadcrumbs:
|
|
6
5
|
aria_label: breadcrumb
|
|
6
|
+
collection_info_component:
|
|
7
|
+
collection_id: Collection ID
|
|
8
|
+
last_indexed: Last indexed
|
|
9
|
+
more_info: More info
|
|
10
|
+
online_items: Items available online
|
|
11
|
+
total_components: Total components
|
|
7
12
|
hierarchy:
|
|
8
|
-
scope_and_contents: Scope and Contents
|
|
9
|
-
scope_note: 'Scope note: '
|
|
10
13
|
view_all: View
|
|
11
|
-
|
|
14
|
+
masthead_heading_html: Archival Collections at Institution
|
|
12
15
|
repositories: Repositories
|
|
13
16
|
request:
|
|
14
17
|
container: Request
|
|
@@ -22,11 +25,9 @@ en:
|
|
|
22
25
|
repository_header: 'Collections : [%{repository}]'
|
|
23
26
|
show_breadcrumb_label: Repository
|
|
24
27
|
truncation:
|
|
25
|
-
view_less: view less
|
|
26
|
-
view_more: view more
|
|
28
|
+
view_less: view less
|
|
29
|
+
view_more: view more
|
|
27
30
|
views:
|
|
28
|
-
home:
|
|
29
|
-
title: Archival Collections at Institution - Arclight
|
|
30
31
|
index:
|
|
31
32
|
all_group_results: view all %{count}
|
|
32
33
|
all_results: All results
|
|
@@ -52,46 +53,46 @@ en:
|
|
|
52
53
|
view_all_collections: View all of our collections
|
|
53
54
|
view_more: View more
|
|
54
55
|
show:
|
|
55
|
-
access: Access
|
|
56
|
-
collapse: Collapse
|
|
57
56
|
collection_id: 'Collection ID: %{id}'
|
|
57
|
+
contents: Contents
|
|
58
58
|
context: Collection context
|
|
59
59
|
context_nav:
|
|
60
|
-
title: Collection
|
|
60
|
+
title: Collection overview
|
|
61
61
|
download:
|
|
62
62
|
default: Download
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
63
|
+
multiple:
|
|
64
|
+
ead: EAD
|
|
65
|
+
pdf: Finding aid
|
|
66
|
+
single:
|
|
67
|
+
ead: Download EAD
|
|
68
|
+
pdf: Download finding aid
|
|
69
|
+
embedded_content: Online content
|
|
69
70
|
expand: Expand
|
|
70
|
-
has_content:
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
has_content: Collection contents
|
|
72
|
+
online_content:
|
|
73
|
+
description: Some materials from this collection are available online.
|
|
74
|
+
link_text: Show only online content
|
|
75
|
+
title: Online content
|
|
74
76
|
our_collections: Our Collections
|
|
75
|
-
overview: Overview
|
|
76
77
|
sections:
|
|
77
|
-
access_field: Access and
|
|
78
|
+
access_field: Access and use
|
|
78
79
|
background_field: Background
|
|
79
|
-
collection_context_field: Collection
|
|
80
|
+
collection_context_field: Collection context
|
|
80
81
|
component_field: About this %{level}
|
|
81
|
-
component_indexed_terms_field: Indexed
|
|
82
|
-
indexed_terms_field: Indexed
|
|
82
|
+
component_indexed_terms_field: Indexed terms
|
|
83
|
+
indexed_terms_field: Indexed terms
|
|
83
84
|
related_field: Related
|
|
84
|
-
scope_and_arrangement_field: Scope and
|
|
85
|
+
scope_and_arrangement_field: Scope and arrangement
|
|
85
86
|
summary_field: Summary
|
|
86
|
-
|
|
87
|
+
toggle_sidebar: Navigate the collection
|
|
87
88
|
within_collection_dropdown:
|
|
88
89
|
all_collections: all collections
|
|
89
|
-
label_html: Search<span class="sr-only"> within</span>
|
|
90
|
+
label_html: Search<span class="sr-only visually-hidden"> within</span>
|
|
90
91
|
this_collection: this collection
|
|
91
92
|
blacklight:
|
|
92
93
|
entry_name:
|
|
93
94
|
grouped:
|
|
94
|
-
|
|
95
|
+
_root_: collections
|
|
95
96
|
search:
|
|
96
97
|
pagination_info:
|
|
97
98
|
pages:
|
data/config/routes.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
Arclight::Engine.routes.draw do
|
|
4
|
-
get 'collections' => 'catalog#index', defaults: { f: {
|
|
4
|
+
get 'collections' => 'catalog#index', defaults: { f: { level: ['Collection'] } }, as: :collections
|
|
5
5
|
resources :repositories, only: %i[index show], controller: 'arclight/repositories'
|
|
6
6
|
end
|
data/docker-compose.yml
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
version: "3.7"
|
|
2
|
+
|
|
3
|
+
services:
|
|
4
|
+
solr:
|
|
5
|
+
image: solr:latest
|
|
6
|
+
volumes:
|
|
7
|
+
- $PWD/solr/conf:/opt/solr/conf
|
|
8
|
+
ports:
|
|
9
|
+
- 8983:8983
|
|
10
|
+
entrypoint:
|
|
11
|
+
- docker-entrypoint.sh
|
|
12
|
+
- solr-precreate
|
|
13
|
+
- blacklight-core
|
|
14
|
+
- /opt/solr/conf
|
|
15
|
+
- "-Xms256m"
|
|
16
|
+
- "-Xmx512m"
|
|
@@ -5,8 +5,9 @@ module Arclight
|
|
|
5
5
|
# Plain ruby class to model serializing/deserializing digital object data
|
|
6
6
|
class DigitalObject
|
|
7
7
|
attr_reader :label, :href
|
|
8
|
+
|
|
8
9
|
def initialize(label:, href:)
|
|
9
|
-
@label = label.
|
|
10
|
+
@label = label.presence || href
|
|
10
11
|
@href = href
|
|
11
12
|
end
|
|
12
13
|
|
data/lib/arclight/engine.rb
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'sprockets/bumble_d'
|
|
4
3
|
require 'blacklight'
|
|
5
4
|
require 'traject'
|
|
6
5
|
require 'active_model'
|
|
@@ -9,58 +8,40 @@ require 'arclight/normalized_date'
|
|
|
9
8
|
require 'arclight/normalized_id'
|
|
10
9
|
require 'arclight/normalized_title'
|
|
11
10
|
require 'arclight/digital_object'
|
|
12
|
-
require '
|
|
11
|
+
require 'gretel'
|
|
13
12
|
|
|
14
13
|
module Arclight
|
|
15
14
|
##
|
|
16
15
|
# This is the defining class for the Arclight Rails Engine
|
|
17
16
|
class Engine < ::Rails::Engine
|
|
18
|
-
extend ::Sprockets::BumbleD::DSL
|
|
19
|
-
|
|
20
|
-
# We're not sure this is right, but we aren't doing module imports
|
|
21
|
-
# at the moment anyway
|
|
22
|
-
register_umd_globals :arclight,
|
|
23
|
-
'blacklight' => 'Blacklight'
|
|
24
|
-
|
|
25
|
-
config.viewer_class = Arclight::Viewers::OEmbed
|
|
26
17
|
config.oembed_resource_exclude_patterns = [/\.pdf$/, /\.ppt$/]
|
|
27
18
|
|
|
28
|
-
Arclight::Engine.config.catalog_controller_field_accessors = %i[
|
|
29
|
-
summary_field
|
|
30
|
-
access_field
|
|
31
|
-
contact_field
|
|
32
|
-
background_field
|
|
33
|
-
related_field
|
|
34
|
-
terms_field
|
|
35
|
-
cite_field
|
|
36
|
-
indexed_terms_field
|
|
37
|
-
in_person_field
|
|
38
|
-
component_field
|
|
39
|
-
online_field
|
|
40
|
-
component_terms_field
|
|
41
|
-
component_indexed_terms_field
|
|
42
|
-
]
|
|
43
|
-
|
|
44
19
|
Arclight::Engine.config.catalog_controller_group_query_params = {
|
|
45
20
|
group: true,
|
|
46
|
-
'group.field': '
|
|
21
|
+
'group.field': '_root_',
|
|
47
22
|
'group.ngroups': true,
|
|
48
23
|
'group.limit': 3,
|
|
49
|
-
fl: '*,
|
|
50
|
-
'
|
|
51
|
-
'
|
|
52
|
-
'
|
|
53
|
-
'
|
|
24
|
+
fl: '*,collection:[subquery]',
|
|
25
|
+
'collection.q': '{!terms f=id v=$row._root_}',
|
|
26
|
+
'collection.defType': 'lucene',
|
|
27
|
+
'collection.fl': '*',
|
|
28
|
+
'collection.rows': 1
|
|
54
29
|
}
|
|
55
30
|
|
|
56
|
-
initializer 'arclight.
|
|
57
|
-
|
|
58
|
-
|
|
31
|
+
initializer 'arclight.helpers' do
|
|
32
|
+
config.after_initialize do
|
|
33
|
+
ActiveSupport.on_load(:action_view) { include ArclightHelper }
|
|
59
34
|
end
|
|
60
35
|
end
|
|
61
36
|
|
|
62
|
-
initializer 'arclight.
|
|
63
|
-
|
|
37
|
+
initializer 'arclight.assets', before: 'assets' do |app|
|
|
38
|
+
app.config.assets.precompile << 'arclight/arclight.js'
|
|
39
|
+
app.config.assets.precompile << 'arclight/oembed_controller.js'
|
|
40
|
+
app.config.assets.precompile << 'arclight/truncate_controller.js'
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
initializer 'arclight.importmap', before: 'importmap' do |app|
|
|
44
|
+
app.config.importmap.paths << Engine.root.join('config/importmap.rb') if app.config.respond_to?(:importmap)
|
|
64
45
|
end
|
|
65
46
|
end
|
|
66
47
|
end
|
data/lib/arclight/exceptions.rb
CHANGED
|
@@ -39,16 +39,11 @@ module Arclight
|
|
|
39
39
|
|
|
40
40
|
# @see http://www2.archivists.org/standards/DACS/part_I/chapter_2/4_date for rules
|
|
41
41
|
def normalize
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
else
|
|
48
|
-
result = nil
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
result&.strip
|
|
42
|
+
result = []
|
|
43
|
+
result << inclusive if inclusive.present?
|
|
44
|
+
result << other if other.present?
|
|
45
|
+
result << "bulk #{bulk}" if bulk.present?
|
|
46
|
+
result.compact.map(&:strip).join(', ').presence
|
|
52
47
|
end
|
|
53
48
|
end
|
|
54
49
|
end
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'arclight/exceptions'
|
|
4
|
+
|
|
3
5
|
module Arclight
|
|
4
6
|
##
|
|
5
7
|
# A simple utility class to normalize identifiers
|
|
6
|
-
# to be used around the application for linking
|
|
7
8
|
class NormalizedId
|
|
8
|
-
|
|
9
|
+
# Accepts unused kwargs from the ead2_config.rb id to_field directive
|
|
10
|
+
# (:title and :repository) so that applications can provide a custom
|
|
11
|
+
# id_normalizer class to traject to form the collection id from these attributes.
|
|
12
|
+
def initialize(id, **_kwargs)
|
|
9
13
|
@id = id
|
|
10
14
|
end
|
|
11
15
|
|
data/lib/arclight/repository.rb
CHANGED
|
@@ -1,74 +1,63 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'active_model'
|
|
4
|
+
require 'active_support'
|
|
5
|
+
require 'active_support/core_ext/hash/indifferent_access'
|
|
6
|
+
|
|
3
7
|
module Arclight
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
#
|
|
8
|
+
# Static information about a given repository identified by a unique `slug`.
|
|
9
|
+
# These data are loaded from config/repositories.yml
|
|
7
10
|
class Repository
|
|
8
|
-
include ActiveModel::
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
send("#{field}=", value) if value.present?
|
|
19
|
-
end
|
|
11
|
+
include ActiveModel::Model
|
|
12
|
+
DEFAULTS = {
|
|
13
|
+
request_types: {},
|
|
14
|
+
contact_html: '',
|
|
15
|
+
location_html: '',
|
|
16
|
+
visit_note: nil
|
|
17
|
+
}.freeze
|
|
18
|
+
|
|
19
|
+
def initialize(attributes = {})
|
|
20
|
+
@attributes = DEFAULTS.merge(attributes).with_indifferent_access
|
|
20
21
|
end
|
|
21
22
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
state_zip = state
|
|
25
|
-
state_zip += " #{zip}" if zip
|
|
26
|
-
[city, state_zip, country].compact.join(', ')
|
|
27
|
-
end
|
|
23
|
+
attr_reader :attributes
|
|
24
|
+
attr_accessor :collection_count
|
|
28
25
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
# All the keys in the config hash from `repositories.yml` are
|
|
32
|
-
# on-the-fly added as attr_accessors up in #initialize. If the
|
|
33
|
-
# request_types key isn't present, the method won't be created.
|
|
34
|
-
#
|
|
35
|
-
# Since the original data is thrown away, this is the best way
|
|
36
|
-
# to see if that key was present.
|
|
37
|
-
def request_config_present?
|
|
38
|
-
return false unless respond_to? :request_types
|
|
39
|
-
return false if request_types.nil? || request_types.empty?
|
|
26
|
+
def method_missing(field, *args, &block)
|
|
27
|
+
return attributes[field] if attributes.include?(field)
|
|
40
28
|
|
|
41
|
-
|
|
42
|
-
request_configs[0]&.fetch('request_url').present? &&
|
|
43
|
-
request_configs[0]&.fetch('request_mappings').present?
|
|
29
|
+
super
|
|
44
30
|
end
|
|
45
31
|
|
|
46
|
-
def
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
config = request_types[type]
|
|
50
|
-
config&.fetch('request_url').present? &&
|
|
51
|
-
config&.fetch('request_mappings').present?
|
|
32
|
+
def respond_to_missing?(field, *args)
|
|
33
|
+
attributes.include?(field) || super
|
|
52
34
|
end
|
|
53
35
|
|
|
54
|
-
|
|
55
|
-
|
|
36
|
+
# rubocop:disable Rails/OutputSafety
|
|
37
|
+
def contact
|
|
38
|
+
contact_html.html_safe
|
|
39
|
+
end
|
|
56
40
|
|
|
57
|
-
|
|
41
|
+
def location
|
|
42
|
+
location_html.html_safe
|
|
58
43
|
end
|
|
44
|
+
# rubocop:enable Rails/OutputSafety
|
|
59
45
|
|
|
60
|
-
def
|
|
61
|
-
|
|
46
|
+
def request_config_present?
|
|
47
|
+
request_configs = request_types.values || []
|
|
48
|
+
request_configs.dig(0, 'request_url').present? &&
|
|
49
|
+
request_configs.dig(0, 'request_mappings').present?
|
|
50
|
+
end
|
|
62
51
|
|
|
52
|
+
def request_config_present_for_type?(type)
|
|
63
53
|
config = request_config_for_type(type)
|
|
64
|
-
config.fetch('request_url')
|
|
65
|
-
end
|
|
66
54
|
|
|
67
|
-
|
|
68
|
-
|
|
55
|
+
config['request_url'].present? &&
|
|
56
|
+
config['request_mappings'].present?
|
|
57
|
+
end
|
|
69
58
|
|
|
70
|
-
|
|
71
|
-
|
|
59
|
+
def request_config_for_type(type)
|
|
60
|
+
request_types.fetch(type, {})
|
|
72
61
|
end
|
|
73
62
|
|
|
74
63
|
def available_request_types
|
|
@@ -83,9 +72,9 @@ module Arclight
|
|
|
83
72
|
# @return [Hash<Slug,Repository>]
|
|
84
73
|
def self.from_yaml(file)
|
|
85
74
|
repos = {}
|
|
86
|
-
data = YAML.
|
|
87
|
-
data.
|
|
88
|
-
repos[slug] = new(
|
|
75
|
+
data = YAML.safe_load_file(file)
|
|
76
|
+
data.each_key do |slug|
|
|
77
|
+
repos[slug] = new(data[slug].merge(slug: slug))
|
|
89
78
|
end
|
|
90
79
|
repos
|
|
91
80
|
end
|
|
@@ -117,8 +106,8 @@ module Arclight
|
|
|
117
106
|
# @param [String] `slug` or `name` -- same as `find_by`
|
|
118
107
|
# @return [Repository]
|
|
119
108
|
# @raise [ActiveRecord::RecordNotFound] if cannot find repository
|
|
120
|
-
def self.find_by!(
|
|
121
|
-
repository = find_by(
|
|
109
|
+
def self.find_by!(**kwargs)
|
|
110
|
+
repository = find_by(**kwargs)
|
|
122
111
|
raise ActiveRecord::RecordNotFound if repository.blank?
|
|
123
112
|
|
|
124
113
|
repository
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Arclight
|
|
4
|
+
module Routes
|
|
5
|
+
# Inject a hierarchy route for displaying the
|
|
6
|
+
# components in the collection context
|
|
7
|
+
class Hierarchy
|
|
8
|
+
def initialize(defaults = {})
|
|
9
|
+
@defaults = defaults
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def call(mapper, _options = {})
|
|
13
|
+
mapper.member do
|
|
14
|
+
mapper.get 'hierarchy'
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|