Commit 0c8a2edf authored by Robert Speicher's avatar Robert Speicher

Merge branch 'add-blob-copy-button' into 'master'

Add copy button to blob header and use icon for Raw button

See merge request !9878
parents bd2b76ce 82cc38d7
...@@ -8,9 +8,12 @@ class Projects::BlameController < Projects::ApplicationController ...@@ -8,9 +8,12 @@ class Projects::BlameController < Projects::ApplicationController
def show def show
@blob = @repository.blob_at(@commit.id, @path) @blob = @repository.blob_at(@commit.id, @path)
return render_404 unless @blob return render_404 unless @blob
environment_params = @repository.branch_exists?(@ref) ? { ref: @ref } : { commit: @commit }
@environment = EnvironmentsFinder.new(@project, current_user, environment_params).execute.last
@blame_groups = Gitlab::Blame.new(@blob, @commit).groups @blame_groups = Gitlab::Blame.new(@blob, @commit).groups
end end
end end
...@@ -203,4 +203,18 @@ module BlobHelper ...@@ -203,4 +203,18 @@ module BlobHelper
'blob-language' => @blob && @blob.language.try(:ace_mode) 'blob-language' => @blob && @blob.language.try(:ace_mode)
} }
end end
def copy_file_path_button(file_path)
clipboard_button(clipboard_text: file_path, class: 'btn-clipboard btn-transparent prepend-left-5', title: 'Copy file path to clipboard')
end
def copy_blob_content_button(blob)
return if markup?(blob.name)
clipboard_button(clipboard_target: ".blob-content[data-blob-id='#{blob.id}']", class: "btn btn-sm", title: "Copy content to clipboard")
end
def open_raw_file_button(path)
link_to icon('file-code-o'), path, class: 'btn btn-sm has-tooltip', target: '_blank', title: 'Open raw', data: { container: 'body' }
end
end end
...@@ -7,13 +7,8 @@ ...@@ -7,13 +7,8 @@
#blob-content-holder.tree-holder #blob-content-holder.tree-holder
.file-holder .file-holder
.js-file-title.file-title = render "projects/blob/header", blob: @blob
= blob_icon @blob.mode, @blob.name
%strong
= @path
%small= number_to_human_size @blob.size
.file-actions
= render "projects/blob/actions"
.table-responsive.file-content.blame.code.js-syntax-highlight .table-responsive.file-content.blame.code.js-syntax-highlight
%table %table
- current_line = 1 - current_line = 1
......
- if @environment
.btn-group<
= view_on_environment_button(@commit.sha, @path, @environment)
.btn-group{ role: "group" }<
= link_to 'Raw', namespace_project_raw_path(@project.namespace, @project, @id),
class: 'btn btn-sm', target: '_blank'
-# only show normal/blame view links for text files
- if blob_text_viewable?(@blob)
- if current_page? namespace_project_blame_path(@project.namespace, @project, @id)
= link_to 'Normal View', namespace_project_blob_path(@project.namespace, @project, @id),
class: 'btn btn-sm'
- else
= link_to 'Blame', namespace_project_blame_path(@project.namespace, @project, @id),
class: 'btn btn-sm js-blob-blame-link' unless @blob.empty?
= link_to 'History', namespace_project_commits_path(@project.namespace, @project, @id),
class: 'btn btn-sm'
= link_to 'Permalink', namespace_project_blob_path(@project.namespace, @project,
tree_join(@commit.sha, @path)), class: 'btn btn-sm js-data-file-blob-permalink-url'
- if current_user
.btn-group{ role: "group" }<
- if blob_text_viewable?(@blob)
= edit_blob_link
= replace_blob_link
= delete_blob_link
...@@ -24,13 +24,5 @@ ...@@ -24,13 +24,5 @@
#blob-content-holder.blob-content-holder #blob-content-holder.blob-content-holder
%article.file-holder %article.file-holder
.js-file-title.file-title-flex-parent = render "projects/blob/header", blob: blob
.file-header-content
= blob_icon blob.mode, blob.name
%strong.file-title-name
= blob.name
%small
= number_to_human_size(blob_size(blob))
.file-actions.hidden-xs
= render "actions"
= render blob.to_partial_path(@project), blob: blob = render blob.to_partial_path(@project), blob: blob
.js-file-title.file-title-flex-parent
.file-header-content
= blob_icon blob.mode, blob.name
%strong.file-title-name
= blob.name
= copy_file_path_button(blob.path)
%small
= number_to_human_size(blob_size(blob))
.file-actions.hidden-xs
.btn-group{ role: "group" }<
= copy_blob_content_button(blob) if blob_text_viewable?(blob)
= open_raw_file_button(namespace_project_raw_path(@project.namespace, @project, @id))
= view_on_environment_button(@commit.sha, @path, @environment) if @environment
.btn-group{ role: "group" }<
-# only show normal/blame view links for text files
- if blob_text_viewable?(blob)
- if current_page? namespace_project_blame_path(@project.namespace, @project, @id)
= link_to 'Normal View', namespace_project_blob_path(@project.namespace, @project, @id),
class: 'btn btn-sm'
- else
= link_to 'Blame', namespace_project_blame_path(@project.namespace, @project, @id),
class: 'btn btn-sm js-blob-blame-link' unless blob.empty?
= link_to 'History', namespace_project_commits_path(@project.namespace, @project, @id),
class: 'btn btn-sm'
= link_to 'Permalink', namespace_project_blob_path(@project.namespace, @project,
tree_join(@commit.sha, @path)), class: 'btn btn-sm js-data-file-blob-permalink-url'
- if current_user
.btn-group{ role: "group" }<
= edit_blob_link if blob_text_viewable?(blob)
= replace_blob_link
= delete_blob_link
...@@ -8,12 +8,12 @@ ...@@ -8,12 +8,12 @@
- else - else
- blob.load_all_data!(@repository) - blob.load_all_data!(@repository)
- if markup?(blob.name) - if blob.empty?
.file-content.wiki .file-content.code
= render_markup(blob.name, blob.data) .nothing-here-block Empty file
- else - else
- if blob.empty? - if markup?(blob.name)
.file-content.code .file-content.wiki
.nothing-here-block Empty file = render_markup(blob.name, blob.data)
- else - else
= render 'shared/file_highlight', blob: blob, repository: @repository = render 'shared/file_highlight', blob: blob, repository: @repository
...@@ -2,8 +2,11 @@ ...@@ -2,8 +2,11 @@
- if defined?(blob) && blob && diff_file.submodule? - if defined?(blob) && blob && diff_file.submodule?
%span %span
= icon('archive fw') = icon('archive fw')
%span
%strong.file-title-name
= submodule_link(blob, diff_commit.id, project.repository) = submodule_link(blob, diff_commit.id, project.repository)
= copy_file_path_button(blob.path)
- else - else
= conditional_link_to url.present?, url do = conditional_link_to url.present?, url do
= blob_icon diff_file.b_mode, diff_file.file_path = blob_icon diff_file.b_mode, diff_file.file_path
...@@ -21,7 +24,7 @@ ...@@ -21,7 +24,7 @@
- if diff_file.deleted_file - if diff_file.deleted_file
deleted deleted
= clipboard_button(clipboard_text: diff_file.new_path, class: 'btn-clipboard btn-transparent prepend-left-5', title: 'Copy file path to clipboard') = copy_file_path_button(diff_file.new_path)
- if diff_file.mode_changed? - if diff_file.mode_changed?
%small %small
......
...@@ -4,13 +4,7 @@ ...@@ -4,13 +4,7 @@
.project-snippets .project-snippets
%article.file-holder.snippet-file-content %article.file-holder.snippet-file-content
.js-file-title.file-title = render 'shared/snippets/blob', raw_path: raw_namespace_project_snippet_path(@project.namespace, @project, @snippet)
= blob_icon 0, @snippet.file_name
= @snippet.file_name
.file-actions
= clipboard_button(clipboard_target: ".blob-content[data-blob-id='#{@snippet.id}']", class: "btn btn-sm")
= link_to 'Raw', raw_namespace_project_snippet_path(@project.namespace, @project, @snippet), class: "btn btn-sm", target: "_blank"
= render 'shared/snippets/blob'
.row-content-block.top-block.content-component-block .row-content-block.top-block.content-component-block
= render 'award_emoji/awards_block', awardable: @snippet, inline: true = render 'award_emoji/awards_block', awardable: @snippet, inline: true
......
- unless @snippet.content.empty? .js-file-title.file-title-flex-parent
.file-header-content
= blob_icon @snippet.mode, @snippet.path
%strong.file-title-name
= @snippet.path
= copy_file_path_button(@snippet.path)
.file-actions.hidden-xs
.btn-group{ role: "group" }<
= copy_blob_content_button(@snippet)
= open_raw_file_button(raw_path)
- if defined?(download_path) && download_path
= link_to icon('download'), download_path, class: "btn btn-sm has-tooltip", title: 'Download', data: { container: 'body' }
- if @snippet.content.empty?
.file-content.code
.nothing-here-block Empty file
- else
- if markup?(@snippet.file_name) - if markup?(@snippet.file_name)
%textarea.markdown-snippet-copy.blob-content{ data: { blob_id: @snippet.id } }
= @snippet.content
.file-content.wiki .file-content.wiki
- if gitlab_markdown?(@snippet.file_name) - if gitlab_markdown?(@snippet.file_name)
= preserve(markdown_field(@snippet, :content)) = preserve(markdown_field(@snippet, :content))
...@@ -9,6 +27,3 @@ ...@@ -9,6 +27,3 @@
= render_markup(@snippet.file_name, @snippet.content) = render_markup(@snippet.file_name, @snippet.content)
- else - else
= render 'shared/file_highlight', blob: @snippet = render 'shared/file_highlight', blob: @snippet
- else
.file-content.code
.nothing-here-block Empty file
...@@ -3,13 +3,7 @@ ...@@ -3,13 +3,7 @@
= render 'shared/snippets/header' = render 'shared/snippets/header'
%article.file-holder.snippet-file-content %article.file-holder.snippet-file-content
.js-file-title.file-title = render 'shared/snippets/blob', raw_path: raw_snippet_path(@snippet), download_path: download_snippet_path(@snippet)
= blob_icon 0, @snippet.file_name
= @snippet.file_name
.file-actions
= clipboard_button(clipboard_target: ".blob-content[data-blob-id='#{@snippet.id}']", class: "btn btn-sm")
= link_to 'Raw', raw_snippet_path(@snippet), class: "btn btn-sm", target: "_blank"
= link_to 'Download', download_snippet_path(@snippet), class: "btn btn-sm"
= render 'shared/snippets/blob'
= render 'award_emoji/awards_block', awardable: @snippet, inline: true .row-content-block.top-block.content-component-block
= render 'award_emoji/awards_block', awardable: @snippet, inline: true
---
title: Add copy button to blob header and use icon for Raw button
merge_request:
author:
...@@ -48,7 +48,7 @@ class Spinach::Features::ProjectSourceBrowseFiles < Spinach::FeatureSteps ...@@ -48,7 +48,7 @@ class Spinach::Features::ProjectSourceBrowseFiles < Spinach::FeatureSteps
end end
step 'I click link "Raw"' do step 'I click link "Raw"' do
click_link 'Raw' click_link 'Open raw'
end end
step 'I should see raw file content' do step 'I should see raw file content' do
...@@ -356,7 +356,7 @@ class Spinach::Features::ProjectSourceBrowseFiles < Spinach::FeatureSteps ...@@ -356,7 +356,7 @@ class Spinach::Features::ProjectSourceBrowseFiles < Spinach::FeatureSteps
step 'I should see buttons for allowed commands' do step 'I should see buttons for allowed commands' do
page.within '.content' do page.within '.content' do
expect(page).to have_content 'Raw' expect(page).to have_link 'Open raw'
expect(page).to have_content 'History' expect(page).to have_content 'History'
expect(page).to have_content 'Permalink' expect(page).to have_content 'Permalink'
expect(page).not_to have_content 'Edit' expect(page).not_to have_content 'Edit'
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment