Switch Notes controller to use json
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
This commit is contained in:
parent
923bd2ecd2
commit
48c682b52f
4 changed files with 65 additions and 64 deletions
|
@ -2,71 +2,54 @@ class Projects::NotesController < Projects::ApplicationController
|
||||||
# Authorize
|
# Authorize
|
||||||
before_filter :authorize_read_note!
|
before_filter :authorize_read_note!
|
||||||
before_filter :authorize_write_note!, only: [:create]
|
before_filter :authorize_write_note!, only: [:create]
|
||||||
|
before_filter :authorize_admin_note!, only: [:update, :destroy]
|
||||||
respond_to :js
|
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@notes = Notes::LoadContext.new(project, current_user, params).execute
|
@notes = Notes::LoadContext.new(project, current_user, params).execute
|
||||||
@target_type = params[:target_type].camelize
|
|
||||||
@target_id = params[:target_id]
|
|
||||||
|
|
||||||
if params[:target_type] == "merge_request"
|
notes_json = { notes: [] }
|
||||||
@discussions = Note.discussions_from_notes(@notes)
|
|
||||||
|
@notes.each do |note|
|
||||||
|
notes_json[:notes] << {
|
||||||
|
id: note.id,
|
||||||
|
html: note_to_html(note)
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
respond_to do |format|
|
render json: notes_json
|
||||||
format.html { redirect_to :back }
|
|
||||||
format.json do
|
|
||||||
render json: {
|
|
||||||
html: view_to_html_string("projects/notes/_notes")
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@note = Notes::CreateContext.new(project, current_user, params).execute
|
@note = Notes::CreateContext.new(project, current_user, params).execute
|
||||||
@target_type = params[:target_type].camelize
|
|
||||||
@target_id = params[:target_id]
|
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html {redirect_to :back}
|
format.json { render_note_json(@note) }
|
||||||
format.js
|
format.html { redirect_to :back }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
note.update_attributes(params[:note])
|
||||||
|
note.reset_events_cache
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
format.json { render_note_json(note) }
|
||||||
|
format.html { redirect_to :back }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
@note = @project.notes.find(params[:id])
|
note.destroy
|
||||||
return access_denied! unless can?(current_user, :admin_note, @note)
|
note.reset_events_cache
|
||||||
@note.destroy
|
|
||||||
@note.reset_events_cache
|
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.js { render nothing: true }
|
format.js { render nothing: true }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
|
||||||
@note = @project.notes.find(params[:id])
|
|
||||||
return access_denied! unless can?(current_user, :admin_note, @note)
|
|
||||||
|
|
||||||
@note.update_attributes(params[:note])
|
|
||||||
@note.reset_events_cache
|
|
||||||
|
|
||||||
respond_to do |format|
|
|
||||||
format.js do
|
|
||||||
render js: { success: @note.valid?, id: @note.id, note: view_context.markdown(@note.note) }.to_json
|
|
||||||
end
|
|
||||||
format.html do
|
|
||||||
redirect_to :back
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def delete_attachment
|
def delete_attachment
|
||||||
@note = @project.notes.find(params[:id])
|
note.remove_attachment!
|
||||||
@note.remove_attachment!
|
note.update_attribute(:attachment, nil)
|
||||||
@note.update_attribute(:attachment, nil)
|
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.js { render nothing: true }
|
format.js { render nothing: true }
|
||||||
|
@ -76,4 +59,41 @@ class Projects::NotesController < Projects::ApplicationController
|
||||||
def preview
|
def preview
|
||||||
render text: view_context.markdown(params[:note])
|
render text: view_context.markdown(params[:note])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def note
|
||||||
|
@note ||= @project.notes.find(params[:id])
|
||||||
|
end
|
||||||
|
|
||||||
|
def note_to_html(note)
|
||||||
|
render_to_string(
|
||||||
|
"projects/notes/_note",
|
||||||
|
layout: false,
|
||||||
|
formats: [:html],
|
||||||
|
locals: { note: note }
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
def note_to_discussion_html(note)
|
||||||
|
render_to_string(
|
||||||
|
"projects/notes/_diff_notes_with_reply",
|
||||||
|
layout: false,
|
||||||
|
formats: [:html],
|
||||||
|
locals: { notes: [note] }
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
def render_note_json(note)
|
||||||
|
render json: {
|
||||||
|
id: note.id,
|
||||||
|
discussion_id: note.discussion_id,
|
||||||
|
html: note_to_html(note),
|
||||||
|
discussion_html: note_to_discussion_html(note)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def authorize_admin_note!
|
||||||
|
return access_denied! unless can?(current_user, :admin_note, note)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
= form_for [@project, @note], remote: true, html: { multipart: true, id: nil, class: "new_note js-new-note-form common-note-form" }, authenticity_token: true do |f|
|
= form_for [@project, @note], remote: true, html: { :'data-type' => 'json', multipart: true, id: nil, class: "new_note js-new-note-form common-note-form" }, authenticity_token: true do |f|
|
||||||
|
|
||||||
= note_target_fields
|
= note_target_fields
|
||||||
= f.hidden_field :commit_id
|
= f.hidden_field :commit_id
|
||||||
= f.hidden_field :line_code
|
= f.hidden_field :line_code
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
%ul#notes-list.notes
|
%ul#notes-list.notes.main-notes-list
|
||||||
= render "projects/notes/notes"
|
= render "projects/notes/notes"
|
||||||
.js-notes-busy
|
.js-notes-busy
|
||||||
|
|
||||||
|
@ -7,4 +7,4 @@
|
||||||
= render "projects/notes/form"
|
= render "projects/notes/form"
|
||||||
|
|
||||||
:javascript
|
:javascript
|
||||||
NoteList.init("#{@target_id}", "#{@target_type}", "#{project_notes_path(@project)}");
|
new Notes("#{project_notes_path(target_id: @noteable.id, target_type: @noteable.class.name.underscore)}", #{@notes.map(&:id).to_json})
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
- if @note.valid?
|
|
||||||
var noteHtml = "#{escape_javascript(render @note)}";
|
|
||||||
|
|
||||||
- if note_for_main_target?(@note)
|
|
||||||
NoteList.appendNewNote(#{@note.id}, noteHtml);
|
|
||||||
- else
|
|
||||||
:plain
|
|
||||||
var firstDiscussionNoteHtml = "#{escape_javascript(render "projects/notes/diff_notes_with_reply", notes: [@note])}";
|
|
||||||
NoteList.appendNewDiscussionNote("#{@note.discussion_id}",
|
|
||||||
firstDiscussionNoteHtml,
|
|
||||||
noteHtml);
|
|
||||||
|
|
||||||
- else
|
|
||||||
var errorsHtml = "#{escape_javascript(render 'projects/notes/form_errors', note: @note)}";
|
|
||||||
- if note_for_main_target?(@note)
|
|
||||||
NoteList.errorsOnForm(errorsHtml);
|
|
||||||
- else
|
|
||||||
NoteList.errorsOnForm(errorsHtml, "#{@note.discussion_id}");
|
|
Loading…
Reference in a new issue