Browse Source

Adds previews for audio / video attachments (#27336).

Patch by Jens Kraemer.


git-svn-id: http://svn.redmine.org/redmine/trunk@17340 e93f8b46-1217-0410-a6f0-8f06a7374b81
tags/4.0.0
Go MAEDA 6 years ago
parent
commit
37d1fcf8a4

+ 9
- 1
app/models/attachment.rb View File

@@ -250,8 +250,16 @@ class Attachment < ActiveRecord::Base
Redmine::MimeType.of(filename) == "application/pdf"
end

def is_video?
Redmine::MimeType.is_type?('video', filename)
end

def is_audio?
Redmine::MimeType.is_type?('audio', filename)
end

def previewable?
is_text? || is_image?
is_text? || is_image? || is_video? || is_audio?
end

# Returns true if the file is readable

+ 11
- 1
app/views/attachments/other.html.erb View File

@@ -1,6 +1,16 @@
<%= render :layout => 'layouts/file' do %>
<%= render :partial => 'common/other',

<% kind = if @attachment.is_video?
'video'
elsif @attachment.is_audio?
'audio'
end %>

<%= render :partial => "common/other",
:locals => {
:kind => kind,
:path => download_named_attachment_url(@attachment,
@attachment.filename),
:download_link => link_to_attachment(
@attachment,
:text => l(:label_no_preview_download),

+ 8
- 0
app/views/common/_no_preview.html.erb View File

@@ -0,0 +1,8 @@
<p class="nodata">
<% if download_link %>
<%= t(:label_no_preview_alternative_html, link: download_link) %>
<% else %>
<%= l(:label_no_preview) %>
<% end %>
</p>


+ 22
- 6
app/views/common/_other.html.erb View File

@@ -1,7 +1,23 @@
<p class="nodata">
<% if defined? download_link %>
<%= t(:label_no_preview_alternative_html, link: download_link) %>
<% download_link = nil unless defined? download_link %>
<% kind = nil unless defined? kind %>
<% path = nil unless defined? path %>

<% if path.present? %>

<% if kind == 'video' %>
<%= content_tag :video, class: 'filecontent', src: path, controls: true do %>
<%= render partial: 'common/no_preview', locals: { download_link: download_link } %>
<% end %>
<% elsif kind == 'audio' %>
<%= content_tag :audio, class: 'filecontent', src: path, controls: true do %>
<%= render partial: 'common/no_preview', locals: { download_link: download_link } %>
<% end %>
<% else %>
<%= l(:label_no_preview) %>
<% end %>
</p>
<%= render partial: 'common/no_preview', locals: { download_link: download_link } %>
<% end %>

<% else %>

<%= render partial: 'common/no_preview', locals: { download_link: download_link } %>

<% end %>

+ 7
- 0
app/views/repositories/entry.html.erb View File

@@ -17,8 +17,15 @@
<% elsif @content %>
<%= render :partial => 'common/file', :locals => {:filename => @path, :content => @content} %>
<% else %>
<% kind = if Redmine::MimeType.is_type?('video', @path)
'video'
elsif Redmine::MimeType.is_type?('audio', @path)
'audio'
end %>
<%= render :partial => 'common/other',
:locals => {
:path => (url_for(params.merge(:action => 'raw')) if @allow_download),
:kind => kind,
:download_link => @repository.supports_cat? ? link_to(
l(:label_no_preview_download),
{ :action => 'raw', :id => @project,

+ 1
- 0
lib/redmine/mime_type.rb View File

@@ -46,6 +46,7 @@ module Redmine
'image/x-ms-bmp' => 'bmp',
'application/javascript' => 'js',
'application/pdf' => 'pdf',
'video/mp4' => 'mp4',
}.freeze

EXTENSIONS = MIME_TYPES.inject({}) do |map, (type, exts)|

+ 1
- 1
public/stylesheets/scm.css View File

@@ -71,7 +71,7 @@ table.filecontent td.line-code pre {
table.filecontent tr:target th.line-num { background-color:#E0E0E0; color: #777; }
table.filecontent tr:target td.line-code { background-color:#DDEEFF; }

img.filecontent { max-width: 100%; }
img.filecontent, video.filecontent { max-width: 100%; }

.previous-filename {
font-weight: normal;

Loading…
Cancel
Save