From 56cc8e8eb2ed037a9ef2d1b585367da02053da50 Mon Sep 17 00:00:00 2001 From: Gregor Schmidt Date: Tue, 12 Apr 2016 12:17:38 +0200 Subject: [PATCH 2/2] Show pdf preview for repository files and attachments MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The preview renders an iframe/object with the PDF. Since we cannot easily know the pdf’s dimensions, the frame size follows the following rules: * it is as wide as possible (100%) * in general it is as high as it is wide * it is never higher than 80 % of the viewport (80vh), since we want to make sure, that there is always a bit of Redmine UI visible to avoid getting “trapped” within the frame --- app/controllers/attachments_controller.rb | 2 ++ app/views/attachments/_links.html.erb | 2 +- app/views/attachments/pdf.html.erb | 3 +++ app/views/common/_pdf.html.erb | 7 +++++ app/views/repositories/entry.html.erb | 2 ++ public/stylesheets/scm.css | 29 +++++++++++++++++++++ test/fixtures/attachments.yml | 14 ++++++++++ .../files/2006/07/060719210727_example.pdf | Bin 0 -> 23415 bytes test/functional/attachments_controller_test.rb | 12 +++++++++ 9 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 app/views/attachments/pdf.html.erb create mode 100644 app/views/common/_pdf.html.erb create mode 100644 test/fixtures/files/2006/07/060719210727_example.pdf diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index ea45397..308bd08 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -42,6 +42,8 @@ class AttachmentsController < ApplicationController render :action => 'file' elsif @attachment.is_image? render :action => 'image' + elsif @attachment.is_pdf? + render :action => 'pdf' else render :action => 'other' end diff --git a/app/views/attachments/_links.html.erb b/app/views/attachments/_links.html.erb index 797f8bb..bc0991b 100644 --- a/app/views/attachments/_links.html.erb +++ b/app/views/attachments/_links.html.erb @@ -8,7 +8,7 @@ <% for attachment in attachments %>

<%= link_to_attachment attachment, :class => 'icon icon-attachment', :download => true -%> - <% if attachment.is_text? || attachment.is_image? %> + <% if attachment.is_text? || attachment.is_image? || attachment.is_pdf? %> <%= link_to l(:button_view), { :controller => 'attachments', :action => 'show', :id => attachment, :filename => attachment.filename }, diff --git a/app/views/attachments/pdf.html.erb b/app/views/attachments/pdf.html.erb new file mode 100644 index 0000000..cf2db6d --- /dev/null +++ b/app/views/attachments/pdf.html.erb @@ -0,0 +1,3 @@ +<%= render :layout => 'layouts/file' do %> + <%= render :partial => 'common/pdf', :locals => {:path => download_named_attachment_url(@attachment, @attachment.filename)} %> +<% end %> diff --git a/app/views/common/_pdf.html.erb b/app/views/common/_pdf.html.erb new file mode 100644 index 0000000..beade99 --- /dev/null +++ b/app/views/common/_pdf.html.erb @@ -0,0 +1,7 @@ +

+ + + +
diff --git a/app/views/repositories/entry.html.erb b/app/views/repositories/entry.html.erb index 37a5db9..38e487c 100644 --- a/app/views/repositories/entry.html.erb +++ b/app/views/repositories/entry.html.erb @@ -10,6 +10,8 @@ <% if Redmine::MimeType.is_type?('image', @path) %> <%= render :partial => 'common/image', :locals => {:path => url_for(params.merge(:action => 'raw')), :alt => @path} %> +<% elsif Redmine::MimeType.of(@path) == 'application/pdf' %> + <%= render :partial => 'common/pdf', :locals => {:path => url_for(params.merge(:action => 'raw'))} %> <% elsif @content %> <%= render :partial => 'common/file', :locals => {:filename => @path, :content => @content} %> <% else %> diff --git a/public/stylesheets/scm.css b/public/stylesheets/scm.css index f1c65f9..eca1e94 100644 --- a/public/stylesheets/scm.css +++ b/public/stylesheets/scm.css @@ -69,6 +69,35 @@ table.filecontent tr:target td.line-code { background-color:#DDEEFF; } img.filecontent { max-width: 100%; margin-top: 1em;} +.filecontent.pdf { + width: 100%; + max-height: 80vh; + overflow: hidden; + position: relative; +} +.filecontent.pdf:before { + content: " "; + display: block; + width: 100%; + padding-bottom: 100%; +} + +.filecontent.pdf object, +.filecontent.pdf iframe, +.filecontent.pdf p { + position: absolute; + top: 0; + left: 0; + right: 0; +} +.filecontent.pdf iframe, +.filecontent.pdf object { + border: none; + width: 100%; + height: 100%; +} + + /* 12 different colors for the annonate view */ table.annotate tr.bloc-0 {background: #FFFFBF;} table.annotate tr.bloc-1 {background: #EABFFF;} diff --git a/test/fixtures/attachments.yml b/test/fixtures/attachments.yml index 6f56c08..0ada594 100644 --- a/test/fixtures/attachments.yml +++ b/test/fixtures/attachments.yml @@ -267,3 +267,17 @@ attachments_020: filename: root_attachment.txt filesize: 54 author_id: 2 +attachments_021: + created_on: 2006-07-19 21:07:27 +02:00 + container_type: Issue + container_id: 2 + downloads: 0 + disk_filename: 060719210727_example.pdf + disk_directory: "2006/07" + digest: ab1e1922943ce0777efaea3c780295c8 + id: 21 + filesize: 23415 + filename: example.pdf + author_id: 2 + description: This is a PDF file + content_type: application/pdf diff --git a/test/fixtures/files/2006/07/060719210727_example.pdf b/test/fixtures/files/2006/07/060719210727_example.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4d8caa7f754de12d64fd5576cfebbfb32d58be0d GIT binary patch literal 23415 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 b<>xWn-2?ddvcK?QFcE+(#Konkr9}20kdV~^ literal 0 HcmV?d00001 diff --git a/test/functional/attachments_controller_test.rb b/test/functional/attachments_controller_test.rb index 5d33879..088cf43 100644 --- a/test/functional/attachments_controller_test.rb +++ b/test/functional/attachments_controller_test.rb @@ -199,6 +199,18 @@ class AttachmentsControllerTest < ActionController::TestCase assert_select 'img.filecontent', :src => attachments(:attachments_010).filename end + def test_show_pdf + get :show, :id => 21 + assert_response :success + assert_template 'pdf' + assert_equal 'text/html', @response.content_type + + assert_select '.filecontent.pdf object', :src => attachments(:attachments_010).filename + assert_select '.filecontent.pdf iframe', :src => attachments(:attachments_010).filename + + assert_select '.nodata', :text => 'No preview available' + end + def test_show_other get :show, :id => 6 assert_template 'other' -- 2.8.0