arclight 0.2.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.
Files changed (246) hide show
  1. checksums.yaml +4 -4
  2. data/.all-contributorsrc +450 -0
  3. data/.codeclimate.yml +5 -0
  4. data/.eslintrc +14 -4
  5. data/.github/workflows/ruby.yml +51 -0
  6. data/.gitignore +1 -0
  7. data/.rspec +0 -1
  8. data/.rubocop.yml +504 -8
  9. data/.rubocop_todo.yml +62 -199
  10. data/.solr_wrapper +2 -1
  11. data/CONTRIBUTING.md +5 -5
  12. data/CONTRIBUTORS.md +79 -0
  13. data/Gemfile +15 -10
  14. data/README.md +36 -34
  15. data/Rakefile +0 -1
  16. data/app/assets/images/blacklight/bookmark.svg +1 -0
  17. data/app/assets/images/blacklight/collection.svg +5 -0
  18. data/app/assets/images/blacklight/compact.svg +1 -25
  19. data/app/assets/images/blacklight/container.svg +5 -0
  20. data/app/assets/images/blacklight/ead.svg +1 -0
  21. data/app/assets/images/blacklight/file.svg +5 -0
  22. data/app/assets/images/blacklight/folder.svg +1 -0
  23. data/app/assets/images/blacklight/list.svg +1 -0
  24. data/app/assets/images/blacklight/minus.svg +1 -0
  25. data/app/assets/images/blacklight/online.svg +5 -0
  26. data/app/assets/images/blacklight/pdf.svg +1 -0
  27. data/app/assets/images/blacklight/plus.svg +1 -0
  28. data/app/assets/images/blacklight/repository.svg +1 -0
  29. data/app/assets/javascripts/arclight/arclight.js +4 -10
  30. data/app/assets/javascripts/arclight/oembed_controller.js +58 -0
  31. data/app/assets/javascripts/arclight/truncate_controller.js +27 -0
  32. data/app/assets/stylesheets/arclight/application.scss +4 -4
  33. data/app/assets/stylesheets/arclight/build.scss +4 -0
  34. data/app/assets/stylesheets/arclight/modules/hierarchy_and_online_contents.scss +117 -146
  35. data/app/assets/stylesheets/arclight/modules/highlights.scss +2 -1
  36. data/app/assets/stylesheets/arclight/modules/icons.scss +20 -0
  37. data/app/assets/stylesheets/arclight/modules/layout.scss +183 -40
  38. data/app/assets/stylesheets/arclight/modules/mastheads.scss +24 -75
  39. data/app/assets/stylesheets/arclight/modules/repositories.scss +3 -7
  40. data/app/assets/stylesheets/arclight/modules/repository_card.scss +5 -50
  41. data/app/assets/stylesheets/arclight/modules/search_form.scss +9 -0
  42. data/app/assets/stylesheets/arclight/modules/search_results.scss +197 -26
  43. data/app/assets/stylesheets/arclight/modules/show_collection.scss +21 -69
  44. data/app/assets/stylesheets/arclight/modules/truncator.scss +58 -0
  45. data/app/assets/stylesheets/arclight/responsive.scss +13 -0
  46. data/app/assets/stylesheets/arclight/variables.scss +25 -2
  47. data/app/components/arclight/access_component.html.erb +14 -0
  48. data/app/components/arclight/access_component.rb +25 -0
  49. data/app/components/arclight/bookmark_component.html.erb +25 -0
  50. data/app/components/arclight/bookmark_component.rb +9 -0
  51. data/app/components/arclight/breadcrumb_component.rb +50 -0
  52. data/app/components/arclight/breadcrumbs_hierarchy_component.html.erb +34 -0
  53. data/app/components/arclight/breadcrumbs_hierarchy_component.rb +25 -0
  54. data/app/components/arclight/collection_context_component.html.erb +12 -0
  55. data/app/components/arclight/collection_context_component.rb +27 -0
  56. data/app/components/arclight/collection_info_component.html.erb +28 -0
  57. data/app/components/arclight/collection_info_component.rb +26 -0
  58. data/app/components/arclight/collection_sidebar_component.html.erb +15 -0
  59. data/app/components/arclight/collection_sidebar_component.rb +39 -0
  60. data/app/{views/catalog/_search_results_repository.html.erb → components/arclight/constraints_component.html.erb} +2 -1
  61. data/app/components/arclight/constraints_component.rb +17 -0
  62. data/app/components/arclight/document_collection_context_component.html.erb +29 -0
  63. data/app/components/arclight/document_collection_context_component.rb +28 -0
  64. data/app/components/arclight/document_collection_hierarchy_component.html.erb +50 -0
  65. data/app/components/arclight/document_collection_hierarchy_component.rb +62 -0
  66. data/app/components/arclight/document_component.html.erb +39 -0
  67. data/app/components/arclight/document_component.rb +49 -0
  68. data/app/components/arclight/document_components_hierarchy_component.html.erb +20 -0
  69. data/app/components/arclight/document_components_hierarchy_component.rb +34 -0
  70. data/app/components/arclight/document_download_component.html.erb +24 -0
  71. data/app/components/arclight/document_download_component.rb +71 -0
  72. data/app/components/arclight/embed_component.html.erb +10 -0
  73. data/app/components/arclight/embed_component.rb +43 -0
  74. data/app/components/arclight/expand_hierarchy_button_component.html.erb +5 -0
  75. data/app/components/arclight/expand_hierarchy_button_component.rb +16 -0
  76. data/app/components/arclight/group_component.html.erb +34 -0
  77. data/app/components/arclight/group_component.rb +23 -0
  78. data/app/components/arclight/header_component.html.erb +5 -0
  79. data/app/components/arclight/header_component.rb +10 -0
  80. data/app/components/arclight/index_metadata_field_component.html.erb +16 -0
  81. data/app/components/arclight/index_metadata_field_component.rb +20 -0
  82. data/app/components/arclight/masthead_component.html.erb +17 -0
  83. data/app/components/arclight/masthead_component.rb +10 -0
  84. data/app/components/arclight/metadata_section_component.html.erb +13 -0
  85. data/app/components/arclight/metadata_section_component.rb +22 -0
  86. data/app/components/arclight/oembed_viewer_component.html.erb +5 -0
  87. data/app/components/arclight/oembed_viewer_component.rb +16 -0
  88. data/app/components/arclight/online_content_filter_component.html.erb +15 -0
  89. data/app/components/arclight/online_content_filter_component.rb +17 -0
  90. data/app/components/arclight/online_status_indicator_component.rb +19 -0
  91. data/app/components/arclight/repository_breadcrumb_component.html.erb +10 -0
  92. data/app/components/arclight/repository_breadcrumb_component.rb +17 -0
  93. data/app/components/arclight/repository_location_component.html.erb +20 -0
  94. data/app/components/arclight/repository_location_component.rb +10 -0
  95. data/app/components/arclight/search_bar_component.html.erb +27 -0
  96. data/app/components/arclight/search_bar_component.rb +32 -0
  97. data/app/components/arclight/search_result_breadcrumbs_component.html.erb +6 -0
  98. data/app/components/arclight/search_result_breadcrumbs_component.rb +37 -0
  99. data/app/components/arclight/search_result_component.html.erb +20 -0
  100. data/app/components/arclight/search_result_component.rb +18 -0
  101. data/app/components/arclight/search_result_title_component.html.erb +15 -0
  102. data/app/components/arclight/search_result_title_component.rb +15 -0
  103. data/app/components/arclight/sidebar_component.html.erb +9 -0
  104. data/app/components/arclight/sidebar_component.rb +19 -0
  105. data/app/components/arclight/upper_metadata_layout_component.rb +10 -0
  106. data/app/components/blacklight/icons/bookmark_component.rb +12 -0
  107. data/app/components/blacklight/icons/collection_component.rb +14 -0
  108. data/app/components/blacklight/icons/compact_component.rb +12 -0
  109. data/app/components/blacklight/icons/container_component.rb +14 -0
  110. data/app/components/blacklight/icons/ead_component.rb +12 -0
  111. data/app/components/blacklight/icons/file_component.rb +14 -0
  112. data/app/components/blacklight/icons/folder_component.rb +12 -0
  113. data/app/components/blacklight/icons/online_component.rb +15 -0
  114. data/app/components/blacklight/icons/pdf_component.rb +12 -0
  115. data/app/components/blacklight/icons/repository_component.rb +12 -0
  116. data/app/controllers/arclight/repositories_controller.rb +4 -4
  117. data/app/helpers/arclight/ead_format_helpers.rb +309 -0
  118. data/app/helpers/arclight/field_config_helpers.rb +26 -0
  119. data/app/helpers/arclight_helper.rb +55 -120
  120. data/app/models/arclight/document_downloads.rb +122 -0
  121. data/app/models/arclight/parent.rb +9 -9
  122. data/app/models/arclight/parents.rb +9 -4
  123. data/app/models/arclight/requests/aeon_external_request.rb +42 -0
  124. data/app/models/arclight/requests/aeon_web_ead.rb +52 -0
  125. data/app/models/arclight/requests/google_form.rb +8 -3
  126. data/app/models/concerns/arclight/catalog.rb +33 -11
  127. data/app/models/concerns/arclight/search_behavior.rb +22 -21
  128. data/app/models/concerns/arclight/solr_document.rb +88 -59
  129. data/app/presenters/arclight/show_presenter.rb +34 -7
  130. data/app/views/arclight/_requests.html.erb +7 -0
  131. data/app/views/arclight/repositories/_repository.html.erb +22 -41
  132. data/app/views/arclight/repositories/index.html.erb +5 -0
  133. data/app/views/arclight/repositories/show.html.erb +7 -8
  134. data/app/views/arclight/requests/_aeon_external_request_endpoint.html.erb +8 -0
  135. data/app/views/arclight/requests/_aeon_web_ead.html.erb +6 -0
  136. data/app/views/arclight/requests/_google_form.html.erb +4 -5
  137. data/app/views/catalog/_document_list.html.erb +8 -0
  138. data/app/views/catalog/_group.html.erb +4 -0
  139. data/app/views/catalog/_group_toggle.html.erb +10 -0
  140. data/app/views/catalog/_search_results_header.html.erb +3 -0
  141. data/app/views/catalog/hierarchy.html.erb +19 -0
  142. data/app/views/catalog/index.html.erb +16 -7
  143. data/app/views/shared/_breadcrumbs.html.erb +3 -15
  144. data/app/views/shared/_main_menu_links.html.erb +1 -1
  145. data/arclight.gemspec +18 -17
  146. data/config/breadcrumbs.rb +24 -0
  147. data/config/i18n-tasks.yml +11 -9
  148. data/config/importmap.rb +3 -0
  149. data/config/locales/arclight.en.yml +68 -34
  150. data/config/routes.rb +1 -1
  151. data/docker-compose.yml +16 -0
  152. data/lib/arclight/digital_object.rb +2 -1
  153. data/lib/arclight/engine.rb +22 -31
  154. data/lib/arclight/exceptions.rb +1 -0
  155. data/lib/arclight/hash_absolute_xpath.rb +13 -8
  156. data/lib/arclight/level_label.rb +46 -0
  157. data/lib/arclight/normalized_date.rb +5 -10
  158. data/lib/arclight/normalized_id.rb +7 -2
  159. data/lib/arclight/normalized_title.rb +3 -0
  160. data/lib/arclight/repository.rb +70 -28
  161. data/lib/arclight/routes/hierarchy.rb +19 -0
  162. data/lib/arclight/routes.rb +8 -0
  163. data/lib/arclight/traject/ead2_component_config.rb +335 -0
  164. data/lib/arclight/traject/ead2_config.rb +172 -331
  165. data/lib/arclight/traject/nokogiri_namespaceless_reader.rb +22 -0
  166. data/lib/arclight/version.rb +1 -1
  167. data/lib/arclight/year_range.rb +13 -4
  168. data/lib/arclight.rb +6 -1
  169. data/lib/generators/arclight/install_generator.rb +100 -10
  170. data/lib/generators/arclight/templates/arclight.scss +6 -3
  171. data/lib/generators/arclight/templates/catalog_controller.rb +237 -179
  172. data/lib/generators/arclight/templates/config/downloads.yml +12 -0
  173. data/lib/generators/arclight/templates/config/locales/arclight.en.yml +61 -0
  174. data/lib/generators/arclight/templates/config/repositories.yml +42 -31
  175. data/lib/generators/arclight/update_generator.rb +1 -1
  176. data/lib/tasks/index.rake +25 -30
  177. data/package.json +15 -9
  178. data/solr/conf/schema.xml +97 -328
  179. data/solr/conf/solrconfig.xml +99 -164
  180. data/tasks/arclight.rake +18 -9
  181. data/template.rb +6 -7
  182. metadata +188 -129
  183. data/.travis.yml +0 -28
  184. data/app/assets/javascripts/arclight/collection_context.js +0 -18
  185. data/app/assets/javascripts/arclight/collection_navigation.js +0 -117
  186. data/app/assets/javascripts/arclight/collection_scrollspy.js +0 -6
  187. data/app/assets/javascripts/arclight/component_ancestors.js +0 -56
  188. data/app/assets/javascripts/arclight/oembed_viewer.js +0 -46
  189. data/app/assets/javascripts/arclight/search_results.js +0 -15
  190. data/app/assets/javascripts/arclight/truncator.js.erb +0 -23
  191. data/app/assets/stylesheets/arclight/bootstrap_overrides.scss +0 -3
  192. data/app/assets/stylesheets/arclight/modules/sidebar.scss +0 -21
  193. data/app/controllers/concerns/arclight/field_config_helpers.rb +0 -86
  194. data/app/factories/blacklight_field_configuration_factory.rb +0 -29
  195. data/app/views/arclight/repositories/_in_person_repository.html.erb +0 -19
  196. data/app/views/arclight/viewers/_oembed.html.erb +0 -7
  197. data/app/views/catalog/_arclight_document_index_header.html.erb +0 -13
  198. data/app/views/catalog/_arclight_document_index_header_online_contents_default.html.erb +0 -0
  199. data/app/views/catalog/_arclight_index_compact_default.html.erb +0 -15
  200. data/app/views/catalog/_arclight_online_content_indicator.html.erb +0 -5
  201. data/app/views/catalog/_arclight_rangelimit.html.erb +0 -24
  202. data/app/views/catalog/_arclight_viewer_default.html.erb +0 -1
  203. data/app/views/catalog/_collection_contents.html.erb +0 -12
  204. data/app/views/catalog/_collection_count.html.erb +0 -7
  205. data/app/views/catalog/_collection_downloads.html.erb +0 -15
  206. data/app/views/catalog/_collection_online_contents.html.erb +0 -17
  207. data/app/views/catalog/_collection_overview.html.erb +0 -7
  208. data/app/views/catalog/_component_contents.html.erb +0 -16
  209. data/app/views/catalog/_component_overview.html.erb +0 -40
  210. data/app/views/catalog/_context_card.html.erb +0 -27
  211. data/app/views/catalog/_context_sidebar.html.erb +0 -8
  212. data/app/views/catalog/_custom_metadata.html.erb +0 -16
  213. data/app/views/catalog/_home.html.erb +0 -1
  214. data/app/views/catalog/_index_breadcrumb_default.html.erb +0 -3
  215. data/app/views/catalog/_index_default.html.erb +0 -17
  216. data/app/views/catalog/_index_header.html.erb +0 -7
  217. data/app/views/catalog/_index_header_hierarchy_default.html.erb +0 -42
  218. data/app/views/catalog/_index_header_online_contents_default.html.erb +0 -1
  219. data/app/views/catalog/_index_hierarchy_default.html.erb +0 -28
  220. data/app/views/catalog/_index_online_contents_default.html.erb +0 -6
  221. data/app/views/catalog/_results_histogram.html.erb +0 -15
  222. data/app/views/catalog/_search_results.html.erb +0 -31
  223. data/app/views/catalog/_show_breadcrumbs_default.html.erb +0 -21
  224. data/app/views/catalog/_show_collection.html.erb +0 -48
  225. data/app/views/catalog/_show_component_sidebar.html.erb +0 -12
  226. data/app/views/catalog/_show_default.html.erb +0 -42
  227. data/app/views/catalog/_show_sidebar.html.erb +0 -22
  228. data/app/views/catalog/_show_upper_metadata_collection.html.erb +0 -1
  229. data/app/views/catalog/_show_upper_metadata_default.html.erb +0 -14
  230. data/app/views/layouts/catalog_result.html.erb +0 -7
  231. data/app/views/shared/_context_sidebar.html.erb +0 -8
  232. data/app/views/shared/_header_navbar.html.erb +0 -65
  233. data/lib/arclight/custom_component.rb +0 -99
  234. data/lib/arclight/custom_document.rb +0 -93
  235. data/lib/arclight/indexer.rb +0 -9
  236. data/lib/arclight/shared_indexing_behavior.rb +0 -97
  237. data/lib/arclight/shared_terminology_behavior.rb +0 -65
  238. data/lib/arclight/solr_ead_indexer_ext.rb +0 -155
  239. data/lib/arclight/viewer.rb +0 -45
  240. data/lib/arclight/viewers/oembed.rb +0 -56
  241. data/lib/generators/arclight/templates/arclight.js +0 -2
  242. data/solr/conf/scripts.conf +0 -24
  243. data/vendor/assets/javascripts/responsiveTruncator.js +0 -69
  244. data/vendor/assets/javascripts/stickyfill.js +0 -480
  245. /data/app/assets/images/{blacklight → arclight}/logo.png +0 -0
  246. /data/{app/views/catalog/_arclight_document_index_header_hierarchy_default.html.erb → config/repositories.yml} +0 -0
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Arclight
4
+ module Traject
5
+ # Provides a Traject Reader for XML Documents which removes the namespaces
6
+ class NokogiriNamespacelessReader < ::Traject::NokogiriReader
7
+ # Overrides the #each method (which is used for iterating through each Document)
8
+ # @param args
9
+ # @see ::Traject::NokogiriReader#each
10
+ # @see Enumerable#each
11
+ def each(*args)
12
+ return to_enum(:each, *args) unless block_given?
13
+
14
+ super do |doc|
15
+ new_doc = doc.dup
16
+ new_doc.remove_namespaces!
17
+ yield new_doc
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Arclight
4
- VERSION = '0.2.0'
4
+ VERSION = '1.6.2'
5
5
  end
@@ -18,19 +18,20 @@ module Arclight
18
18
  def initialize(dates = nil)
19
19
  @years = []
20
20
  self << parse_ranges(dates) if dates.present?
21
- self
22
21
  end
23
22
 
24
23
  # @return [String] a concise, human-readable version of the year range, including gaps
25
24
  def to_s
26
25
  return if years.empty?
27
26
  return to_s_for_streak(years) unless gaps?
27
+
28
28
  to_s_with_gaps
29
29
  end
30
30
 
31
31
  # @param [Array<Integer>] `other` the set of years to add
32
32
  def <<(other)
33
33
  return self if other.blank?
34
+
34
35
  @years |= other # will remove duplicates
35
36
  @years.sort!
36
37
  self
@@ -40,10 +41,12 @@ module Arclight
40
41
  # @return [Array<Integer>] the set of years in the given range
41
42
  def parse_range(dates)
42
43
  return if dates.blank?
44
+
43
45
  start_year, end_year = dates.split('/').map { |date| to_year_from_iso8601(date) }
44
46
  return [start_year] if end_year.blank?
45
47
  raise ArgumentError, "Range is too large: #{dates}" if (end_year - start_year) > 1000
46
48
  raise ArgumentError, "Range is inverted: #{dates}" unless start_year <= end_year
49
+
47
50
  (start_year..end_year).to_a
48
51
  end
49
52
 
@@ -57,12 +60,14 @@ module Arclight
57
60
  # YYYY, YYYY-MM, YYYY-MM-DD, and YYYYMMDD
58
61
  def to_year_from_iso8601(date)
59
62
  return if date.blank?
63
+
60
64
  date.split('-').first[0..3].to_i # Time.parse doesn't work here
61
65
  end
62
66
 
63
67
  # @return [Boolean] are there gaps between the years, such as 1999, 2000, 2002?
64
68
  def gaps?
65
69
  return false if years.blank?
70
+
66
71
  (years.min..years.max).to_a != years
67
72
  end
68
73
 
@@ -71,12 +76,14 @@ module Arclight
71
76
  # Deals with making a human-readable range for years with 1 or more gaps.
72
77
  # It involves detection of streaks between the gaps.
73
78
  # @return [String] 1999-2000, 2002 for 1999, 2000, 2002
74
- def to_s_with_gaps # rubocop: disable Metrics/AbcSize, Metrics/MethodLength
79
+ # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
80
+ def to_s_with_gaps
75
81
  raise ArgumentError if years.blank? || years.length < 2
82
+
76
83
  results = []
77
84
  streak = [years[0]]
78
85
  i = streak.first
79
- years[1..-1].each do |j|
86
+ years[1..].each do |j|
80
87
  i += 1
81
88
  if i == j
82
89
  streak << j
@@ -93,10 +100,12 @@ module Arclight
93
100
  results << to_s_for_streak(streak)
94
101
  results.join(', ')
95
102
  end
103
+ # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
96
104
 
97
105
  def to_s_for_streak(streak)
98
106
  return streak.min.to_s if streak.min == streak.max
99
- [streak.min, streak.max].map(&:to_s).join('-')
107
+
108
+ streak.minmax.map(&:to_s).join('-')
100
109
  end
101
110
  end
102
111
  end
data/lib/arclight.rb CHANGED
@@ -5,6 +5,11 @@ require 'arclight/engine'
5
5
  require 'arclight/repository'
6
6
  require 'arclight/year_range'
7
7
 
8
+ # :nodoc:
8
9
  module Arclight
9
- # Your code goes here...
10
+ autoload :Routes, 'arclight/routes'
11
+
12
+ def self.deprecation
13
+ @deprecation ||= ActiveSupport::Deprecation.new('2.0', 'Arclight')
14
+ end
10
15
  end
@@ -5,8 +5,10 @@ require 'rails/generators'
5
5
  module Arclight
6
6
  ##
7
7
  # Arclight install generator
8
- class Install < Rails::Generators::Base
9
- source_root File.expand_path('../templates', __FILE__)
8
+ class Install < Rails::Generators::Base # rubocop:disable Metrics/ClassLength
9
+ source_root File.expand_path('templates', __dir__)
10
+
11
+ class_option :test, type: :boolean, default: false, aliases: '-t', desc: 'Indicates that app will be installed in a test environment'
10
12
 
11
13
  def create_blacklight_catalog
12
14
  remove_file 'app/controllers/catalog_controller.rb'
@@ -22,7 +24,7 @@ module Arclight
22
24
  def install_blacklight_locale_picker
23
25
  gem 'blacklight-locale_picker'
24
26
 
25
- Bundler.with_clean_env do
27
+ Bundler.with_unbundled_env do
26
28
  run 'bundle install'
27
29
  end
28
30
 
@@ -33,19 +35,39 @@ module Arclight
33
35
  end
34
36
  end
35
37
 
36
- def install_blacklight_range_limit
37
- generate 'blacklight_range_limit:install'
38
- end
39
-
40
38
  def add_custom_routes
41
39
  inject_into_file 'config/routes.rb', after: "mount Blacklight::Engine => '/'" do
42
- "\n mount Arclight::Engine => '/'\n"
40
+ "\n mount Arclight::Engine => '/'\n"
43
41
  end
42
+
43
+ gsub_file 'config/routes.rb', 'root to: "catalog#index"', 'root to: "arclight/repositories#index"'
44
44
  end
45
45
 
46
- def assets
46
+ def add_frontend
47
+ if ENV['CI']
48
+ run "yarn add file:#{Arclight::Engine.root}"
49
+ elsif options[:test]
50
+ run 'yarn link arclight'
51
+
52
+ # If a branch was specified (e.g. you are running a template.rb build
53
+ # against a test branch), use the latest version available on npm
54
+ elsif ENV['BRANCH']
55
+ run 'yarn add arclight@latest'
56
+
57
+ # Otherwise, pick the version from npm that matches the Arclight
58
+ # gem version
59
+ else
60
+ run "yarn add arclight@#{arclight_yarn_version}"
61
+ end
62
+ end
63
+
64
+ def add_stylesheets
47
65
  copy_file 'arclight.scss', 'app/assets/stylesheets/arclight.scss'
48
- copy_file 'arclight.js', 'app/assets/javascripts/arclight.js'
66
+ append_to_file 'app/assets/stylesheets/application.bootstrap.scss' do
67
+ <<~CONTENT
68
+ @import "arclight";
69
+ CONTENT
70
+ end
49
71
  end
50
72
 
51
73
  def add_arclight_search_behavior
@@ -66,8 +88,76 @@ module Arclight
66
88
  copy_file 'config/downloads.yml' unless File.exist?('config/downloads.yml')
67
89
  end
68
90
 
91
+ def add_i18n_config
92
+ copy_file 'config/locales/arclight.en.yml'
93
+ end
94
+
69
95
  def modify_blacklight_yml
70
96
  gsub_file 'config/locales/blacklight.en.yml', "application_name: 'Blacklight'", "application_name: 'Arclight'"
71
97
  end
98
+
99
+ def assets
100
+ if using_importmap?
101
+ pin_javascript_dependencies
102
+ import_arclight_javascript
103
+ else
104
+ install_javascript_dependencies
105
+ end
106
+ end
107
+
108
+ def inject_arclight_routes
109
+ inject_into_file 'config/routes.rb',
110
+ " concern :hierarchy, Arclight::Routes::Hierarchy.new\n",
111
+ after: /concern :exportable.*\n/
112
+ inject_into_file 'config/routes.rb',
113
+ " concerns :hierarchy\n",
114
+ after: /resources :solr_documents.*\n/
115
+ end
116
+
117
+ private
118
+
119
+ def root
120
+ @root ||= Pathname(destination_root)
121
+ end
122
+
123
+ def using_importmap?
124
+ @using_importmap ||= root.join('config/importmap.rb').exist?
125
+ end
126
+
127
+ # This is the last step because any failure here wouldn't prevent the other steps from running
128
+ def install_javascript_dependencies
129
+ inject_into_file 'app/assets/javascripts/application.js', after: '//= require blacklight/blacklight' do
130
+ "\n// Required by Arclight" \
131
+ "\n//= require arclight/arclight"
132
+ end
133
+ end
134
+
135
+ def pin_javascript_dependencies
136
+ say 'Arclight Importmap asset generation'
137
+
138
+ append_to_file 'config/importmap.rb', <<~RUBY
139
+ pin "arclight", to: "arclight/arclight.js"
140
+ # TODO: We may be able to move these to a single importmap for arclight.
141
+ pin "arclight/oembed_controller", to: "arclight/oembed_controller.js"
142
+ pin "arclight/truncate_controller", to: "arclight/truncate_controller.js"
143
+ RUBY
144
+ end
145
+
146
+ def import_arclight_javascript
147
+ append_to_file 'app/javascript/application.js', "\nimport \"arclight\""
148
+ end
149
+
150
+ def package_yarn_version(package_name, requested_version)
151
+ versions = JSON.parse(`yarn info #{package_name} versions --json`)['data']
152
+ exact_match = versions.find { |v| v == requested_version }
153
+ return exact_match if exact_match
154
+
155
+ major_version = Gem::Version.new(requested_version).segments.first
156
+ "^#{major_version}"
157
+ end
158
+
159
+ def arclight_yarn_version
160
+ package_yarn_version('arclight', Arclight::VERSION)
161
+ end
72
162
  end
73
163
  end
@@ -1,3 +1,6 @@
1
- /*
2
- *= require arclight/application
3
- */
1
+ :root {
2
+ --bs-breadcrumb-divider: "»";
3
+ }
4
+
5
+ // Arclight, imported from arclight frontend package
6
+ @import 'arclight/app/assets/stylesheets/arclight/application';