arclight 0.5.0 → 1.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.eslintrc +11 -4
- data/.github/workflows/ruby.yml +24 -11
- data/.rspec +0 -1
- data/.rubocop.yml +286 -2
- data/.rubocop_todo.yml +18 -195
- data/CONTRIBUTING.md +5 -5
- data/Gemfile +12 -12
- data/README.md +18 -12
- data/app/assets/javascripts/arclight/arclight.js +3 -7
- data/app/assets/javascripts/arclight/oembed_viewer.js +64 -39
- data/app/assets/javascripts/arclight/truncate_controller.js +27 -0
- data/app/assets/stylesheets/arclight/application.scss +1 -5
- data/app/assets/stylesheets/arclight/modules/hierarchy_and_online_contents.scss +104 -130
- data/app/assets/stylesheets/arclight/modules/icons.scss +14 -3
- data/app/assets/stylesheets/arclight/modules/layout.scss +120 -100
- data/app/assets/stylesheets/arclight/modules/mastheads.scss +15 -57
- 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_results.scss +86 -35
- data/app/assets/stylesheets/arclight/modules/show_collection.scss +5 -32
- data/app/assets/stylesheets/arclight/modules/truncator.scss +56 -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 +40 -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 +41 -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 +46 -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 +32 -0
- data/app/components/arclight/document_components_hierarchy_component.rb +28 -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/group_component.html.erb +30 -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 +17 -0
- data/app/components/arclight/index_metadata_field_component.rb +20 -0
- data/app/components/arclight/masthead_component.html.erb +15 -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 +19 -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 +25 -0
- data/app/components/arclight/search_bar_component.rb +32 -0
- data/app/components/arclight/search_result_breadcrumbs_component.html.erb +3 -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 +24 -0
- data/app/components/arclight/search_result_title_component.html.erb +13 -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 +4 -7
- data/app/helpers/arclight/field_config_helpers.rb +26 -0
- data/app/helpers/arclight_helper.rb +15 -253
- data/app/models/arclight/document_downloads.rb +12 -15
- data/app/models/arclight/parent.rb +5 -0
- data/app/models/arclight/parents.rb +2 -1
- 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 +70 -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 +2 -3
- data/app/views/arclight/requests/_google_form.html.erb +4 -6
- data/app/views/catalog/_group.html.erb +1 -18
- 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 +7 -6
- 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 -31
- data/lib/arclight/exceptions.rb +1 -0
- data/lib/arclight/hash_absolute_xpath.rb +2 -1
- data/lib/arclight/normalized_id.rb +2 -0
- data/lib/arclight/normalized_title.rb +2 -0
- data/lib/arclight/repository.rb +43 -54
- data/lib/arclight/routes/hierarchy.rb +19 -0
- data/lib/arclight/routes.rb +8 -0
- data/lib/arclight/traject/ead2_component_config.rb +292 -0
- data/lib/arclight/traject/ead2_config.rb +66 -287
- 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 +59 -21
- data/lib/generators/arclight/templates/arclight.scss +4 -3
- data/lib/generators/arclight/templates/catalog_controller.rb +150 -169
- data/lib/generators/arclight/templates/config/locales/arclight.en.yml +53 -0
- data/lib/generators/arclight/templates/config/repositories.yml +20 -27
- data/lib/tasks/index.rake +14 -17
- data/package.json +11 -13
- data/solr/conf/schema.xml +40 -36
- data/solr/conf/solrconfig.xml +33 -31
- data/tasks/arclight.rake +8 -7
- data/template.rb +0 -1
- metadata +111 -104
- 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/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 -38
- 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
@@ -4,8 +4,30 @@ module Arclight
|
|
4
4
|
##
|
5
5
|
# Extends Blacklight::Solr::Document to provide Arclight specific behavior
|
6
6
|
module SolrDocument
|
7
|
-
extend
|
8
|
-
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
included do
|
10
|
+
attribute :parent_ids, :array, 'parent_ssim'
|
11
|
+
attribute :parent_labels, :array, 'parent_unittitles_ssm'
|
12
|
+
attribute :parent_levels, :array, 'parent_levels_ssm'
|
13
|
+
attribute :unitid, :string, 'unitid_ssm'
|
14
|
+
attribute :extent, :string, 'extent_ssm'
|
15
|
+
attribute :abstract, :string, 'abstract_html_tesm'
|
16
|
+
attribute :scope, :string, 'scopecontent_html_tesm'
|
17
|
+
attribute :creator, :string, 'creator_ssm'
|
18
|
+
attribute :level, :string, 'level_ssm'
|
19
|
+
attribute :terms, :string, 'userestrict_html_tesm'
|
20
|
+
# Restrictions for component sidebar
|
21
|
+
attribute :parent_restrictions, :string, 'parent_access_restrict_tesm'
|
22
|
+
# Terms for component sidebar
|
23
|
+
attribute :parent_terms, :string, 'parent_access_terms_tesm'
|
24
|
+
attribute :reference, :string, 'ref_ssm'
|
25
|
+
attribute :normalized_title, :string, 'normalized_title_ssm'
|
26
|
+
attribute :normalized_date, :string, 'normalized_date_ssm'
|
27
|
+
attribute :total_component_count, :string, 'total_component_count_is'
|
28
|
+
attribute :online_item_count, :string, 'online_item_count_is'
|
29
|
+
attribute :last_indexed, :date, 'timestamp'
|
30
|
+
end
|
9
31
|
|
10
32
|
def repository_config
|
11
33
|
return unless repository
|
@@ -13,61 +35,50 @@ module Arclight
|
|
13
35
|
@repository_config ||= Arclight::Repository.find_by(name: repository)
|
14
36
|
end
|
15
37
|
|
16
|
-
def
|
17
|
-
|
18
|
-
end
|
19
|
-
|
20
|
-
def parent_labels
|
21
|
-
fetch('parent_unittitles_ssm', [])
|
22
|
-
end
|
23
|
-
|
24
|
-
def parent_levels
|
25
|
-
fetch('parent_levels_ssm', [])
|
26
|
-
end
|
27
|
-
|
28
|
-
def parent_document
|
29
|
-
self.class.new fetch('parent').fetch('docs', []).first
|
38
|
+
def parents
|
39
|
+
@parents ||= Arclight::Parents.from_solr_document(self).as_parents
|
30
40
|
end
|
31
41
|
|
42
|
+
# Get this document's EAD ID, or fall back to the collection (especially
|
43
|
+
# for components that may not have their own.
|
32
44
|
def eadid
|
33
|
-
|
45
|
+
first('ead_ssi')&.strip || collection&.first('ead_ssi')&.strip
|
34
46
|
end
|
35
47
|
|
36
|
-
def
|
37
|
-
|
48
|
+
def normalized_eadid
|
49
|
+
Arclight::NormalizedId.new(eadid).to_s
|
38
50
|
end
|
39
51
|
|
40
52
|
def repository
|
41
|
-
first('repository_ssm')
|
53
|
+
first('repository_ssm') || collection&.first('repository_ssm')
|
42
54
|
end
|
43
55
|
|
44
56
|
def repository_and_unitid
|
45
57
|
[repository, unitid].compact.join(': ')
|
46
58
|
end
|
47
59
|
|
48
|
-
|
49
|
-
|
50
|
-
|
60
|
+
# @return [SolrDocument] a SolrDocument representing the EAD collection
|
61
|
+
# that this document belongs to
|
62
|
+
def collection
|
63
|
+
return self if collection?
|
51
64
|
|
52
|
-
|
53
|
-
first('collection_unitid_ssm')
|
65
|
+
@collection ||= self.class.new(self['collection']&.dig('docs', 0), @response)
|
54
66
|
end
|
55
67
|
|
56
|
-
def
|
57
|
-
|
68
|
+
def collection_name
|
69
|
+
collection&.normalized_title
|
58
70
|
end
|
59
71
|
|
60
|
-
def
|
61
|
-
|
62
|
-
render_html_tags(value: [value]) if value.present?
|
72
|
+
def collection_unitid
|
73
|
+
collection&.unitid
|
63
74
|
end
|
64
75
|
|
65
|
-
def
|
66
|
-
|
76
|
+
def abstract_or_scope
|
77
|
+
abstract || scope
|
67
78
|
end
|
68
79
|
|
69
80
|
def collection_creator
|
70
|
-
|
81
|
+
collection&.creator
|
71
82
|
end
|
72
83
|
|
73
84
|
def online_content?
|
@@ -75,41 +86,19 @@ module Arclight
|
|
75
86
|
end
|
76
87
|
|
77
88
|
def number_of_children
|
78
|
-
first('
|
89
|
+
first('child_component_count_isi') || 0
|
79
90
|
end
|
80
91
|
|
81
92
|
def children?
|
82
93
|
number_of_children.positive?
|
83
94
|
end
|
84
95
|
|
85
|
-
def reference
|
86
|
-
first('ref_ssm')
|
87
|
-
end
|
88
|
-
|
89
96
|
def component_level
|
90
97
|
first('component_level_isim')
|
91
98
|
end
|
92
99
|
|
93
|
-
def
|
94
|
-
|
95
|
-
end
|
96
|
-
|
97
|
-
def digital_object_viewer
|
98
|
-
@digital_object_viewer ||= Arclight::Viewer.render(self)
|
99
|
-
end
|
100
|
-
|
101
|
-
def terms
|
102
|
-
render_html_tags(value: [first('userestrict_ssm')])
|
103
|
-
end
|
104
|
-
|
105
|
-
# Restrictions for component sidebar
|
106
|
-
def parent_restrictions
|
107
|
-
render_html_tags(value: [first('parent_access_restrict_ssm')])
|
108
|
-
end
|
109
|
-
|
110
|
-
# Terms for component sidebar
|
111
|
-
def parent_terms
|
112
|
-
render_html_tags(value: [first('parent_access_terms_ssm')])
|
100
|
+
def collection?
|
101
|
+
level&.parameterize == 'collection'
|
113
102
|
end
|
114
103
|
|
115
104
|
def digital_objects
|
@@ -122,26 +111,13 @@ module Arclight
|
|
122
111
|
end
|
123
112
|
|
124
113
|
def containers
|
125
|
-
#
|
114
|
+
# NOTE: that .titlecase strips punctuation, like hyphens, we want to keep
|
126
115
|
fetch('containers_ssim', []).map(&:capitalize)
|
127
116
|
end
|
128
117
|
|
129
|
-
def normalized_title
|
130
|
-
first('normalized_title_ssm')
|
131
|
-
end
|
132
|
-
|
133
|
-
def normalized_date
|
134
|
-
first('normalized_date_ssm')
|
135
|
-
end
|
136
|
-
|
137
118
|
# @return [Array<String>] with embedded highlights using <em>...</em>
|
138
119
|
def highlights
|
139
|
-
|
140
|
-
return if highlight_response.blank? ||
|
141
|
-
highlight_response[id].blank? ||
|
142
|
-
highlight_response[id][:text].blank?
|
143
|
-
|
144
|
-
highlight_response[id][:text]
|
120
|
+
highlight_field(CatalogController.blacklight_config.highlight_field)
|
145
121
|
end
|
146
122
|
|
147
123
|
# Factory method for constructing the Object modeling downloads
|
@@ -149,5 +125,26 @@ module Arclight
|
|
149
125
|
def downloads
|
150
126
|
@downloads ||= DocumentDownloads.new(self)
|
151
127
|
end
|
128
|
+
|
129
|
+
def ead_file
|
130
|
+
@ead_file ||= begin
|
131
|
+
files = Arclight::DocumentDownloads.new(self, collection_unitid).files
|
132
|
+
files.find do |file|
|
133
|
+
file.type == 'ead'
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def nest_path
|
139
|
+
self['_nest_path_']
|
140
|
+
end
|
141
|
+
|
142
|
+
def root
|
143
|
+
self['_root_'] || self['id']
|
144
|
+
end
|
145
|
+
|
146
|
+
def requestable?
|
147
|
+
repository_config&.request_types&.any?
|
148
|
+
end
|
152
149
|
end
|
153
150
|
end
|
@@ -3,25 +3,52 @@
|
|
3
3
|
module Arclight
|
4
4
|
# Custom presentation methods for show partial
|
5
5
|
class ShowPresenter < Blacklight::ShowPresenter
|
6
|
+
attr_accessor :field_group
|
7
|
+
|
8
|
+
delegate :collection?, to: :document
|
9
|
+
|
6
10
|
def heading
|
7
11
|
document.normalized_title
|
8
12
|
end
|
9
13
|
|
10
14
|
def with_field_group(group)
|
11
|
-
|
12
|
-
|
15
|
+
if block_given?
|
16
|
+
old_group = field_group
|
17
|
+
|
18
|
+
begin
|
19
|
+
self.field_group = group
|
20
|
+
yield(self)
|
21
|
+
ensure
|
22
|
+
self.field_group = old_group if block_given?
|
23
|
+
end
|
24
|
+
else
|
25
|
+
dup.tap { |x| x.field_group = group }
|
26
|
+
end
|
13
27
|
end
|
14
28
|
|
15
29
|
private
|
16
30
|
|
17
|
-
|
18
|
-
|
31
|
+
# @return [Hash<String,Configuration::Field>] all the fields for this index view
|
32
|
+
def fields
|
33
|
+
if field_group
|
34
|
+
configuration["#{field_group}s"] || []
|
35
|
+
else
|
36
|
+
super
|
37
|
+
end
|
19
38
|
end
|
20
39
|
|
21
|
-
attr_writer :field_group
|
22
|
-
|
23
40
|
def field_config(field)
|
24
|
-
|
41
|
+
return super unless field_group
|
42
|
+
|
43
|
+
fields.fetch(field) do
|
44
|
+
if defined?(Blacklight::Configuration::NullDisplayField)
|
45
|
+
# For Blacklight 8:
|
46
|
+
Blacklight::Configuration::NullDisplayField.new(field)
|
47
|
+
else
|
48
|
+
# Blacklight 7
|
49
|
+
Blacklight::Configuration::NullField.new(field)
|
50
|
+
end
|
51
|
+
end
|
25
52
|
end
|
26
53
|
end
|
27
54
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
<% if
|
2
|
-
<div class='
|
1
|
+
<% if document.requestable? %>
|
2
|
+
<div class='al-request'>
|
3
3
|
<% document.repository_config.available_request_types.each do |request_type| %>
|
4
4
|
<%= render partial: "arclight/requests/#{request_type}", locals: { document: document } %>
|
5
5
|
<% end %>
|
@@ -1,59 +1,40 @@
|
|
1
|
-
<div class="al-repository">
|
1
|
+
<div class="mb-3 mx-auto al-repository">
|
2
2
|
<div class="container">
|
3
3
|
<div class='row'>
|
4
|
-
<div class='col-2 align-self-center al-repository-thumbnail
|
5
|
-
<%= image_tag repository.thumbnail_url, alt: repository.name, class: 'img-fluid' %>
|
4
|
+
<div class='col-2 align-self-center d-none d-lg-block al-repository-thumbnail'>
|
5
|
+
<%= image_tag repository.thumbnail_url, alt: repository.name, class: 'img-fluid d-block mx-auto' %>
|
6
6
|
</div>
|
7
7
|
|
8
|
-
<div class="col-sm-12 col-lg-10 al-repository-information">
|
9
|
-
<%= content_tag(params[:id] == repository.slug ? :h1 : :h2, class: 'h5 repo-name') do %>
|
10
|
-
|
8
|
+
<div class="col-sm-12 col-lg-10 py-3 al-repository-information">
|
9
|
+
<%= content_tag(params[:id] == repository.slug ? :h1 : :h2, class: 'h5 mb-3 repo-name') do %>
|
10
|
+
<%= link_to_unless(params[:id] == repository.slug, repository.name, arclight_engine.repository_path(repository.slug)) %>
|
11
11
|
<% end %>
|
12
|
-
<div class='row no-gutters justify-content-
|
13
|
-
<div class='col-4 col-md-3 al-repository-contact'>
|
14
|
-
<address>
|
15
|
-
<div class="al-repository-street-address">
|
16
|
-
|
17
|
-
|
18
|
-
<div class='al-repository-street-address-<%= f %>'>
|
19
|
-
<%= repository.send(f) %>
|
20
|
-
</div>
|
21
|
-
<% end %>
|
22
|
-
<% end %>
|
23
|
-
</div>
|
12
|
+
<div class='row no-gutters justify-content-center'>
|
13
|
+
<div class='col-12 col-sm-4 col-md-3 fw-light al-repository-contact'>
|
14
|
+
<address class="text-break">
|
15
|
+
<div class="mb-3 al-repository-street-address">
|
16
|
+
<%= repository.location %>
|
17
|
+
</div>
|
24
18
|
|
25
19
|
<div class="al-repository-contact-info">
|
26
|
-
|
27
|
-
<div class='al-repository-contact-info-phone'>
|
28
|
-
<%= repository.phone %>
|
29
|
-
</div>
|
30
|
-
<% end %>
|
31
|
-
<% if repository.contact_info.present? %>
|
32
|
-
<div class='al-repository-contact-info-contact_info'>
|
33
|
-
<% if repository.contact_info.include?('@') %>
|
34
|
-
<%= mail_to repository.contact_info %>
|
35
|
-
<% else %>
|
36
|
-
<%= repository.contact_info %>
|
37
|
-
<% end %>
|
38
|
-
</div>
|
39
|
-
<% end %>
|
20
|
+
<%= repository.contact %>
|
40
21
|
</div>
|
41
22
|
</address>
|
42
23
|
</div>
|
43
24
|
|
44
|
-
<div class='col al-repository-description'>
|
25
|
+
<div class='col-12 col-sm mt-3 mt-sm-0 al-repository-description'>
|
45
26
|
<%= repository.description %>
|
46
27
|
</div>
|
47
28
|
|
48
29
|
<% if on_repositories_index? %>
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
<%= t(:'arclight.views.repositories.number_of_collections', count: repository.collection_count) %>
|
53
|
-
</span>
|
54
|
-
</div>
|
55
|
-
<%= link_to(t(:'arclight.views.repositories.view_more'), arclight_engine.repository_path(repository.slug), class: 'btn btn-secondary btn-sm') %>
|
30
|
+
<div class='col-12 col-lg-2 mt-3 mt-lg-0 text-center al-repository-extra'>
|
31
|
+
<div class='mb-1 fst-italic fw-bold'>
|
32
|
+
<%= t(:'arclight.views.repositories.number_of_collections', count: repository.collection_count) %>
|
56
33
|
</div>
|
34
|
+
<% if repository.collection_count&.positive? %>
|
35
|
+
<%= link_to(t(:'arclight.views.repositories.view_more'), arclight_engine.repository_path(repository.slug), class: 'btn btn-secondary btn-sm') %>
|
36
|
+
<% end %>
|
37
|
+
</div>
|
57
38
|
<% end %>
|
58
39
|
</div>
|
59
40
|
</div>
|
@@ -1,4 +1,5 @@
|
|
1
1
|
<% @page_title = t(:'arclight.views.repositories.show', name: @repository.name) %>
|
2
|
+
<% breadcrumb :repository, @repository %>
|
2
3
|
<%= render 'shared/breadcrumbs' %>
|
3
4
|
<%= render @repository %>
|
4
5
|
<div class="row al-repository-show-header">
|
@@ -16,16 +17,13 @@
|
|
16
17
|
|
17
18
|
<div class="row">
|
18
19
|
<% @collections.each do |document| %>
|
20
|
+
<% doc_presenter = Arclight::IndexPresenter.new(document, self, CatalogController.blacklight_config) %>
|
19
21
|
<div class="col-md-12">
|
20
22
|
<div class='al-document-title-bar'>
|
21
23
|
<div class='row'>
|
22
24
|
<div class='col-md-10 col-lg-9'>
|
23
|
-
<h3 class="h5"><%= link_to
|
24
|
-
<%=
|
25
|
-
<%= content_tag('div', 'data-arclight-truncate' => true) do %>
|
26
|
-
<%= document.abstract_or_scope %>
|
27
|
-
<% end %>
|
28
|
-
<% end if document.abstract_or_scope %>
|
25
|
+
<h3 class="h5"><%= link_to doc_presenter.label, solr_document_path(document.id) %></h3>
|
26
|
+
<%= render Arclight::IndexMetadataFieldComponent.with_collection(doc_presenter.field_presenters.select { |p| p.field_config.repository_context }) %>
|
29
27
|
</div>
|
30
28
|
<% if document.unitid %>
|
31
29
|
<div class='col text-right al-collection-id'>
|
@@ -1,9 +1,8 @@
|
|
1
|
-
<%
|
2
|
-
<% aeon_external_request ||= Arclight::Requests::AeonExternalRequest.new(document, show_presenter(document)) %>
|
1
|
+
<% aeon_external_request ||= Arclight::Requests::AeonExternalRequest.new(document, document_presenter(document)) %>
|
3
2
|
|
4
|
-
<%= form_tag aeon_external_request.url, method: :post, class: 'al-request-form' do |f| %>
|
5
|
-
<%=
|
6
|
-
<button type='submit' class='al-request-button btn-
|
3
|
+
<%= form_tag aeon_external_request.url, method: :post, class: 'd-inline-block al-request-form' do |f| %>
|
4
|
+
<%= render(Blacklight::HiddenSearchStateComponent.new(params: aeon_external_request.form_mapping)) %>
|
5
|
+
<button type='submit' class='al-request-button btn btn-primary btn-sm me-1'>
|
7
6
|
<%= t('arclight.request.container') %>
|
8
7
|
</button>
|
9
8
|
<% end %>
|
@@ -1,7 +1,6 @@
|
|
1
|
-
<%
|
2
|
-
<% if parsed_files = ead_files(document) %>
|
1
|
+
<% if parsed_files = document.ead_file %>
|
3
2
|
<% aeon_web_ead ||= Arclight::Requests::AeonWebEad.new(document, parsed_files.href) %>
|
4
3
|
<% aeon_web_ead_url = aeon_web_ead&.url %>
|
5
4
|
|
6
|
-
<%= link_to 'Request', aeon_web_ead_url, class: 'btn btn-
|
5
|
+
<%= link_to 'Request', aeon_web_ead_url, class: 'al-request-button btn btn-primary btn-sm me-1' %>
|
7
6
|
<% end %>
|
@@ -1,12 +1,10 @@
|
|
1
|
-
<%
|
2
|
-
<% google_form ||= Arclight::Requests::GoogleForm.new(document, show_presenter(document), solr_document_path(document)) %>
|
1
|
+
<% google_form ||= Arclight::Requests::GoogleForm.new(document, document_presenter(document), solr_document_path(document)) %>
|
3
2
|
|
4
|
-
<%= form_tag google_form.url, method: :get, class: 'al-request-form' do |f| %>
|
3
|
+
<%= form_tag google_form.url, method: :get, class: 'd-inline-block al-request-form' do |f| %>
|
5
4
|
<% google_form.form_mapping.each do |key, value| %>
|
6
|
-
<%= hidden_field_tag value, google_form.
|
5
|
+
<%= hidden_field_tag value, google_form.public_send(key) %>
|
7
6
|
<% end %>
|
8
|
-
|
9
|
-
<button type='submit' class='btn btn-secondary btn-sm'>
|
7
|
+
<button type='submit' class='al-request-button btn btn-primary btn-sm me-1'>
|
10
8
|
<%= t('arclight.request.container') %>
|
11
9
|
</button>
|
12
10
|
<% end %>
|
@@ -1,21 +1,4 @@
|
|
1
1
|
<% # container for all groups in index view -%>
|
2
2
|
<div class='al-grouped-results'>
|
3
|
-
|
4
|
-
<% parent_document = g.docs.first.parent_document %>
|
5
|
-
<%= render_document_partial(parent_document, :group_header) %>
|
6
|
-
<div class="grouped-documents">
|
7
|
-
<div class="al-grouped-more">
|
8
|
-
<% if g.total > 3 %>
|
9
|
-
<%= t('arclight.views.index.top_group_results', count: 3) %>
|
10
|
-
<%= link_to(
|
11
|
-
t('arclight.views.index.all_group_results', count: g.total),
|
12
|
-
search_catalog_path(search_within_collection(parent_document.collection_name, search_without_group)))
|
13
|
-
%>
|
14
|
-
<% else %>
|
15
|
-
<%= t('arclight.views.index.group_results_count', count: g.total) %>
|
16
|
-
<% end %>
|
17
|
-
</div>
|
18
|
-
<%= render_grouped_documents(g.docs) %>
|
19
|
-
</div>
|
20
|
-
<% end %>
|
3
|
+
<%= render (blacklight_config.view_config(document_index_view_type).group_component || Arclight::GroupComponent).with_collection(@response.groups) %>
|
21
4
|
</div>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<div class="result-type-group
|
1
|
+
<div class="result-type-group btn-group" role="group" aria-label="<%= t('arclight.views.index.group_results') %>">
|
2
2
|
<%= link_to t('arclight.views.index.all_results'),
|
3
3
|
search_catalog_path(search_without_group),
|
4
4
|
class: "btn btn-outline-secondary #{'active' unless grouped?}"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<p><%= params[:id] %></p>
|
2
|
+
<%= turbo_frame_tag "al-hierarchy-#{params[:id]}#{params[:key]}" do %>
|
3
|
+
<%= render partial: "paginate_compact", object: @response if show_pagination? && params[:paginate] %>
|
4
|
+
<% presenters = @response.documents.map{ | document | document_presenter(document) } %>
|
5
|
+
<% if params[:hierarchy].present? %>
|
6
|
+
<ul class="documents">
|
7
|
+
<%= render Arclight::DocumentCollectionHierarchyComponent.with_collection(presenters,
|
8
|
+
blacklight_config: blacklight_config,
|
9
|
+
nest_path: params[:nest_path]) %>
|
10
|
+
</ul>
|
11
|
+
<% else %>
|
12
|
+
<table class="table table-striped">
|
13
|
+
<%= render Arclight::DocumentCollectionContextComponent.with_collection(presenters,
|
14
|
+
blacklight_config: blacklight_config) %>
|
15
|
+
</table>
|
16
|
+
<% end %>
|
17
|
+
|
18
|
+
<%= render 'results_pagination' if params[:paginate] %>
|
19
|
+
<% end %>
|
@@ -1,8 +1,17 @@
|
|
1
|
-
<%
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
1
|
+
<% content_for(:sidebar) do %>
|
2
|
+
<% conf = blacklight_config.view_config(document_index_view_type) %>
|
3
|
+
<%= render conf.sidebar_component.new(blacklight_config: blacklight_config,
|
4
|
+
response: @response,
|
5
|
+
view_config: conf) %>
|
6
|
+
<% end %>
|
7
|
+
|
8
|
+
<% breadcrumb :search_results, search_state %>
|
9
|
+
|
10
|
+
<%= render 'search_results' %>
|
11
|
+
|
12
|
+
<%# override upstream to override the search results header, similar to https://github.com/projectblacklight/blacklight/pull/2831 %>
|
13
|
+
<%# This section can be omitted in Blacklight 8 %>
|
14
|
+
<% content_for(:container_header, flush: true) do -%>
|
15
|
+
<%= render 'search_results_header' %>
|
16
|
+
<%= render 'constraints' %>
|
8
17
|
<% end %>
|
@@ -1,15 +1,3 @@
|
|
1
|
-
<nav class='al-search-breadcrumb' role='navigation' aria-label
|
2
|
-
<%=
|
3
|
-
<span aria-hidden="true"><%= t('arclight.breadcrumb_separator') %></span>
|
4
|
-
<% if collection_active? %>
|
5
|
-
<%= t('arclight.routes.collections') %>
|
6
|
-
<% elsif on_repositories_index? %>
|
7
|
-
<%= t('arclight.routes.repositories') %>
|
8
|
-
<% elsif on_repositories_show? %>
|
9
|
-
<%= link_to t('arclight.routes.repositories'), arclight_engine.repositories_path %>
|
10
|
-
<span aria-hidden="true"><%= t('arclight.breadcrumb_separator') %></span>
|
11
|
-
<%= @repository.name %>
|
12
|
-
<% else %>
|
13
|
-
<%= t('arclight.routes.search_results') %>
|
14
|
-
<% end %>
|
1
|
+
<nav class='al-search-breadcrumb' role='navigation' aria-label="<%= t('arclight.breadcrumbs.aria_label') %>">
|
2
|
+
<%= breadcrumbs style: :bootstrap5, aria_current: 'page', autoroot: true %>
|
15
3
|
</nav>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<li class="nav-item <%= repositories_active_class %>">
|
2
2
|
<%= link_to t('arclight.routes.repositories'), arclight_engine.repositories_path, class: 'nav-link' %>
|
3
3
|
</li>
|
4
|
-
<li class="nav-item ml-3 <%= collection_active_class %>">
|
4
|
+
<li class="nav-item ml-3 ms-3 <%= collection_active_class %>">
|
5
5
|
<%= link_to t('arclight.routes.collections'), arclight_engine.collections_path, class: 'nav-link' %>
|
6
6
|
</li>
|
data/arclight.gemspec
CHANGED
@@ -12,20 +12,20 @@ Gem::Specification.new do |spec|
|
|
12
12
|
|
13
13
|
spec.summary = ''
|
14
14
|
spec.description = ''
|
15
|
-
spec.homepage = 'https://github.com/
|
15
|
+
spec.homepage = 'https://github.com/projectblacklight/arclight'
|
16
16
|
spec.license = 'Apache-2.0'
|
17
17
|
|
18
|
-
spec.
|
18
|
+
spec.required_ruby_version = '>= 3.0.0'
|
19
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
19
20
|
f.match(%r{^(test|spec|features)/})
|
20
21
|
end
|
21
22
|
spec.bindir = 'exe'
|
22
23
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
23
24
|
spec.require_paths = ['lib']
|
24
25
|
|
25
|
-
spec.add_dependency 'blacklight', '
|
26
|
-
spec.add_dependency '
|
27
|
-
spec.add_dependency 'rails', '
|
28
|
-
spec.add_dependency 'rexml'
|
26
|
+
spec.add_dependency 'blacklight', '>= 8.0.0.beta', '< 9'
|
27
|
+
spec.add_dependency 'gretel'
|
28
|
+
spec.add_dependency 'rails', '~> 7.0'
|
29
29
|
spec.add_dependency 'traject', '~> 3.0'
|
30
30
|
spec.add_dependency 'traject_plus', '~> 2.0'
|
31
31
|
|
@@ -37,6 +37,7 @@ Gem::Specification.new do |spec|
|
|
37
37
|
spec.add_development_dependency 'rspec-rails'
|
38
38
|
spec.add_development_dependency 'rubocop', '~> 1.8'
|
39
39
|
spec.add_development_dependency 'rubocop-rails', '~> 2.8'
|
40
|
+
spec.add_development_dependency 'rubocop-rake'
|
40
41
|
spec.add_development_dependency 'rubocop-rspec', '~> 2.3'
|
41
42
|
spec.add_development_dependency 'selenium-webdriver'
|
42
43
|
spec.add_development_dependency 'simplecov'
|
@@ -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