Commit 57b70092 by Your Name

update front end to handle flagging

parent fb6a07c8
...@@ -10,6 +10,7 @@ urlpatterns = patterns('django_comment_client.base.views', ...@@ -10,6 +10,7 @@ urlpatterns = patterns('django_comment_client.base.views',
url(r'threads/(?P<thread_id>[\w\-]+)/reply$', 'create_comment', name='create_comment'), url(r'threads/(?P<thread_id>[\w\-]+)/reply$', 'create_comment', name='create_comment'),
url(r'threads/(?P<thread_id>[\w\-]+)/delete', 'delete_thread', name='delete_thread'), url(r'threads/(?P<thread_id>[\w\-]+)/delete', 'delete_thread', name='delete_thread'),
url(r'threads/(?P<thread_id>[\w\-]+)/upvote$', 'vote_for_thread', {'value': 'up'}, name='upvote_thread'), url(r'threads/(?P<thread_id>[\w\-]+)/upvote$', 'vote_for_thread', {'value': 'up'}, name='upvote_thread'),
url(r'threads/(?P<thread_id>[\w\-]+)/flagAbuse$', 'flag_abuse_for_thread', {'value': 'up'}, name='flag_abuse_thread'),
url(r'threads/(?P<thread_id>[\w\-]+)/downvote$', 'vote_for_thread', {'value': 'down'}, name='downvote_thread'), url(r'threads/(?P<thread_id>[\w\-]+)/downvote$', 'vote_for_thread', {'value': 'down'}, name='downvote_thread'),
url(r'threads/(?P<thread_id>[\w\-]+)/unvote$', 'undo_vote_for_thread', name='undo_vote_for_thread'), url(r'threads/(?P<thread_id>[\w\-]+)/unvote$', 'undo_vote_for_thread', name='undo_vote_for_thread'),
url(r'threads/(?P<thread_id>[\w\-]+)/follow$', 'follow_thread', name='follow_thread'), url(r'threads/(?P<thread_id>[\w\-]+)/follow$', 'follow_thread', name='follow_thread'),
......
...@@ -136,7 +136,7 @@ def _create_comment(request, course_id, thread_id=None, parent_id=None): ...@@ -136,7 +136,7 @@ def _create_comment(request, course_id, thread_id=None, parent_id=None):
user = cc.User.from_django_user(request.user) user = cc.User.from_django_user(request.user)
user.follow(comment.thread) user.follow(comment.thread)
if request.is_ajax(): if request.is_ajax():
return ajax_content_response(request, course_id, comment.to_dict(), 'discussion/ajax_create_comment.html') return ajax_content_response(request, course_id,comment.to_dict(), 'discussion/ajax_create_comment.html')
else: else:
return JsonResponse(utils.safe_content(comment.to_dict())) return JsonResponse(utils.safe_content(comment.to_dict()))
...@@ -238,6 +238,15 @@ def vote_for_thread(request, course_id, thread_id, value): ...@@ -238,6 +238,15 @@ def vote_for_thread(request, course_id, thread_id, value):
@require_POST @require_POST
@login_required @login_required
@permitted @permitted
def flag_abuse_for_thread(request, course_id, thread_id, value):
user = cc.User.from_django_user(request.user)
thread = cc.Thread.find(thread_id)
thread.flagAbuse(thread, value)
return JsonResponse(utils.safe_content(thread.to_dict()))
@require_POST
@login_required
@permitted
def undo_vote_for_thread(request, course_id, thread_id): def undo_vote_for_thread(request, course_id, thread_id):
user = cc.User.from_django_user(request.user) user = cc.User.from_django_user(request.user)
thread = cc.Thread.find(thread_id) thread = cc.Thread.find(thread_id)
......
...@@ -85,6 +85,7 @@ VIEW_PERMISSIONS = { ...@@ -85,6 +85,7 @@ VIEW_PERMISSIONS = {
'vote_for_comment' : [['vote', 'is_open']], 'vote_for_comment' : [['vote', 'is_open']],
'undo_vote_for_comment': [['unvote', 'is_open']], 'undo_vote_for_comment': [['unvote', 'is_open']],
'vote_for_thread' : [['vote', 'is_open']], 'vote_for_thread' : [['vote', 'is_open']],
'flag_abuse_for_thread': [['vote', 'is_open']],
'undo_vote_for_thread': [['unvote', 'is_open']], 'undo_vote_for_thread': [['unvote', 'is_open']],
'follow_thread' : ['follow_thread'], 'follow_thread' : ['follow_thread'],
'follow_commentable': ['follow_commentable'], 'follow_commentable': ['follow_commentable'],
......
...@@ -352,7 +352,7 @@ def safe_content(content): ...@@ -352,7 +352,7 @@ def safe_content(content):
'updated_at', 'depth', 'type', 'commentable_id', 'comments_count', 'updated_at', 'depth', 'type', 'commentable_id', 'comments_count',
'at_position_list', 'children', 'highlighted_title', 'highlighted_body', 'at_position_list', 'children', 'highlighted_title', 'highlighted_body',
'courseware_title', 'courseware_url', 'tags', 'unread_comments_count', 'courseware_title', 'courseware_url', 'tags', 'unread_comments_count',
'read', 'read', "abuse_flaggers", "spoiler_flaggers"
] ]
if (content.get('anonymous') is False) and (content.get('anonymous_to_peers') is False): if (content.get('anonymous') is False) and (content.get('anonymous_to_peers') is False):
......
...@@ -84,6 +84,7 @@ if Backbone? ...@@ -84,6 +84,7 @@ if Backbone?
urlMappers: urlMappers:
'retrieve' : -> DiscussionUtil.urlFor('retrieve_single_thread', @discussion.id, @id) 'retrieve' : -> DiscussionUtil.urlFor('retrieve_single_thread', @discussion.id, @id)
'reply' : -> DiscussionUtil.urlFor('create_comment', @id) 'reply' : -> DiscussionUtil.urlFor('create_comment', @id)
'flagAbuse': -> DiscussionUtil.urlFor("flagAbuse_#{@get('type')}", @id)
'unvote' : -> DiscussionUtil.urlFor("undo_vote_for_#{@get('type')}", @id) 'unvote' : -> DiscussionUtil.urlFor("undo_vote_for_#{@get('type')}", @id)
'upvote' : -> DiscussionUtil.urlFor("upvote_#{@get('type')}", @id) 'upvote' : -> DiscussionUtil.urlFor("upvote_#{@get('type')}", @id)
'downvote' : -> DiscussionUtil.urlFor("downvote_#{@get('type')}", @id) 'downvote' : -> DiscussionUtil.urlFor("downvote_#{@get('type')}", @id)
...@@ -114,6 +115,14 @@ if Backbone? ...@@ -114,6 +115,14 @@ if Backbone?
@get("votes")["up_count"] = parseInt(@get("votes")["up_count"]) - 1 @get("votes")["up_count"] = parseInt(@get("votes")["up_count"]) - 1
@trigger "change", @ @trigger "change", @
flagAbuse: ->
@get("abuse_flaggers").push window.user.get('id')
@trigger "change", @
unflagAbuse: ->
@get("votes")["up_count"] = parseInt(@get("votes")["up_count"]) - 1
@trigger "change", @
display_body: -> display_body: ->
if @has("highlighted_body") if @has("highlighted_body")
String(@get("highlighted_body")).replace(/<highlight>/g, '<mark>').replace(/<\/highlight>/g, '</mark>') String(@get("highlighted_body")).replace(/<highlight>/g, '<mark>').replace(/<\/highlight>/g, '</mark>')
......
...@@ -48,6 +48,7 @@ class @DiscussionUtil ...@@ -48,6 +48,7 @@ class @DiscussionUtil
update_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/update" update_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/update"
create_comment : "/courses/#{$$course_id}/discussion/threads/#{param}/reply" create_comment : "/courses/#{$$course_id}/discussion/threads/#{param}/reply"
delete_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/delete" delete_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/delete"
flagAbuse_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/flagAbuse"
upvote_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/upvote" upvote_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/upvote"
downvote_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/downvote" downvote_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/downvote"
undo_vote_for_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/unvote" undo_vote_for_thread : "/courses/#{$$course_id}/discussion/threads/#{param}/unvote"
......
...@@ -3,6 +3,8 @@ if Backbone? ...@@ -3,6 +3,8 @@ if Backbone?
events: events:
"click .discussion-vote": "toggleVote" "click .discussion-vote": "toggleVote"
"click .discussion-flag-abuse": "toggleFlagAbuse"
"click .discussion-flag-spoiler": "toggleFlagSpoiler"
"click .action-follow": "toggleFollowing" "click .action-follow": "toggleFollowing"
"click .action-edit": "edit" "click .action-edit": "edit"
"click .action-delete": "delete" "click .action-delete": "delete"
...@@ -57,6 +59,20 @@ if Backbone? ...@@ -57,6 +59,20 @@ if Backbone?
else else
@vote() @vote()
toggleFlagAbuse: (event) ->
event.preventDefault()
if window.user in @model.get("abuse_flaggers")
@unFlagAbuse()
else
@flagAbuse()
toggleFlagSpoiler: (event) ->
event.preventDefault()
if window.user in @model.abuse_flaggers
@unFlagAbuse()
else
@flagAbuse()
toggleFollowing: (event) -> toggleFollowing: (event) ->
$elem = $(event.target) $elem = $(event.target)
url = null url = null
...@@ -82,6 +98,16 @@ if Backbone? ...@@ -82,6 +98,16 @@ if Backbone?
if textStatus == 'success' if textStatus == 'success'
@model.set(response, {silent: true}) @model.set(response, {silent: true})
flagAbuse: ->
url = @model.urlFor("flagAbuse")
DiscussionUtil.safeAjax
$elem: @$(".discussion-flag-abuse")
url: url
type: "POST"
success: (response, textStatus) =>
if textStatus == 'success'
@model.set(response, {silent: true})
unvote: -> unvote: ->
window.user.unvote(@model) window.user.unvote(@model)
url = @model.urlFor("unvote") url = @model.urlFor("unvote")
...@@ -93,6 +119,17 @@ if Backbone? ...@@ -93,6 +119,17 @@ if Backbone?
if textStatus == 'success' if textStatus == 'success'
@model.set(response, {silent: true}) @model.set(response, {silent: true})
unFlagAbuse: ->
window.user.unvote(@model)
url = @model.urlFor("unvote")
DiscussionUtil.safeAjax
$elem: @$(".discussion-vote")
url: url
type: "POST"
success: (response, textStatus) =>
if textStatus == 'success'
@model.set(response, {silent: true})
edit: (event) -> edit: (event) ->
@trigger "thread:edit", event @trigger "thread:edit", event
......
...@@ -28,8 +28,10 @@ ...@@ -28,8 +28,10 @@
<header> <header>
<a href="#" class="vote-btn discussion-vote discussion-vote-up" data-role="discussion-vote" data-tooltip="vote"> <a href="#" class="vote-btn discussion-vote discussion-vote-up" data-role="discussion-vote" data-tooltip="vote">
<span class="plus-icon">+</span> <span class='votes-count-number'>${'<%- votes["up_count"] %>'}</span></a> <span class="plus-icon">+</span> <span class='votes-count-number'>${'<%- votes["up_count"] %>'}</span></a>
<a href="#" class="abuse-btn discussion-vote discussion-vote-up" data-role="discussion-flag" data-tooltip="flag as abusive"> <a href="#" class="abuse-btn discussion-flag-abuse" data-role="discussion-flag-abuse" data-tooltip="flag as abusive">
<span class="plus-icon">+</span> <span class='votes-count-number'>${'<%- abuse_flaggers.length%>'}</span></a> <span class="plus-icon">+</span> <span class='votes-count-number'>${'<%- abuse_flaggers.length%>'}</span></a>
<a href="#" class="abuse-btn discussion-flag-spoiler" data-role="discussion-flag-abuse" data-tooltip="flag as abusive">
<span class="plus-icon">+</span> <span class='votes-count-number'>${'<%- spoiler_flaggers.length%>'}</span></a>
<h1>${'<%- title %>'}</h1> <h1>${'<%- title %>'}</h1>
<p class="posted-details"> <p class="posted-details">
${"<% if (obj.username) { %>"} ${"<% if (obj.username) { %>"}
......
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