diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 7589bb09a..e74a2b373 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,6 +1,6 @@ # This configuration was generated by # `rubocop --auto-gen-config --auto-gen-only-exclude` -# on 2025-01-30 20:21:06 UTC using RuboCop version 1.71.0. +# on 2025-02-03 20:11:42 UTC using RuboCop version 1.71.1. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new @@ -33,10 +33,11 @@ Metrics/MethodLength: - 'app/viewers/embed/viewer/m3_viewer.rb' - 'lib/embed/request.rb' -# Offense count: 13 +# Offense count: 15 RSpec/AnyInstance: Exclude: - 'spec/components/legacy/was_seed_component_spec.rb' + - 'spec/components/was_seed_component_spec.rb' - 'spec/features/was_seed_viewer_spec.rb' - 'spec/lib/embed/viewer/m3_viewer_spec.rb' - 'spec/models/embed/purl_spec.rb' diff --git a/app/assets/stylesheets/was_seed.css b/app/assets/stylesheets/was_seed.css new file mode 100644 index 000000000..3f1913ee8 --- /dev/null +++ b/app/assets/stylesheets/was_seed.css @@ -0,0 +1 @@ +@import url("companion_window.css"); diff --git a/app/components/was_seed_component.html.erb b/app/components/was_seed_component.html.erb new file mode 100644 index 000000000..ff1db8d9e --- /dev/null +++ b/app/components/was_seed_component.html.erb @@ -0,0 +1,30 @@ +<%= render ::CompanionWindowsComponent.new(viewer:, stimulus_controller: 'file-auth fullscreen') do |component| %> + <% component.with_body do %> +
+
+ <%= link_to viewer.archived_site_url, target: '_top' do %> +
+ <%= image_tag viewer.shelved_thumb, alt: '' %> +
+ Stanford Web Archive Portal + <% end %> +
+
+ <% if viewer.capture_list.length.positive? %> +

+ <%= "Captured #{pluralize(viewer.capture_list.length, 'time')} between #{viewer.format_memento_datetime(viewer.capture_list.first.datetime)} and #{viewer.format_memento_datetime(viewer.capture_list.last.datetime)}" %> +

+ <% end %> + +
+
+ <% end %> +<% end %> diff --git a/app/components/was_seed_component.rb b/app/components/was_seed_component.rb new file mode 100644 index 000000000..509740fa9 --- /dev/null +++ b/app/components/was_seed_component.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +class WasSeedComponent < ViewComponent::Base + def initialize(viewer:) + @viewer = viewer + end + + attr_reader :viewer + + delegate :purl_object, to: :viewer + delegate :druid, to: :purl_object +end diff --git a/app/controllers/embed_controller.rb b/app/controllers/embed_controller.rb index b926612cb..3b20f06f8 100644 --- a/app/controllers/embed_controller.rb +++ b/app/controllers/embed_controller.rb @@ -54,7 +54,7 @@ def linted_params rescue URI::InvalidURIError raise ActionController::BadRequest end - params.permit(:url, :maxwidth, :maxheight, :format, :fullheight, :new_component, + params.permit(:url, :maxwidth, :maxheight, :format, :fullheight, :new_viewer, :hide_title, :hide_embed, :hide_download, :hide_search, :min_files_to_search, :canvas_id, :canvas_index, :search, :suggested_search, :image_tools, :cdl_hold_record_id) end diff --git a/app/javascript/webarchive.js b/app/javascript/webarchive.js new file mode 100644 index 000000000..72ef077f8 --- /dev/null +++ b/app/javascript/webarchive.js @@ -0,0 +1 @@ +import "controllers" diff --git a/app/viewers/embed/viewer/common_viewer.rb b/app/viewers/embed/viewer/common_viewer.rb index 3f7458f95..6421e32a5 100644 --- a/app/viewers/embed/viewer/common_viewer.rb +++ b/app/viewers/embed/viewer/common_viewer.rb @@ -9,6 +9,8 @@ class CommonViewer attr_reader :purl_object, :embed_request + delegate :new_viewer?, to: :embed_request + def initialize(embed_request) @embed_request = embed_request @purl_object = embed_request.purl_object diff --git a/app/viewers/embed/viewer/was_seed.rb b/app/viewers/embed/viewer/was_seed.rb index 9b4be853a..68a01bade 100644 --- a/app/viewers/embed/viewer/was_seed.rb +++ b/app/viewers/embed/viewer/was_seed.rb @@ -6,15 +6,15 @@ class WasSeed < CommonViewer delegate :druid, to: :@purl_object def component - Legacy::WasSeedComponent + new_viewer? ? WasSeedComponent : Legacy::WasSeedComponent end def importmap - 'legacy_webarchive' + new_viewer? ? 'webarchive' : 'legacy_webarchive' end def stylesheet - 'legacy_was_seed.css' + new_viewer? ? 'was_seed.css' : 'legacy_was_seed.css' end def capture_list diff --git a/config/importmap.rb b/config/importmap.rb index 6aeefc300..11508b0e1 100644 --- a/config/importmap.rb +++ b/config/importmap.rb @@ -2,6 +2,7 @@ pin "media", preload: true pin "legacy_webarchive", preload: true +pin "webarchive", preload: true pin "legacy_file", preload: true pin "document", preload: true pin "legacy_3d", preload: true diff --git a/config/locales/en.yml b/config/locales/en.yml index dad1849a1..4deec1d78 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -49,6 +49,7 @@ en: title: "3-D object viewer" was_seed: title: "File viewer" + content_list_heading: TBD download_files: zero: "No file available for download" one: "1 file available for download" diff --git a/lib/embed/request.rb b/lib/embed/request.rb index f80a22c0e..8f53458c4 100644 --- a/lib/embed/request.rb +++ b/lib/embed/request.rb @@ -50,6 +50,11 @@ def hide_search? params[:hide_search] == 'true' end + # This is a temporary method that allows us to test new viewers before making them the default + def new_viewer? + params[:new_viewer] == 'true' + end + def min_files_to_search params[:min_files_to_search] end diff --git a/spec/components/was_seed_component_spec.rb b/spec/components/was_seed_component_spec.rb new file mode 100644 index 000000000..1b6edba86 --- /dev/null +++ b/spec/components/was_seed_component_spec.rb @@ -0,0 +1,53 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe WasSeedComponent, type: :component do + include WasTimeMapFixtures + + let(:embed_request) do + Embed::Request.new(url: 'http://purl.stanford.edu/abc123', new_viewer: 'true') + end + let(:viewer) { Embed::Viewer::WasSeed.new(embed_request) } + let(:purl) { build(:purl, :was_seed) } + + before do + allow(Embed::Purl).to receive(:find).and_return(purl) + end + + context 'with current timemap behavior' do + let(:fake_connection) do + instance_double(Faraday::Connection, get: instance_double(Faraday::Response, body: timemap, success?: true)) + end + + before do + allow_any_instance_of(Embed::WasTimeMap).to receive(:redirectable_connection).and_return(fake_connection) + render_inline(described_class.new(viewer:)) + end + + it 'displays Was Seed viewer body' do + # visible false because we display:none the container until we've loaded the CSS. + expect(page).to have_content 'Stanford Web Archive Portal' + expect(page).to have_content 'Captured 7 times between 18 July 2009 and 15 June 2011' + expect(page).to have_css '.sul-embed-was-seed-list-item', visible: :all, count: 7 + end + end + + context 'with new timemap behavior' do + let(:fake_connection) do + instance_double(Faraday::Connection, get: instance_double(Faraday::Response, body: timemap_new, success?: true)) + end + + before do + allow_any_instance_of(Embed::WasTimeMap).to receive(:redirectable_connection).and_return(fake_connection) + render_inline(described_class.new(viewer:)) + end + + it 'displays Was Seed viewer body' do + # visible false because we display:none the container until we've loaded the CSS. + expect(page).to have_content 'Stanford Web Archive Portal' + expect(page).to have_content 'Captured 7 times between 18 July 2009 and 15 June 2011' + expect(page).to have_css '.sul-embed-was-seed-list-item', visible: :all, count: 7 + end + end +end