Add UI for editing forum third-level content
This commit is contained in:
@@ -157,11 +157,20 @@ class @DiscussionUtil
|
||||
|
||||
@formErrorHandler: (errorsField) ->
|
||||
(xhr, textStatus, error) ->
|
||||
response = JSON.parse(xhr.responseText)
|
||||
if response.errors? and response.errors.length > 0
|
||||
errorsField.empty()
|
||||
for error in response.errors
|
||||
errorsField.append($("<li>").addClass("new-post-form-error").html(error)).show()
|
||||
makeErrorElem = (message) ->
|
||||
$("<li>").addClass("new-post-form-error").html(message)
|
||||
errorsField.empty().show()
|
||||
if xhr.status == 400
|
||||
response = JSON.parse(xhr.responseText)
|
||||
if response.errors? and response.errors.length > 0
|
||||
for error in response.errors
|
||||
errorsField.append(makeErrorElem(error))
|
||||
else
|
||||
errorsField.append(
|
||||
makeErrorElem(
|
||||
gettext("We had some trouble processing your request. Please try again.")
|
||||
)
|
||||
)
|
||||
|
||||
@clearFormErrors: (errorsField) ->
|
||||
errorsField.empty()
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
if Backbone?
|
||||
class @ResponseCommentEditView extends Backbone.View
|
||||
|
||||
events:
|
||||
"click .post-update": "update"
|
||||
"click .post-cancel": "cancel_edit"
|
||||
|
||||
$: (selector) ->
|
||||
@$el.find(selector)
|
||||
|
||||
initialize: ->
|
||||
super()
|
||||
|
||||
render: ->
|
||||
@template = _.template($("#response-comment-edit-template").html())
|
||||
@$el.html(@template(@model.toJSON()))
|
||||
@delegateEvents()
|
||||
DiscussionUtil.makeWmdEditor @$el, $.proxy(@$, @), "edit-comment-body"
|
||||
@
|
||||
|
||||
update: (event) ->
|
||||
@trigger "comment:update", event
|
||||
|
||||
cancel_edit: (event) ->
|
||||
@trigger "comment:cancel_edit", event
|
||||
@@ -3,6 +3,7 @@ if Backbone?
|
||||
|
||||
events:
|
||||
"click .action-delete": "_delete"
|
||||
"click .action-edit": "edit"
|
||||
|
||||
tagName: "li"
|
||||
|
||||
@@ -14,6 +15,9 @@ if Backbone?
|
||||
can_delete:
|
||||
enable: -> @$(".action-delete").show()
|
||||
disable: -> @$(".action-delete").hide()
|
||||
editable:
|
||||
enable: -> @$(".action-edit").show()
|
||||
disable: -> @$(".action-edit").hide()
|
||||
|
||||
render: ->
|
||||
@template = _.template($("#response-comment-show-template").html())
|
||||
@@ -68,4 +72,5 @@ if Backbone?
|
||||
updateModelDetails: =>
|
||||
@renderFlagged()
|
||||
|
||||
|
||||
edit: (event) =>
|
||||
@trigger "comment:edit", event
|
||||
|
||||
@@ -7,29 +7,37 @@ if Backbone?
|
||||
|
||||
initialize: ->
|
||||
super()
|
||||
@createShowView()
|
||||
|
||||
render: ->
|
||||
@renderShowView()
|
||||
@
|
||||
|
||||
createShowView: () ->
|
||||
|
||||
if @editView?
|
||||
@editView.undelegateEvents()
|
||||
@editView.$el.empty()
|
||||
@editView = null
|
||||
|
||||
@showView = new ResponseCommentShowView(model: @model)
|
||||
@showView.bind "comment:_delete", @_delete
|
||||
|
||||
renderSubView: (view) ->
|
||||
view.setElement(@$el)
|
||||
view.render()
|
||||
view.delegateEvents()
|
||||
|
||||
renderShowView: () ->
|
||||
@renderSubView(@showView)
|
||||
if not @showView?
|
||||
if @editView?
|
||||
@editView.undelegateEvents()
|
||||
@editView.$el.empty()
|
||||
@editView = null
|
||||
@showView = new ResponseCommentShowView(model: @model)
|
||||
@showView.bind "comment:_delete", @_delete
|
||||
@showView.bind "comment:edit", @edit
|
||||
@renderSubView(@showView)
|
||||
|
||||
renderEditView: () ->
|
||||
if not @editView?
|
||||
if @showView?
|
||||
@showView.undelegateEvents()
|
||||
@showView.$el.empty()
|
||||
@showView = null
|
||||
@editView = new ResponseCommentEditView(model: @model)
|
||||
@editView.bind "comment:update", @update
|
||||
@editView.bind "comment:cancel_edit", @cancelEdit
|
||||
@renderSubView(@editView)
|
||||
|
||||
_delete: (event) =>
|
||||
event.preventDefault()
|
||||
@@ -51,3 +59,27 @@ if Backbone?
|
||||
gettext("Sorry"),
|
||||
gettext("We had some trouble deleting this comment. Please try again.")
|
||||
)
|
||||
|
||||
cancelEdit: (event) =>
|
||||
@trigger "comment:cancel_edit", event
|
||||
@renderShowView()
|
||||
|
||||
edit: (event) =>
|
||||
@trigger "comment:edit", event
|
||||
@renderEditView()
|
||||
|
||||
update: (event) =>
|
||||
newBody = @editView.$(".edit-comment-body textarea").val()
|
||||
url = DiscussionUtil.urlFor("update_comment", @model.id)
|
||||
DiscussionUtil.safeAjax
|
||||
$elem: $(event.target)
|
||||
$loading: $(event.target)
|
||||
url: url
|
||||
type: "POST"
|
||||
dataType: "json"
|
||||
data:
|
||||
body: newBody
|
||||
error: DiscussionUtil.formErrorHandler(@$(".edit-comment-form-errors"))
|
||||
success: (response, textStatus) =>
|
||||
@model.set("body", newBody)
|
||||
@cancelEdit()
|
||||
|
||||
@@ -53,6 +53,7 @@ if Backbone?
|
||||
|
||||
renderComments: ->
|
||||
comments = new Comments()
|
||||
@commentViews = []
|
||||
comments.comparator = (comment) ->
|
||||
comment.get('created_at')
|
||||
collectComments = (comment) ->
|
||||
@@ -69,6 +70,12 @@ if Backbone?
|
||||
view = new ResponseCommentView(model: comment)
|
||||
view.render()
|
||||
@$el.find(".comments .new-comment").before(view.el)
|
||||
view.bind "comment:edit", (event) =>
|
||||
@cancelEdit(event) if @editView?
|
||||
@cancelCommentEdits()
|
||||
@hideCommentForm()
|
||||
view.bind "comment:cancel_edit", () => @showCommentForm()
|
||||
@commentViews.push(view)
|
||||
view
|
||||
|
||||
submitComment: (event) ->
|
||||
@@ -128,6 +135,9 @@ if Backbone?
|
||||
renderEditView: () ->
|
||||
@renderSubView(@editView)
|
||||
|
||||
cancelCommentEdits: () ->
|
||||
_.each(@commentViews, (view) -> view.cancelEdit())
|
||||
|
||||
hideCommentForm: () ->
|
||||
@$('.comment-form').closest('li').hide()
|
||||
|
||||
@@ -157,6 +167,7 @@ if Backbone?
|
||||
edit: (event) =>
|
||||
@createEditView()
|
||||
@renderEditView()
|
||||
@cancelCommentEdits()
|
||||
@hideCommentForm()
|
||||
|
||||
update: (event) =>
|
||||
|
||||
Reference in New Issue
Block a user