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,9 @@
|
|
|
1
|
+
<div class="offcanvas-lg offcanvas-start p-3 p-lg-1" tabindex="-1" id="sidebar">
|
|
2
|
+
<%= collection_context %>
|
|
3
|
+
<%= render 'show_tools', document: document %>
|
|
4
|
+
<%= collection_sidebar %>
|
|
5
|
+
<div id="collection-context" class="sidebar-section">
|
|
6
|
+
<h2><%= t('arclight.views.show.has_content') %></h2>
|
|
7
|
+
<%= turbo_frame_tag "al-hierarchy-#{document.root}", loading: 'lazy', src: hierarchy_solr_document_path(id: document.root, nest_path: @document.nest_path, hierarchy: true) %>
|
|
8
|
+
</div>
|
|
9
|
+
</div>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Arclight
|
|
4
|
+
# A sidebar with collection context widget and tools
|
|
5
|
+
class SidebarComponent < Blacklight::Document::SidebarComponent
|
|
6
|
+
delegate :blacklight_config, :document_presenter, :should_render_field?,
|
|
7
|
+
:turbo_frame_tag, to: :helpers
|
|
8
|
+
|
|
9
|
+
def collection_context
|
|
10
|
+
render Arclight::CollectionContextComponent.new(presenter: document_presenter(document), download_component: Arclight::DocumentDownloadComponent)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def collection_sidebar
|
|
14
|
+
render Arclight::CollectionSidebarComponent.new(document: document,
|
|
15
|
+
collection_presenter: document_presenter(document.collection),
|
|
16
|
+
partials: blacklight_config.show.metadata_partials)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Arclight
|
|
4
|
+
# Override upstream to add an offset bootstrap column class
|
|
5
|
+
class UpperMetadataLayoutComponent < Blacklight::MetadataFieldLayoutComponent
|
|
6
|
+
def initialize(field:, label_class: 'col-md-3 offset-md-1', value_class: 'col-md-8')
|
|
7
|
+
super
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Icons
|
|
5
|
+
# The bookmark icon
|
|
6
|
+
class BookmarkComponent < Blacklight::Icons::IconComponent
|
|
7
|
+
self.svg = <<~SVG
|
|
8
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 384 512"><path d="M0 512V48C0 21.49 21.49 0 48 0h288c26.51 0 48 21.49 48 48v464L192 400 0 512z"/></svg>
|
|
9
|
+
SVG
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Icons
|
|
5
|
+
# The collection icon
|
|
6
|
+
class CollectionComponent < Blacklight::Icons::IconComponent
|
|
7
|
+
# Used unmodified from https://fontawesome.com
|
|
8
|
+
# CC BY 4.0 https://creativecommons.org/licenses/by/4.0/
|
|
9
|
+
self.svg = <<~SVG
|
|
10
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 512 512"><path d="M32 448c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V160H32v288zm160-212c0-6.6 5.4-12 12-12h104c6.6 0 12 5.4 12 12v8c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-8zM480 32H32C14.3 32 0 46.3 0 64v48c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16V64c0-17.7-14.3-32-32-32z"/></svg>
|
|
11
|
+
SVG
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Icons
|
|
5
|
+
# The compact icon
|
|
6
|
+
class CompactComponent < Blacklight::Icons::IconComponent
|
|
7
|
+
self.svg = <<~SVG
|
|
8
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewBox="0 0 24 24"><path d="M3,15H21V13H3Zm0,4H21V17H3Zm0-8H21V9H3ZM3,5V7H21V5Z"/></svg>
|
|
9
|
+
SVG
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Icons
|
|
5
|
+
# The container icon
|
|
6
|
+
class ContainerComponent < Blacklight::Icons::IconComponent
|
|
7
|
+
# Used unmodified from https://fontawesome.com
|
|
8
|
+
# CC BY 4.0 https://creativecommons.org/licenses/by/4.0/
|
|
9
|
+
self.svg = <<~SVG
|
|
10
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewBox="0 0 512 512"><path d="M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48z"/></svg>
|
|
11
|
+
SVG
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Icons
|
|
5
|
+
# The ead icon
|
|
6
|
+
class EadComponent < Blacklight::Icons::IconComponent
|
|
7
|
+
self.svg = <<~SVG
|
|
8
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewBox="0 0 384 512"><path d="M149.9 349.1l-.2-.2-32.8-28.9 32.8-28.9c3.6-3.2 4-8.8.8-12.4l-.2-.2-17.4-18.6c-3.4-3.6-9-3.7-12.4-.4l-57.7 54.1c-3.7 3.5-3.7 9.4 0 12.8l57.7 54.1c1.6 1.5 3.8 2.4 6 2.4 2.4 0 4.8-1 6.4-2.8l17.4-18.6c3.3-3.5 3.1-9.1-.4-12.4zm220-251.2L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM256 51.9l76.1 76.1H256zM336 464H48V48h160v104c0 13.3 10.7 24 24 24h104zM209.6 214c-4.7-1.4-9.5 1.3-10.9 6L144 408.1c-1.4 4.7 1.3 9.6 6 10.9l24.4 7.1c4.7 1.4 9.6-1.4 10.9-6L240 231.9c1.4-4.7-1.3-9.6-6-10.9zm24.5 76.9l.2.2 32.8 28.9-32.8 28.9c-3.6 3.2-4 8.8-.8 12.4l.2.2 17.4 18.6c3.3 3.5 8.9 3.7 12.4.4l57.7-54.1c3.7-3.5 3.7-9.4 0-12.8l-57.7-54.1c-3.5-3.3-9.1-3.2-12.4.4l-17.4 18.6c-3.3 3.5-3.1 9.1.4 12.4z"/></svg>
|
|
9
|
+
SVG
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Icons
|
|
5
|
+
# The file icon
|
|
6
|
+
class FileComponent < Blacklight::Icons::IconComponent
|
|
7
|
+
# Used unmodified from https://fontawesome.com
|
|
8
|
+
# CC BY 4.0 https://creativecommons.org/licenses/by/4.0/
|
|
9
|
+
self.svg = <<~SVG
|
|
10
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 384 512"><path d="M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm160-14.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"/></svg>
|
|
11
|
+
SVG
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Icons
|
|
5
|
+
# The folder icon
|
|
6
|
+
class FolderComponent < Blacklight::Icons::IconComponent
|
|
7
|
+
self.svg = <<~SVG
|
|
8
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewBox="0 0 512 512"><path d="M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48z"/></svg>
|
|
9
|
+
SVG
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Icons
|
|
5
|
+
# The online icon
|
|
6
|
+
class OnlineComponent < Blacklight::Icons::IconComponent
|
|
7
|
+
# Used unmodified from https://fontawesome.com
|
|
8
|
+
# CC BY 4.0 https://creativecommons.org/licenses/by/4.0/
|
|
9
|
+
self.svg = <<~SVG
|
|
10
|
+
|
|
11
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewBox="0 0 640 512"><path d="M608 0H160a32 32 0 0 0-32 32v96h160V64h192v320h128a32 32 0 0 0 32-32V32a32 32 0 0 0-32-32zM232 103a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm352 208a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm-168 57H32a32 32 0 0 0-32 32v288a32 32 0 0 0 32 32h384a32 32 0 0 0 32-32V192a32 32 0 0 0-32-32zM96 224a32 32 0 1 1-32 32 32 32 0 0 1 32-32zm288 224H64v-32l64-64 32 32 128-128 96 96z"/></svg>
|
|
12
|
+
SVG
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Icons
|
|
5
|
+
# The pdf icon
|
|
6
|
+
class PdfComponent < Blacklight::Icons::IconComponent
|
|
7
|
+
self.svg = <<~SVG
|
|
8
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewBox="0 0 384 512"><path d="M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm250.2-143.7c-12.2-12-47-8.7-64.4-6.5-17.2-10.5-28.7-25-36.8-46.3 3.9-16.1 10.1-40.6 5.4-56-4.2-26.2-37.8-23.6-42.6-5.9-4.4 16.1-.4 38.5 7 67.1-10 23.9-24.9 56-35.4 74.4-20 10.3-47 26.2-51 46.2-3.3 15.8 26 55.2 76.1-31.2 22.4-7.4 46.8-16.5 68.4-20.1 18.9 10.2 41 17 55.8 17 25.5 0 28-28.2 17.5-38.7zm-198.1 77.8c5.1-13.7 24.5-29.5 30.4-35-19 30.3-30.4 35.7-30.4 35zm81.6-190.6c7.4 0 6.7 32.1 1.8 40.8-4.4-13.9-4.3-40.8-1.8-40.8zm-24.4 136.6c9.7-16.9 18-37 24.7-54.7 8.3 15.1 18.9 27.2 30.1 35.5-20.8 4.3-38.9 13.1-54.8 19.2zm131.6-5s-5 6-37.3-7.8c35.1-2.6 40.9 5.4 37.3 7.8z"/></svg>
|
|
9
|
+
SVG
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Icons
|
|
5
|
+
# The repository icon
|
|
6
|
+
class RepositoryComponent < Blacklight::Icons::IconComponent
|
|
7
|
+
self.svg = <<~SVG
|
|
8
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0V0z"/><path d="M4 10v7h3v-7H4zm6 0v7h3v-7h-3zM2 22h19v-3H2v3zm14-12v7h3v-7h-3zm-4.5-9L2 6v2h19V6l-9.5-5z"/></svg>
|
|
9
|
+
SVG
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -12,7 +12,7 @@ module Arclight
|
|
|
12
12
|
@repository = Arclight::Repository.find_by!(slug: params[:id])
|
|
13
13
|
search_service = Blacklight.repository_class.new(blacklight_config)
|
|
14
14
|
@response = search_service.search(
|
|
15
|
-
q: "
|
|
15
|
+
q: "level_ssim:Collection repository_ssim:\"#{@repository.name}\"",
|
|
16
16
|
rows: 100
|
|
17
17
|
)
|
|
18
18
|
@collections = @response.documents
|
|
@@ -30,11 +30,11 @@ module Arclight
|
|
|
30
30
|
def fetch_collection_counts
|
|
31
31
|
search_service = Blacklight.repository_class.new(blacklight_config)
|
|
32
32
|
results = search_service.search(
|
|
33
|
-
q: '
|
|
34
|
-
'facet.field': '
|
|
33
|
+
q: 'level_ssim:Collection',
|
|
34
|
+
'facet.field': 'repository_ssim',
|
|
35
35
|
rows: 0
|
|
36
36
|
)
|
|
37
|
-
Hash[*results.facet_fields['
|
|
37
|
+
Hash[*results.facet_fields['repository_ssim']]
|
|
38
38
|
end
|
|
39
39
|
end
|
|
40
40
|
end
|
|
@@ -5,10 +5,9 @@ module Arclight
|
|
|
5
5
|
# A module to add EAD to HTML transformation rules for Arclight
|
|
6
6
|
module EadFormatHelpers # rubocop:disable Metrics/ModuleLength
|
|
7
7
|
extend ActiveSupport::Concern
|
|
8
|
-
include ActionView::Helpers::OutputSafetyHelper
|
|
9
8
|
|
|
10
9
|
def render_html_tags(args)
|
|
11
|
-
values = args[:value]
|
|
10
|
+
values = Array(args[:value])
|
|
12
11
|
values.map! do |value|
|
|
13
12
|
transform_ead_to_html(value)
|
|
14
13
|
end
|
|
@@ -24,13 +23,34 @@ module Arclight
|
|
|
24
23
|
.scrub!(:strip).to_html
|
|
25
24
|
end
|
|
26
25
|
|
|
26
|
+
# rubocop:disable Metrics/AbcSize
|
|
27
27
|
def ead_to_html_scrubber
|
|
28
28
|
Loofah::Scrubber.new do |node|
|
|
29
29
|
format_render_attributes(node) if node.attr('render').present?
|
|
30
|
+
convert_to_span(node) if CONVERT_TO_SPAN_TAGS.include? node.name
|
|
31
|
+
convert_to_br(node) if CONVERT_TO_BR_TAG.include? node.name
|
|
32
|
+
format_links(node) if %w[extptr extref extrefloc ptr ref].include? node.name
|
|
30
33
|
format_lists(node) if %w[list chronlist].include? node.name
|
|
34
|
+
format_indexes(node) if node.name == 'index'
|
|
35
|
+
format_tables(node) if node.name == 'table'
|
|
31
36
|
node
|
|
32
37
|
end
|
|
33
38
|
end
|
|
39
|
+
# rubocop:enable Metrics/AbcSize
|
|
40
|
+
|
|
41
|
+
# Tags that should be converted to <span> tags because of formatting conflicts between XML and HTML
|
|
42
|
+
CONVERT_TO_SPAN_TAGS = ['title'].freeze
|
|
43
|
+
|
|
44
|
+
# Tags that should be converted to HTML <br/> tags
|
|
45
|
+
CONVERT_TO_BR_TAG = ['lb'].freeze
|
|
46
|
+
|
|
47
|
+
def convert_to_span(node)
|
|
48
|
+
node.name = 'span'
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def convert_to_br(node)
|
|
52
|
+
node.name = 'br'
|
|
53
|
+
end
|
|
34
54
|
|
|
35
55
|
def condense_whitespace(str)
|
|
36
56
|
str.squish.strip.gsub(/>[\n\s]+</, '><')
|
|
@@ -73,9 +93,7 @@ module Arclight
|
|
|
73
93
|
node.name = 'span'
|
|
74
94
|
node.prepend_child '"'
|
|
75
95
|
node.add_child '"'
|
|
76
|
-
when 'italic'
|
|
77
|
-
node.name = 'em'
|
|
78
|
-
when 'nonproport'
|
|
96
|
+
when 'italic', 'nonproport'
|
|
79
97
|
node.name = 'em'
|
|
80
98
|
when 'singlequote'
|
|
81
99
|
node.name = 'span'
|
|
@@ -94,6 +112,17 @@ module Arclight
|
|
|
94
112
|
end
|
|
95
113
|
end
|
|
96
114
|
|
|
115
|
+
def format_links(node)
|
|
116
|
+
node.remove_attribute('target')
|
|
117
|
+
node.remove_attribute('type')
|
|
118
|
+
if %w[extptr extref extrefloc].include? node.name
|
|
119
|
+
node['target'] = '_blank'
|
|
120
|
+
node['class'] = 'external-link'
|
|
121
|
+
end
|
|
122
|
+
node.content = node['title'] if (%w[extptr ptr].include? node.name) && node['title'].present?
|
|
123
|
+
node.name = 'a' if node['href'].present?
|
|
124
|
+
end
|
|
125
|
+
|
|
97
126
|
def format_lists(node)
|
|
98
127
|
format_simple_lists(node) if node.name == 'list' && node['type'] != 'deflist'
|
|
99
128
|
format_deflists(node) if node.name == 'list' && node['type'] == 'deflist'
|
|
@@ -178,7 +207,7 @@ module Arclight
|
|
|
178
207
|
table_head = node.at_css('thead')
|
|
179
208
|
node.children.first.add_previous_sibling(table_head)
|
|
180
209
|
listhead_node = node.at_css('listhead')
|
|
181
|
-
return
|
|
210
|
+
return if listhead_node.blank?
|
|
182
211
|
|
|
183
212
|
node.at_css('thead tr th:nth-of-type(1)').content = node.at_css('listhead/head01').content
|
|
184
213
|
node.at_css('thead tr th:nth-of-type(2)').content = node.at_css('listhead/head02').content
|
|
@@ -187,7 +216,7 @@ module Arclight
|
|
|
187
216
|
|
|
188
217
|
def format_chronlist_caption(node)
|
|
189
218
|
head_node = node.at_css('head')
|
|
190
|
-
return
|
|
219
|
+
return if head_node.blank?
|
|
191
220
|
|
|
192
221
|
head_node.name = 'caption'
|
|
193
222
|
head_node['class'] = 'chronlist-head'
|
|
@@ -221,5 +250,60 @@ module Arclight
|
|
|
221
250
|
end
|
|
222
251
|
multi_events.each { |event_node| event_node.name = 'div' }
|
|
223
252
|
end
|
|
253
|
+
|
|
254
|
+
# Format EAD <index> elements
|
|
255
|
+
def format_indexes(node)
|
|
256
|
+
index_head = node.at_css('head')
|
|
257
|
+
index_head&.name = 'h3'
|
|
258
|
+
index_head&.add_class('index-head')
|
|
259
|
+
index_head['id'] = ['index-', index_head.text].join.parameterize if index_head.present?
|
|
260
|
+
format_indexentries(node)
|
|
261
|
+
node.name = 'div'
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
# Grab all of the <indexentry> children as a nodeset, move them into
|
|
265
|
+
# a <table>, wrap each entry in a <tr> & each value in a <td>.
|
|
266
|
+
def format_indexentries(node)
|
|
267
|
+
indexentries = node.css('indexentry')
|
|
268
|
+
return if indexentries.blank?
|
|
269
|
+
|
|
270
|
+
indexentries.first.previous = '<table class="table indexentries" />'
|
|
271
|
+
indexentries.map do |i|
|
|
272
|
+
i.parent = node.at_css('table.table.indexentries')
|
|
273
|
+
i.wrap('<tr/>')
|
|
274
|
+
i.element_children.map { |c| c.wrap('<td/>') }
|
|
275
|
+
# Assuming two columns in an index, create a blank cell for entries
|
|
276
|
+
# with a missing value.
|
|
277
|
+
i.add_child('<td/>') if i.element_children.count == 1
|
|
278
|
+
end
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
# Format EAD <table> elements, converting <tgroup> to HTML <table>.
|
|
282
|
+
# Ignoring <colspec>, @colname, @colwidth complex rendering
|
|
283
|
+
# logic for now.
|
|
284
|
+
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
|
285
|
+
def format_tables(node)
|
|
286
|
+
node.remove_attribute('frame')
|
|
287
|
+
node.name = 'div' if node.css('tgroup').present?
|
|
288
|
+
format_table_head(node)
|
|
289
|
+
tgroups = node.css('tgroup')
|
|
290
|
+
tgroups&.map do |t|
|
|
291
|
+
t.name = 'table'
|
|
292
|
+
t.remove_attribute('cols')
|
|
293
|
+
t.add_class('table')
|
|
294
|
+
t.css('row').map { |r| r.name = 'tr' }
|
|
295
|
+
t.css('thead entry').map { |e| e.name = 'th' }
|
|
296
|
+
t.css('tbody entry').map { |e| e.name = 'td' }
|
|
297
|
+
end
|
|
298
|
+
end
|
|
299
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
|
300
|
+
|
|
301
|
+
def format_table_head(node)
|
|
302
|
+
table_head = node.at_css('head')
|
|
303
|
+
return if table_head.blank?
|
|
304
|
+
|
|
305
|
+
table_head.name = 'h3'
|
|
306
|
+
table_head.add_class('table-head')
|
|
307
|
+
end
|
|
224
308
|
end
|
|
225
309
|
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Arclight
|
|
4
|
+
##
|
|
5
|
+
# A module to add configuration helpers for certain fields used by Arclight
|
|
6
|
+
module FieldConfigHelpers
|
|
7
|
+
include Arclight::EadFormatHelpers
|
|
8
|
+
|
|
9
|
+
def item_requestable?(document)
|
|
10
|
+
document.requestable?
|
|
11
|
+
end
|
|
12
|
+
Arclight.deprecation.deprecate_methods(self, item_requestable?: 'Call e.g. `document.requestable?` instead')
|
|
13
|
+
|
|
14
|
+
def link_to_name_facet(args)
|
|
15
|
+
options = args[:config]&.separator_options || {}
|
|
16
|
+
values = args[:value] || []
|
|
17
|
+
|
|
18
|
+
values.map do |value|
|
|
19
|
+
link_to(
|
|
20
|
+
value,
|
|
21
|
+
search_action_path(f: { names: [value] })
|
|
22
|
+
)
|
|
23
|
+
end.to_sentence(options).html_safe
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|