summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJarka Kadlecova <jarka@gitlab.com>2017-05-03 10:48:01 +0200
committerJarka Kadlecova <jarka@gitlab.com>2017-05-03 18:35:45 +0200
commit528ab50d137fc47d389a6e25ea75a77d502c4b28 (patch)
tree51b54a959b7dcdd47648ed4636de4e75fcf47d62
parent86a20370d039fcc3112b42187d277e571a0b16db (diff)
downloadgitlab-ce-12910-personal-snippets-comments.tar.gz
Support comments for personal snippets12910-personal-snippets-comments
-rw-r--r--app/controllers/concerns/notes_actions.rb44
-rw-r--r--app/controllers/projects/notes_controller.rb44
-rw-r--r--app/controllers/snippets/notes_controller.rb9
-rw-r--r--app/controllers/snippets_controller.rb1
-rw-r--r--app/helpers/notes_helper.rb35
-rw-r--r--app/views/layouts/snippets.html.haml6
-rw-r--r--app/views/projects/commit/show.html.haml2
-rw-r--r--app/views/projects/issues/_discussion.html.haml2
-rw-r--r--app/views/projects/merge_requests/_discussion.html.haml2
-rw-r--r--app/views/projects/milestones/_form.html.haml2
-rw-r--r--app/views/projects/notes/_edit.html.haml3
-rw-r--r--app/views/projects/releases/edit.html.haml2
-rw-r--r--app/views/projects/snippets/show.html.haml2
-rw-r--r--app/views/projects/tags/new.html.haml2
-rw-r--r--app/views/projects/wikis/_form.html.haml2
-rw-r--r--app/views/shared/issuable/form/_description.html.haml2
-rw-r--r--app/views/shared/notes/_comment_button.html.haml (renamed from app/views/projects/notes/_comment_button.html.haml)0
-rw-r--r--app/views/shared/notes/_edit.html.haml3
-rw-r--r--app/views/shared/notes/_edit_form.html.haml (renamed from app/views/projects/notes/_edit_form.html.haml)2
-rw-r--r--app/views/shared/notes/_form.html.haml (renamed from app/views/projects/notes/_form.html.haml)6
-rw-r--r--app/views/shared/notes/_hints.html.haml (renamed from app/views/projects/notes/_hints.html.haml)0
-rw-r--r--app/views/shared/notes/_note.html.haml5
-rw-r--r--app/views/shared/notes/_notes_with_form.html.haml (renamed from app/views/projects/notes/_notes_with_form.html.haml)9
-rw-r--r--app/views/snippets/notes/_edit.html.haml0
-rw-r--r--app/views/snippets/notes/_notes.html.haml2
-rw-r--r--app/views/snippets/show.html.haml12
-rw-r--r--spec/views/shared/notes/_form.html.haml_spec.rb (renamed from spec/views/projects/notes/_form.html.haml_spec.rb)2
27 files changed, 115 insertions, 86 deletions
diff --git a/app/controllers/concerns/notes_actions.rb b/app/controllers/concerns/notes_actions.rb
index c32038d07bf..a57d9e6e6c0 100644
--- a/app/controllers/concerns/notes_actions.rb
+++ b/app/controllers/concerns/notes_actions.rb
@@ -65,6 +65,15 @@ module NotesActions
private
+ def note_html(note)
+ render_to_string(
+ "shared/notes/_note",
+ layout: false,
+ formats: [:html],
+ locals: { note: note }
+ )
+ end
+
def note_json(note)
attrs = {
commands_changes: note.commands_changes
@@ -98,6 +107,41 @@ module NotesActions
attrs
end
+ def diff_discussion_html(discussion)
+ return unless discussion.diff_discussion?
+
+ if params[:view] == 'parallel'
+ template = "discussions/_parallel_diff_discussion"
+ locals =
+ if params[:line_type] == 'old'
+ { discussions_left: [discussion], discussions_right: nil }
+ else
+ { discussions_left: nil, discussions_right: [discussion] }
+ end
+ else
+ template = "discussions/_diff_discussion"
+ locals = { discussions: [discussion] }
+ end
+
+ render_to_string(
+ template,
+ layout: false,
+ formats: [:html],
+ locals: locals
+ )
+ end
+
+ def discussion_html(discussion)
+ return if discussion.individual_note?
+
+ render_to_string(
+ "discussions/_discussion",
+ layout: false,
+ formats: [:html],
+ locals: { discussion: discussion }
+ )
+ end
+
def authorize_admin_note!
return access_denied! unless can?(current_user, :admin_note, note)
end
diff --git a/app/controllers/projects/notes_controller.rb b/app/controllers/projects/notes_controller.rb
index 37f51b2ebe3..41a13f6f577 100644
--- a/app/controllers/projects/notes_controller.rb
+++ b/app/controllers/projects/notes_controller.rb
@@ -62,50 +62,6 @@ class Projects::NotesController < Projects::ApplicationController
end
alias_method :awardable, :note
- def note_html(note)
- render_to_string(
- "shared/notes/_note",
- layout: false,
- formats: [:html],
- locals: { note: note }
- )
- end
-
- def discussion_html(discussion)
- return if discussion.individual_note?
-
- render_to_string(
- "discussions/_discussion",
- layout: false,
- formats: [:html],
- locals: { discussion: discussion }
- )
- end
-
- def diff_discussion_html(discussion)
- return unless discussion.diff_discussion?
-
- if params[:view] == 'parallel'
- template = "discussions/_parallel_diff_discussion"
- locals =
- if params[:line_type] == 'old'
- { discussions_left: [discussion], discussions_right: nil }
- else
- { discussions_left: nil, discussions_right: [discussion] }
- end
- else
- template = "discussions/_diff_discussion"
- locals = { discussions: [discussion] }
- end
-
- render_to_string(
- template,
- layout: false,
- formats: [:html],
- locals: locals
- )
- end
-
def finder_params
params.merge(last_fetched_at: last_fetched_at)
end
diff --git a/app/controllers/snippets/notes_controller.rb b/app/controllers/snippets/notes_controller.rb
index 3c4ddc1680d..f9496787b15 100644
--- a/app/controllers/snippets/notes_controller.rb
+++ b/app/controllers/snippets/notes_controller.rb
@@ -13,15 +13,6 @@ class Snippets::NotesController < ApplicationController
end
alias_method :awardable, :note
- def note_html(note)
- render_to_string(
- "shared/notes/_note",
- layout: false,
- formats: [:html],
- locals: { note: note }
- )
- end
-
def project
nil
end
diff --git a/app/controllers/snippets_controller.rb b/app/controllers/snippets_controller.rb
index da1ae9a34d9..eccf2b8daee 100644
--- a/app/controllers/snippets_controller.rb
+++ b/app/controllers/snippets_controller.rb
@@ -65,6 +65,7 @@ class SnippetsController < ApplicationController
blob = @snippet.blob
override_max_blob_size(blob)
+ @note = Note.new(noteable: @snippet)
@noteable = @snippet
@discussions = @snippet.discussions
diff --git a/app/helpers/notes_helper.rb b/app/helpers/notes_helper.rb
index eab0738a368..c8c1ca9919b 100644
--- a/app/helpers/notes_helper.rb
+++ b/app/helpers/notes_helper.rb
@@ -80,4 +80,39 @@ module NotesHelper
namespace_project_commit_path(discussion.project.namespace, discussion.project, discussion.noteable, anchor: anchor)
end
end
+
+ def notes_url
+ if @snippet.is_a?(PersonalSnippet)
+ snippet_notes_path(@snippet)
+ else
+ namespace_project_noteable_notes_path(
+ namespace_id: @project.namespace,
+ project_id: @project,
+ target_id: @noteable.id,
+ target_type: @noteable.class.name.underscore
+ )
+ end
+ end
+
+ def note_url(note)
+ if note.noteable.is_a?(PersonalSnippet)
+ snippet_note_path(note.noteable, note)
+ else
+ namespace_project_note_path(@project.namespace, @project, note)
+ end
+ end
+
+ def form_resources
+ if @snippet.is_a?(PersonalSnippet)
+ [@note]
+ else
+ [@project.namespace.becomes(Namespace), @project, @note]
+ end
+ end
+
+ def form_url
+ return nil unless @snippet.is_a?(PersonalSnippet)
+
+ snippet_notes_path(@snippet)
+ end
end
diff --git a/app/views/layouts/snippets.html.haml b/app/views/layouts/snippets.html.haml
index 02ca3ee7a28..98b75cea03f 100644
--- a/app/views/layouts/snippets.html.haml
+++ b/app/views/layouts/snippets.html.haml
@@ -1,3 +1,9 @@
- header_title "Snippets", snippets_path
+- content_for :page_specific_javascripts do
+ - if @snippet&.persisted? && current_user
+ :javascript
+ window.uploads_path = "#{upload_path('personal_snippet', @snippet)}";
+ window.preview_markdown_path = "#{preview_markdown_snippet_path(@snippet)}";
+
= render template: "layouts/application"
diff --git a/app/views/projects/commit/show.html.haml b/app/views/projects/commit/show.html.haml
index 0d11da2451a..e24dd8408db 100644
--- a/app/views/projects/commit/show.html.haml
+++ b/app/views/projects/commit/show.html.haml
@@ -11,7 +11,7 @@
.block-connector
= render "projects/diffs/diffs", diffs: @diffs, environment: @environment
- = render "projects/notes/notes_with_form"
+ = render "shared/notes/notes_with_form"
- if can_collaborate_with_project?
- %w(revert cherry-pick).each do |type|
= render "projects/commit/change", type: type, commit: @commit, title: @commit.title
diff --git a/app/views/projects/issues/_discussion.html.haml b/app/views/projects/issues/_discussion.html.haml
index 5d4e593e4ef..4dfda54feb5 100644
--- a/app/views/projects/issues/_discussion.html.haml
+++ b/app/views/projects/issues/_discussion.html.haml
@@ -4,4 +4,4 @@
= link_to 'Close issue', issue_path(@issue, issue: {state_event: :close}, format: 'json'), data: {no_turbolink: true, original_text: "Close issue", alternative_text: "Comment & close issue"}, class: "btn btn-nr btn-close btn-comment js-note-target-close #{issue_button_visibility(@issue, true)}", title: 'Close issue'
#notes
- = render 'projects/notes/notes_with_form'
+ = render 'shared/notes/notes_with_form'
diff --git a/app/views/projects/merge_requests/_discussion.html.haml b/app/views/projects/merge_requests/_discussion.html.haml
index 15b5a51c1d0..2e6420db212 100644
--- a/app/views/projects/merge_requests/_discussion.html.haml
+++ b/app/views/projects/merge_requests/_discussion.html.haml
@@ -8,4 +8,4 @@
%button.btn.btn-nr.btn-default.append-right-10.js-comment-resolve-button{ "v-if" => "showButton", type: "submit", data: { project_path: "#{project_path(@merge_request.project)}" } }
{{ buttonText }}
-#notes= render "projects/notes/notes_with_form"
+#notes= render "shared/notes/notes_with_form"
diff --git a/app/views/projects/milestones/_form.html.haml b/app/views/projects/milestones/_form.html.haml
index 0f4a8508751..11858ff009a 100644
--- a/app/views/projects/milestones/_form.html.haml
+++ b/app/views/projects/milestones/_form.html.haml
@@ -11,7 +11,7 @@
.col-sm-10
= render layout: 'projects/md_preview', locals: { preview_class: "md-preview" } do
= render 'projects/zen', f: f, attr: :description, classes: 'note-textarea', placeholder: 'Write milestone description...'
- = render 'projects/notes/hints'
+ = render 'shared/notes/hints'
.clearfix
.error-alert
= render "shared/milestones/form_dates", f: f
diff --git a/app/views/projects/notes/_edit.html.haml b/app/views/projects/notes/_edit.html.haml
deleted file mode 100644
index f1e251d65b7..00000000000
--- a/app/views/projects/notes/_edit.html.haml
+++ /dev/null
@@ -1,3 +0,0 @@
-.original-note-content.hidden{ data: { post_url: namespace_project_note_path(@project.namespace, @project, note), target_id: note.noteable.id, target_type: note.noteable.class.name.underscore } }
- #{note.note}
-%textarea.hidden.js-task-list-field.original-task-list{ data: {update_url: namespace_project_note_path(@project.namespace, @project, note) } }= note.note
diff --git a/app/views/projects/releases/edit.html.haml b/app/views/projects/releases/edit.html.haml
index 79d8d721aa9..f1d28b2d653 100644
--- a/app/views/projects/releases/edit.html.haml
+++ b/app/views/projects/releases/edit.html.haml
@@ -13,7 +13,7 @@
= form_for(@release, method: :put, url: namespace_project_tag_release_path(@project.namespace, @project, @tag.name), html: { class: 'form-horizontal common-note-form release-form js-quick-submit' }) do |f|
= render layout: 'projects/md_preview', locals: { preview_class: "md-preview", referenced_users: true } do
= render 'projects/zen', f: f, attr: :description, classes: 'note-textarea', placeholder: "Write your release notes or drag files here..."
- = render 'projects/notes/hints'
+ = render 'shared/notes/hints'
.error-alert
.prepend-top-default
= f.submit 'Save changes', class: 'btn btn-save'
diff --git a/app/views/projects/snippets/show.html.haml b/app/views/projects/snippets/show.html.haml
index 7a175f63eeb..aab1c043e66 100644
--- a/app/views/projects/snippets/show.html.haml
+++ b/app/views/projects/snippets/show.html.haml
@@ -9,4 +9,4 @@
.row-content-block.top-block.content-component-block
= render 'award_emoji/awards_block', awardable: @snippet, inline: true
- #notes= render "projects/notes/notes_with_form"
+ #notes= render "shared/notes/notes_with_form"
diff --git a/app/views/projects/tags/new.html.haml b/app/views/projects/tags/new.html.haml
index 160d4c7a223..262cc2c8068 100644
--- a/app/views/projects/tags/new.html.haml
+++ b/app/views/projects/tags/new.html.haml
@@ -30,7 +30,7 @@
.col-sm-10
= render layout: 'projects/md_preview', locals: { preview_class: "md-preview", referenced_users: true } do
= render 'projects/zen', attr: :release_description, classes: 'note-textarea', placeholder: "Write your release notes or drag files here..."
- = render 'projects/notes/hints'
+ = render 'shared/notes/hints'
.help-block Optionally, add release notes to the tag. They will be stored in the GitLab database and displayed on the tags page.
.form-actions
= button_tag 'Create tag', class: 'btn btn-create', tabindex: 3
diff --git a/app/views/projects/wikis/_form.html.haml b/app/views/projects/wikis/_form.html.haml
index 0d2cd4a7476..538f2617a81 100644
--- a/app/views/projects/wikis/_form.html.haml
+++ b/app/views/projects/wikis/_form.html.haml
@@ -14,7 +14,7 @@
.col-sm-10
= render layout: 'projects/md_preview', locals: { preview_class: "md-preview" } do
= render 'projects/zen', f: f, attr: :content, classes: 'note-textarea', placeholder: 'Write your content or drag files here...'
- = render 'projects/notes/hints'
+ = render 'shared/notes/hints'
.clearfix
.error-alert
diff --git a/app/views/shared/issuable/form/_description.html.haml b/app/views/shared/issuable/form/_description.html.haml
index dbace9ce401..08f1e81f22e 100644
--- a/app/views/shared/issuable/form/_description.html.haml
+++ b/app/views/shared/issuable/form/_description.html.haml
@@ -10,6 +10,6 @@
classes: 'note-textarea',
placeholder: "Write a comment or drag your files here...",
supports_slash_commands: !issuable.persisted?
- = render 'projects/notes/hints', supports_slash_commands: !issuable.persisted?
+ = render 'shared/notes/hints', supports_slash_commands: !issuable.persisted?
.clearfix
.error-alert
diff --git a/app/views/projects/notes/_comment_button.html.haml b/app/views/shared/notes/_comment_button.html.haml
index 29cf5825292..29cf5825292 100644
--- a/app/views/projects/notes/_comment_button.html.haml
+++ b/app/views/shared/notes/_comment_button.html.haml
diff --git a/app/views/shared/notes/_edit.html.haml b/app/views/shared/notes/_edit.html.haml
new file mode 100644
index 00000000000..4a020865828
--- /dev/null
+++ b/app/views/shared/notes/_edit.html.haml
@@ -0,0 +1,3 @@
+.original-note-content.hidden{ data: { post_url: note_url(note), target_id: note.noteable.id, target_type: note.noteable.class.name.underscore } }
+ #{note.note}
+%textarea.hidden.js-task-list-field.original-task-list{ data: {update_url: note_url(note) } }= note.note
diff --git a/app/views/projects/notes/_edit_form.html.haml b/app/views/shared/notes/_edit_form.html.haml
index 8b4e5928e0d..1d436e6e60d 100644
--- a/app/views/projects/notes/_edit_form.html.haml
+++ b/app/views/shared/notes/_edit_form.html.haml
@@ -4,7 +4,7 @@
= hidden_field_tag :target_type, '', class: 'js-form-target-type'
= render layout: 'projects/md_preview', locals: { preview_class: 'md-preview', referenced_users: true } do
= render 'projects/zen', attr: 'note[note]', classes: 'note-textarea js-note-text js-task-list-field', placeholder: "Write a comment or drag your files here..."
- = render 'projects/notes/hints'
+ = render 'shared/notes/hints'
.note-form-actions.clearfix
.settings-message.note-edit-warning.js-edit-warning
diff --git a/app/views/projects/notes/_form.html.haml b/app/views/shared/notes/_form.html.haml
index 0d835a9e949..e5f4bb791c0 100644
--- a/app/views/projects/notes/_form.html.haml
+++ b/app/views/shared/notes/_form.html.haml
@@ -1,6 +1,6 @@
- supports_slash_commands = note_supports_slash_commands?(@note)
-= form_for [@project.namespace.becomes(Namespace), @project, @note], remote: true, html: { :'data-type' => 'json', multipart: true, id: nil, class: "new-note js-new-note-form js-quick-submit common-note-form", "data-noteable-iid" => @note.noteable.try(:iid), }, authenticity_token: true do |f|
+= form_for form_resources, url: form_url, remote: true, html: { :'data-type' => 'json', multipart: true, id: nil, class: "new-note js-new-note-form js-quick-submit common-note-form", "data-noteable-iid" => @note.noteable.try(:iid), }, authenticity_token: true do |f|
= hidden_field_tag :view, diff_view
= hidden_field_tag :line_type
= hidden_field_tag :merge_request_diff_head_sha, @note.noteable.try(:diff_head_sha)
@@ -24,11 +24,11 @@
classes: 'note-textarea js-note-text',
placeholder: "Write a comment or drag your files here...",
supports_slash_commands: supports_slash_commands
- = render 'projects/notes/hints', supports_slash_commands: supports_slash_commands
+ = render 'shared/notes/hints', supports_slash_commands: supports_slash_commands
.error-alert
.note-form-actions.clearfix
- = render partial: 'projects/notes/comment_button'
+ = render partial: 'shared/notes/comment_button'
= yield(:note_actions)
diff --git a/app/views/projects/notes/_hints.html.haml b/app/views/shared/notes/_hints.html.haml
index 81d97eabe65..81d97eabe65 100644
--- a/app/views/projects/notes/_hints.html.haml
+++ b/app/views/shared/notes/_hints.html.haml
diff --git a/app/views/shared/notes/_note.html.haml b/app/views/shared/notes/_note.html.haml
index 731270d4127..69a32c05b78 100644
--- a/app/views/shared/notes/_note.html.haml
+++ b/app/views/shared/notes/_note.html.haml
@@ -38,10 +38,7 @@
= note.redacted_note_html
= edited_time_ago_with_tooltip(note, placement: 'bottom', html_class: 'note_edited_ago', include_author: true)
- if note_editable
- - if note.for_personal_snippet?
- = render 'snippets/notes/edit', note: note
- - else
- = render 'projects/notes/edit', note: note
+ = render 'shared/notes/edit', note: note
.note-awards
= render 'award_emoji/awards_block', awardable: note, inline: false
- if note.system
diff --git a/app/views/projects/notes/_notes_with_form.html.haml b/app/views/shared/notes/_notes_with_form.html.haml
index 555228623cc..c9e3ec62ea3 100644
--- a/app/views/projects/notes/_notes_with_form.html.haml
+++ b/app/views/shared/notes/_notes_with_form.html.haml
@@ -1,18 +1,19 @@
%ul#notes-list.notes.main-notes-list.timeline
= render "shared/notes/notes"
-= render 'projects/notes/edit_form'
+= render 'shared/notes/edit_form'
%ul.notes.notes-form.timeline
%li.timeline-entry
.flash-container.timeline-content
- - if can? current_user, :create_note, @project
+ /TODO change it
+ - if can?(current_user, :create_note, @project) || can?(current_user, :comment_personal_snippet, @snippet)
.timeline-icon.hidden-xs.hidden-sm
%a.author_link{ href: user_path(current_user) }
= image_tag avatar_icon(current_user), alt: current_user.to_reference, class: 'avatar s40'
.timeline-content.timeline-content-form
- = render "projects/notes/form", view: diff_view
+ = render "shared/notes/form", view: diff_view
- elsif !current_user
.disabled-comment.text-center
.disabled-comment-text.inline
@@ -23,4 +24,4 @@
to post a comment
:javascript
- var notes = new Notes("#{namespace_project_noteable_notes_path(namespace_id: @project.namespace, project_id: @project, target_id: @noteable.id, target_type: @noteable.class.name.underscore)}", #{@notes.map(&:id).to_json}, #{Time.now.to_i}, "#{diff_view}")
+ var notes = new Notes("#{notes_url}", #{@notes.map(&:id).to_json}, #{Time.now.to_i}, "#{diff_view}")
diff --git a/app/views/snippets/notes/_edit.html.haml b/app/views/snippets/notes/_edit.html.haml
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/app/views/snippets/notes/_edit.html.haml
+++ /dev/null
diff --git a/app/views/snippets/notes/_notes.html.haml b/app/views/snippets/notes/_notes.html.haml
deleted file mode 100644
index f07d6b8c126..00000000000
--- a/app/views/snippets/notes/_notes.html.haml
+++ /dev/null
@@ -1,2 +0,0 @@
-%ul#notes-list.notes.main-notes-list.timeline
- = render "projects/notes/notes"
diff --git a/app/views/snippets/show.html.haml b/app/views/snippets/show.html.haml
index 98287cba5b4..51dbbc32cc9 100644
--- a/app/views/snippets/show.html.haml
+++ b/app/views/snippets/show.html.haml
@@ -2,11 +2,11 @@
= render 'shared/snippets/header'
-%article.file-holder.snippet-file-content
- = render 'shared/snippets/blob'
+.personal-snippets
+ %article.file-holder.snippet-file-content
+ = render 'shared/snippets/blob'
-.row-content-block.top-block.content-component-block
- = 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
-%ul#notes-list.notes.main-notes-list.timeline
- #notes= render 'shared/notes/notes'
+ #notes= render "shared/notes/notes_with_form"
diff --git a/spec/views/projects/notes/_form.html.haml_spec.rb b/spec/views/shared/notes/_form.html.haml_spec.rb
index a364f9bce92..d7d0a5bf56a 100644
--- a/spec/views/projects/notes/_form.html.haml_spec.rb
+++ b/spec/views/shared/notes/_form.html.haml_spec.rb
@@ -1,6 +1,6 @@
require 'spec_helper'
-describe 'projects/notes/_form' do
+describe 'shared/notes/_form' do
include Devise::Test::ControllerHelpers
let(:user) { create(:user) }