Skip to content
Snippets Groups Projects
Commit fb8a12c8 authored by Douwe Maan's avatar Douwe Maan Committed by Robert Speicher
Browse files

Don't show 'Copy content' button on text files that are not rendered as text

parent 520ed078
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -118,6 +118,10 @@ module BlobHelper
blob && blob.text? && !blob.lfs_pointer? && !blob.only_display_raw?
end
 
def blob_rendered_as_text?(blob)
blob_text_viewable?(blob) && blob.to_partial_path(@project) == 'text'
end
def blob_size(blob)
if blob.lfs_pointer?
blob.lfs_size
Loading
Loading
Loading
Loading
@@ -42,12 +42,16 @@ class Blob < SimpleDelegator
size && truncated?
end
 
def extension
extname.downcase.delete('.')
end
def svg?
text? && language && language.name == 'SVG'
end
 
def pdf?
name && File.extname(name) == '.pdf'
extension == 'pdf'
end
 
def ipython_notebook?
Loading
Loading
@@ -55,11 +59,15 @@ class Blob < SimpleDelegator
end
 
def sketch?
binary? && extname.downcase.delete('.') == 'sketch'
binary? && extension == 'sketch'
end
 
def stl?
extname.downcase.delete('.') == 'stl'
extension == 'stl'
end
def markup?
text? && Gitlab::MarkupHelper.markup?(name)
end
 
def size_within_svg_limits?
Loading
Loading
@@ -77,8 +85,10 @@ class Blob < SimpleDelegator
else
'text'
end
elsif image? || svg?
elsif image?
'image'
elsif svg?
'svg'
elsif pdf?
'pdf'
elsif ipython_notebook?
Loading
Loading
@@ -87,8 +97,18 @@ class Blob < SimpleDelegator
'sketch'
elsif stl?
'stl'
elsif markup?
if only_display_raw?
'too_large'
else
'markup'
end
elsif text?
'text'
if only_display_raw?
'too_large'
else
'text'
end
else
'download'
end
Loading
Loading
Loading
Loading
@@ -32,4 +32,10 @@
= link_to 'Fork', fork_path, method: :post, class: 'btn btn-grouped btn-inverted btn-new'
%button.js-cancel-fork-suggestion.btn.btn-grouped{ type: 'button' }
Cancel
= render blob.to_partial_path(@project), blob: blob
- if blob.empty?
.file-content.code
.nothing-here-block
Empty file
- else
= render blob.to_partial_path(@project), blob: blob
Loading
Loading
@@ -13,7 +13,7 @@
 
.file-actions.hidden-xs
.btn-group{ role: "group" }<
= copy_blob_content_button(blob) if !blame && blob_text_viewable?(blob)
= copy_blob_content_button(blob) if !blame && blob_rendered_as_text?(blob)
= open_raw_file_button(namespace_project_raw_path(@project.namespace, @project, @id))
= view_on_environment_button(@commit.sha, @path, @environment) if @environment
 
Loading
Loading
.file-content.image_file
- if blob.svg?
- if blob.size_within_svg_limits?
-# We need to scrub SVG but we cannot do so in the RawController: it would
-# be wrong/strange if RawController modified the data.
- blob.load_all_data!(@repository)
- blob = sanitize_svg(blob)
%img{ src: "data:#{blob.mime_type};base64,#{Base64.encode64(blob.data)}", alt: "#{blob.name}" }
- else
.nothing-here-block
The SVG could not be displayed as it is too large, you can
#{link_to('view the raw file', namespace_project_raw_path(@project.namespace, @project, @id), target: '_blank', rel: 'noopener noreferrer')}
instead.
- else
%img{ src: namespace_project_raw_path(@project.namespace, @project, tree_join(@commit.id, blob.path)), alt: "#{blob.name}" }
%img{ src: namespace_project_raw_path(@project.namespace, @project, @id), alt: blob.name }
- blob.load_all_data!(@repository)
.file-content.wiki
= render_markup(blob.name, blob.data)
- if blob.size_within_svg_limits?
-# We need to scrub SVG but we cannot do so in the RawController: it would
-# be wrong/strange if RawController modified the data.
- blob.load_all_data!(@repository)
- blob = sanitize_svg(blob)
.file-content.image_file
%img{ src: "data:#{blob.mime_type};base64,#{Base64.encode64(blob.data)}", alt: blob.name }
- else
= render 'too_large'
- if blob.only_display_raw?
.file-content.code
.nothing-here-block
File too large, you can
= succeed '.' do
= link_to 'view the raw file', namespace_project_raw_path(@project.namespace, @project, @id), target: '_blank', rel: 'noopener noreferrer'
- else
- blob.load_all_data!(@repository)
- if blob.empty?
.file-content.code
.nothing-here-block Empty file
- else
- if markup?(blob.name)
.file-content.wiki
= render_markup(blob.name, blob.data)
- else
= render 'shared/file_highlight', blob: blob, repository: @repository
- blob.load_all_data!(@repository)
= render 'shared/file_highlight', blob: blob, repository: @repository
.file-content.code
.nothing-here-block
The file could not be displayed as it is too large, you can
#{link_to('view the raw file', namespace_project_raw_path(@project.namespace, @project, @id), target: '_blank', rel: 'noopener noreferrer')}
instead.
Loading
Loading
@@ -55,13 +55,13 @@ describe Blob do
 
describe '#pdf?' do
it 'is falsey when file extension is not .pdf' do
git_blob = double(name: 'git_blob.txt')
git_blob = Gitlab::Git::Blob.new(name: 'git_blob.txt')
 
expect(described_class.decorate(git_blob)).not_to be_pdf
end
 
it 'is truthy when file extension is .pdf' do
git_blob = double(name: 'git_blob.pdf')
git_blob = Gitlab::Git::Blob.new(name: 'git_blob.pdf')
 
expect(described_class.decorate(git_blob)).to be_pdf
end
Loading
Loading
@@ -140,7 +140,7 @@ describe Blob do
stl?: false
)
 
described_class.decorate(double).tap do |blob|
described_class.decorate(Gitlab::Git::Blob.new({})).tap do |blob|
allow(blob).to receive_messages(overrides)
end
end
Loading
Loading
@@ -158,7 +158,7 @@ describe Blob do
 
it 'handles SVGs' do
blob = stubbed_blob(text?: true, svg?: true)
expect(blob.to_partial_path(project)).to eq 'image'
expect(blob.to_partial_path(project)).to eq 'svg'
end
 
it 'handles images' do
Loading
Loading
@@ -167,7 +167,7 @@ describe Blob do
end
 
it 'handles text' do
blob = stubbed_blob(text?: true)
blob = stubbed_blob(text?: true, name: 'test.txt')
expect(blob.to_partial_path(project)).to eq 'text'
end
 
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment