diff --git a/app/components/custom_viewer_component.html.erb b/app/components/custom_viewer_component.html.erb index e566fa6eb..08dddbc55 100644 --- a/app/components/custom_viewer_component.html.erb +++ b/app/components/custom_viewer_component.html.erb @@ -1,5 +1,5 @@ <% if document.external_iiif? %> - <%= render partial: "embedded_mirador3", locals: {document: document} %> + <%= render EmbeddedMiradorComponent.new(document:) %> <% elsif document.uploaded_resource? %> <%= render Blacklight::Gallery::OpenseadragonEmbedComponent.new(document: document, presenter: presenter, view_config: view_config) %> <% else %> diff --git a/app/components/embedded_mirador_component.html.erb b/app/components/embedded_mirador_component.html.erb new file mode 100644 index 000000000..0ace09e56 --- /dev/null +++ b/app/components/embedded_mirador_component.html.erb @@ -0,0 +1,11 @@ +<%= content_tag :iframe, '', + src: iframe_src, + allowfullscreen: true, + class: 'mirador-embed-wrapper', + frameborder: 0, + marginwidth: 0, + marginheight: 0, + scrolling: 'no', + width: '100%' + %> +<%= iiif_drag_n_drop(manifest_url, document:) %> diff --git a/app/components/embedded_mirador_component.rb b/app/components/embedded_mirador_component.rb new file mode 100644 index 000000000..041c51f54 --- /dev/null +++ b/app/components/embedded_mirador_component.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +# Display the embed iframe +class EmbeddedMiradorComponent < ViewComponent::Base + def initialize(document:) + @document = document + super + end + + attr_reader :document + + delegate :iiif_drag_n_drop, to: :helpers + + def render? + document.manifest_url.present? + end + + def manifest_url + @manifest_url ||= doc_manifest.starts_with?('/') ? root_url + doc_manifest.slice(1..-1) : doc_manifest + end + + def iframe_src + "#{Settings.iiif_embed.url}?#{{ url: manifest_url }.to_query}" + end + + def doc_manifest + document.manifest_url + end +end diff --git a/app/views/catalog/_embedded_mirador3.html.erb b/app/views/catalog/_embedded_mirador3.html.erb deleted file mode 100644 index fb9bcd905..000000000 --- a/app/views/catalog/_embedded_mirador3.html.erb +++ /dev/null @@ -1,14 +0,0 @@ -<% if document.manifest_url.present? %> - <% manifest_url = document.manifest_url.starts_with?('/') ? root_url + document.manifest_url.slice(1..-1) : document.manifest_url %> - <%= content_tag :iframe, '', - src: "#{Settings.iiif_embed.url}?#{{ url: manifest_url }.to_query}", - allowfullscreen: true, - class: 'mirador-embed-wrapper', - frameborder: 0, - marginwidth: 0, - marginheight: 0, - scrolling: 'no', - width: '100%' - %> - <%= iiif_drag_n_drop(manifest_url, document:) %> -<% end %> diff --git a/spec/components/custom_viewer_component_spec.rb b/spec/components/custom_viewer_component_spec.rb new file mode 100644 index 000000000..ee7411408 --- /dev/null +++ b/spec/components/custom_viewer_component_spec.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe CustomViewerComponent, type: :component do + let(:component) { described_class.new(document:, presenter:) } + let(:presenter) { double } + let(:exhibit) { create(:exhibit) } + let(:manifest_url) { 'http://example.com/iiif/manifest' } + + before do + exhibit.required_viewer.viewer_type = 'mirador3' + exhibit.required_viewer.save + with_request_url "/#{exhibit.slug}/catalog/cf101bh9631" do + render_inline(component) + end + end + + context 'with external_iiif resource' do + let(:document) do + SolrDocument.new(id: 'abc', iiif_manifest_url_ssi: manifest_url, + spotlight_resource_type_ssim: ['spotlight/resources/iiif_harvesters']) + end + + it 'renders the component' do + expect(page).to have_css "iframe[src='https://embed.stanford.edu/iiif?#{{ url: manifest_url }.to_query}']" + end + end +end diff --git a/spec/views/catalog/_embedded_mirador3.html.erb_spec.rb b/spec/components/embedded_mirador_component_spec.rb similarity index 52% rename from spec/views/catalog/_embedded_mirador3.html.erb_spec.rb rename to spec/components/embedded_mirador_component_spec.rb index eacffca5d..b626d2cad 100644 --- a/spec/views/catalog/_embedded_mirador3.html.erb_spec.rb +++ b/spec/components/embedded_mirador_component_spec.rb @@ -2,22 +2,17 @@ require 'rails_helper' -describe 'catalog/_embedded_mirador3' do +RSpec.describe EmbeddedMiradorComponent, type: :component do + let(:component) { described_class.new(document:) } let(:document) { SolrDocument.new(id: 'abc', iiif_manifest_url_ssi: manifest_url) } let(:manifest_url) { 'http://example.com/iiif/manifest' } before do - without_partial_double_verification do - allow(view).to receive_messages( - document: document - ) - end + render_inline(component) end it 'renders an iframe' do - render - - expect(rendered).to have_css "iframe[src='https://embed.stanford.edu/iiif?#{{ url: manifest_url }.to_query}']" + expect(page).to have_css "iframe[src='https://embed.stanford.edu/iiif?#{{ url: manifest_url }.to_query}']" end context 'with a local IIIF manifest' do @@ -26,9 +21,7 @@ it 'uses the full url to the manifest' do expected_url = 'http://test.host/iiif/manifest' - render - - expect(rendered).to have_css "iframe[src='https://embed.stanford.edu/iiif?#{{ url: expected_url }.to_query}']" + expect(page).to have_css "iframe[src='https://embed.stanford.edu/iiif?#{{ url: expected_url }.to_query}']" end end end