From 91379aa9a68856105f5abd9cd2596a56637f1e1d Mon Sep 17 00:00:00 2001 From: Arjun Singh Date: Tue, 4 Sep 2012 03:53:37 -0700 Subject: [PATCH 1/3] improve date search, fix respnding, make sidebar expand when discussion column does --- lms/static/coffee/src/discussion/content.coffee | 1 - lms/static/coffee/src/discussion/discussion.coffee | 9 ++++++++- lms/static/coffee/src/discussion/main.coffee | 1 + .../discussion/views/discussion_thread_list_view.coffee | 2 +- .../src/discussion/views/discussion_thread_view.coffee | 2 +- .../src/discussion/views/thread_response_view.coffee | 4 +++- lms/static/js/discussions-temp.js | 5 +++++ 7 files changed, 19 insertions(+), 5 deletions(-) diff --git a/lms/static/coffee/src/discussion/content.coffee b/lms/static/coffee/src/discussion/content.coffee index 93d1414035..9549a93a43 100644 --- a/lms/static/coffee/src/discussion/content.coffee +++ b/lms/static/coffee/src/discussion/content.coffee @@ -24,7 +24,6 @@ if Backbone? updateInfo: (info) -> if info - console.log info.ability @set('ability', info.ability) @set('voted', info.voted) @set('subscribed', info.subscribed) diff --git a/lms/static/coffee/src/discussion/discussion.coffee b/lms/static/coffee/src/discussion/discussion.coffee index 0737aaed0c..148ef64891 100644 --- a/lms/static/coffee/src/discussion/discussion.coffee +++ b/lms/static/coffee/src/discussion/discussion.coffee @@ -5,7 +5,7 @@ if Backbone? initialize: -> @bind "add", (item) => item.discussion = @ - @comparator = @sortByDate + @comparator = @sortByDateRecentFirst find: (id) -> _.first @where(id: id) @@ -19,6 +19,13 @@ if Backbone? sortByDate: (thread) -> thread.get("created_at") + sortByDateRecentFirst: (thread) -> + -(new Date(thread.get("created_at")).getTime()) + #return String.fromCharCode.apply(String, + # _.map(thread.get("created_at").split(""), + # ((c) -> return 0xffff - c.charChodeAt())) + #) + sortByVotes: (thread1, thread2) -> thread1_count = parseInt(thread1.get("votes")['up_count']) thread2_count = parseInt(thread2.get("votes")['up_count']) diff --git a/lms/static/coffee/src/discussion/main.coffee b/lms/static/coffee/src/discussion/main.coffee index 4ec7dc9b8d..dae4af8e02 100644 --- a/lms/static/coffee/src/discussion/main.coffee +++ b/lms/static/coffee/src/discussion/main.coffee @@ -8,6 +8,7 @@ DiscussionApp = threads = element.data("threads") content_info = element.data("content-info") window.user = new DiscussionUser(user_info) + console.log content_info Content.loadContentInfos(content_info) discussion = new Discussion(threads) new DiscussionRouter({discussion: discussion}) diff --git a/lms/static/coffee/src/discussion/views/discussion_thread_list_view.coffee b/lms/static/coffee/src/discussion/views/discussion_thread_list_view.coffee index 66911d3a8e..ef763831ae 100644 --- a/lms/static/coffee/src/discussion/views/discussion_thread_list_view.coffee +++ b/lms/static/coffee/src/discussion/views/discussion_thread_list_view.coffee @@ -89,7 +89,7 @@ class @DiscussionThreadListView extends Backbone.View $(event.target).addClass("active") sortBy = $(event.target).data("sort") if sortBy == "date" - @displayedCollection.comparator = @displayedCollection.sortByDate + @displayedCollection.comparator = @displayedCollection.sortByDateRecentFirst else if sortBy == "votes" @displayedCollection.comparator = @displayedCollection.sortByVotes else if sortBy == "comments" diff --git a/lms/static/coffee/src/discussion/views/discussion_thread_view.coffee b/lms/static/coffee/src/discussion/views/discussion_thread_view.coffee index b97fbc30cf..04d89bf2e2 100644 --- a/lms/static/coffee/src/discussion/views/discussion_thread_view.coffee +++ b/lms/static/coffee/src/discussion/views/discussion_thread_view.coffee @@ -111,7 +111,7 @@ class @DiscussionThreadView extends DiscussionContentView event.preventDefault() url = @model.urlFor('reply') body = @$("#wmd-input").val() - response = new Comment(body: body, created_at: (new Date()).toISOString(), username: window.user.get("username"), votes: { up_count: 0 }) + response = new Comment(body: body, created_at: (new Date()).toISOString(), username: window.user.get("username"), votes: { up_count: 0 }, endorsed: false, user_id: window.user.get("id")) @renderResponse(response) @addComment() diff --git a/lms/static/coffee/src/discussion/views/thread_response_view.coffee b/lms/static/coffee/src/discussion/views/thread_response_view.coffee index 8e0509f0f4..cd060d79e0 100644 --- a/lms/static/coffee/src/discussion/views/thread_response_view.coffee +++ b/lms/static/coffee/src/discussion/views/thread_response_view.coffee @@ -8,6 +8,8 @@ class @ThreadResponseView extends DiscussionContentView "click .action-endorse": "toggleEndorse" render: -> + console.log @model + console.log @model.toJSON() @$el.html(@template(@model.toJSON())) if window.user.voted(@model) @$(".vote-btn").addClass("is-cast") @@ -65,7 +67,7 @@ class @ThreadResponseView extends DiscussionContentView body = @$(".comment-form-input").val() if not body.trim().length return - comment = new Comment(body: body, created_at: (new Date()).toISOString(), username: window.user.get("username")) + comment = new Comment(body: body, created_at: (new Date()).toISOString(), username: window.user.get("username"), user_id: window.user.get("id")) @renderComment(comment) @trigger "comment:add" @$(".comment-form-input").val("") diff --git a/lms/static/js/discussions-temp.js b/lms/static/js/discussions-temp.js index 12a3f0e0b8..ad3eb1712c 100644 --- a/lms/static/js/discussions-temp.js +++ b/lms/static/js/discussions-temp.js @@ -68,6 +68,11 @@ $(document).ready(function() { $(window).bind('resize', updateSidebarDimensions); $(window).bind('scroll', updateSidebarCoordinates); + $('.discussion-column').bind("input", function (e) { + console.log("resized"); + updateSidebarCoordinates(); + updateSidebarDimensions(); + }) updateSidebarCoordinates(); updateSidebarDimensions(); }); From 10887ab117e504526cfbbc72e429a65cb6fd11d2 Mon Sep 17 00:00:00 2001 From: Matthew Mongeau Date: Tue, 4 Sep 2012 11:52:40 -0400 Subject: [PATCH 2/3] Fix voting. --- .../coffee/src/discussion/content.coffee | 8 +++++ .../discussion/models/discussion_user.coffee | 8 +++++ .../views/discussion_thread_view.coffee | 36 +++++++++++-------- .../discussion/_underscore_templates.html | 2 +- 4 files changed, 39 insertions(+), 15 deletions(-) diff --git a/lms/static/coffee/src/discussion/content.coffee b/lms/static/coffee/src/discussion/content.coffee index 7540b508ef..ee6c50ecf7 100644 --- a/lms/static/coffee/src/discussion/content.coffee +++ b/lms/static/coffee/src/discussion/content.coffee @@ -447,6 +447,14 @@ if Backbone? @set('subscribed', false) @trigger "thread:unfollow" + vote: -> + @get("votes")["up_count"] = parseInt(@get("votes")["up_count"]) + 1 + @trigger "change" + + unvote: -> + @get("votes")["up_count"] = parseInt(@get("votes")["up_count"]) - 1 + @trigger "change" + display_body: -> if @has("highlighted_body") String(@get("highlighted_body")).replace(//g, '').replace(/<\/highlight>/g, '') diff --git a/lms/static/coffee/src/discussion/models/discussion_user.coffee b/lms/static/coffee/src/discussion/models/discussion_user.coffee index 6cf0dbedbb..6449e80b85 100644 --- a/lms/static/coffee/src/discussion/models/discussion_user.coffee +++ b/lms/static/coffee/src/discussion/models/discussion_user.coffee @@ -4,3 +4,11 @@ class @DiscussionUser extends Backbone.Model voted: (thread) -> _.include(@get('upvoted_ids'), thread.id) + + vote: (thread) -> + @get('upvoted_ids').push(thread.id) + thread.vote() + + unvote: (thread) -> + @set('upvoted_ids', _.without(@get('upvoted_ids'), thread.id)) + thread.unvote() diff --git a/lms/static/coffee/src/discussion/views/discussion_thread_view.coffee b/lms/static/coffee/src/discussion/views/discussion_thread_view.coffee index 8834a38b77..514f60aef3 100644 --- a/lms/static/coffee/src/discussion/views/discussion_thread_view.coffee +++ b/lms/static/coffee/src/discussion/views/discussion_thread_view.coffee @@ -22,22 +22,32 @@ class @DiscussionThreadView extends DiscussionContentView template: _.template($("#thread-template").html()) + initialize: -> + @model.on "change", @updateModelDetails + render: -> @$el.html(@template(@model.toJSON())) - @model.bind "change", @updateModelDetails - if window.user.following(@model) - @$(".dogear").addClass("is-followed") - - if window.user.voted(@model) - @$(".vote-btn").addClass("is-cast") + @renderDogear() + @renderVoted() @$("span.timeago").timeago() Markdown.makeWmdEditor @$(".reply-body"), "", DiscussionUtil.urlFor("upload"), (text) -> DiscussionUtil.postMathJaxProcessor(text) @convertMath() @renderResponses() @ + renderDogear: -> + if window.user.following(@model) + @$(".dogear").addClass("is-followed") + + renderVoted: => + if window.user.voted(@model) + @$("[data-role=discussion-vote]").addClass("is-cast") + else + @$("[data-role=discussion-vote]").removeClass("is-cast") + updateModelDetails: => - @$(".discussion-vote .votes-count-number").html(@model.get("votes")["up_count"]) + @renderVoted() + @$("[data-role=discussion-vote] .votes-count-number").html(@model.get("votes")["up_count"]) convertMath: -> element = @$(".post-body") @@ -64,10 +74,10 @@ class @DiscussionThreadView extends DiscussionContentView toggleVote: (event) -> event.preventDefault() - if not @model.get('voted')#@$(".discussion-vote").hasClass("is-cast") - @vote() - else + if window.user.voted(@model) @unvote() + else + @vote() toggleFollowing: (event) -> $elem = $(event.target) @@ -84,9 +94,8 @@ class @DiscussionThreadView extends DiscussionContentView type: "POST" vote: -> + window.user.vote(@model) url = @model.urlFor("upvote") - @model.set('votes_point', parseInt(@model.get('votes_point')) + 1) - #@$(".discussion-vote .votes-count-number").html(parseInt(@$(".discussion-vote .votes-count-number").html()) + 1) DiscussionUtil.safeAjax $elem: @$(".discussion-vote") url: url @@ -96,9 +105,8 @@ class @DiscussionThreadView extends DiscussionContentView @model.set(response) unvote: -> + window.user.unvote(@model) url = @model.urlFor("unvote") - @model.set('votes_point', parseInt(@model.get('votes_point')) - 1) - #@$(".discussion-vote .votes-count-number").html(parseInt(@$(".discussion-vote .votes-count-number").html()) - 1) DiscussionUtil.safeAjax $elem: @$(".discussion-vote") url: url diff --git a/lms/templates/discussion/_underscore_templates.html b/lms/templates/discussion/_underscore_templates.html index 64fca600e4..1a5fe6158d 100644 --- a/lms/templates/discussion/_underscore_templates.html +++ b/lms/templates/discussion/_underscore_templates.html @@ -3,7 +3,7 @@
- + ${'<%- votes["up_count"] %>'} + + ${'<%- votes["up_count"] %>'}

${'<%- title %>'}

${'<%- created_at %>'} by From ebae40a39246180e561b186fb5aed04005c3b8b6 Mon Sep 17 00:00:00 2001 From: Arjun Singh Date: Tue, 4 Sep 2012 09:21:21 -0700 Subject: [PATCH 3/3] fix search --- .../django_comment_client/forum/views.py | 20 +++++++++---------- .../views/discussion_thread_list_view.coffee | 11 +++++----- .../views/thread_response_view.coffee | 2 -- 3 files changed, 15 insertions(+), 18 deletions(-) diff --git a/lms/djangoapps/django_comment_client/forum/views.py b/lms/djangoapps/django_comment_client/forum/views.py index 51d3a78d03..4607cc10c5 100644 --- a/lms/djangoapps/django_comment_client/forum/views.py +++ b/lms/djangoapps/django_comment_client/forum/views.py @@ -162,22 +162,22 @@ def forum_form_discussion(request, course_id): 'discussion_data': map(utils.safe_content, threads), }) else: - recent_active_threads = cc.search_recent_active_threads( - course_id, - recursive=False, - query_params={'follower_id': request.user.id}, - ) + #recent_active_threads = cc.search_recent_active_threads( + # course_id, + # recursive=False, + # query_params={'follower_id': request.user.id}, + #) - trending_tags = cc.search_trending_tags( - course_id, - ) + #trending_tags = cc.search_trending_tags( + # course_id, + #) escapedict = {'"': '"'} context = { 'csrf': csrf(request)['csrf_token'], 'course': course, 'content': content, - 'recent_active_threads': recent_active_threads, - 'trending_tags': trending_tags, + #'recent_active_threads': recent_active_threads, + #'trending_tags': trending_tags, 'staff_access' : has_access(request.user, course, 'staff'), 'threads': saxutils.escape(json.dumps(threads),escapedict), 'user_info': saxutils.escape(json.dumps(user_info),escapedict), diff --git a/lms/static/coffee/src/discussion/views/discussion_thread_list_view.coffee b/lms/static/coffee/src/discussion/views/discussion_thread_list_view.coffee index ef763831ae..e485fbfb60 100644 --- a/lms/static/coffee/src/discussion/views/discussion_thread_list_view.coffee +++ b/lms/static/coffee/src/discussion/views/discussion_thread_list_view.coffee @@ -3,7 +3,7 @@ class @DiscussionThreadListView extends Backbone.View events: "click .search": "showSearch" "click .browse": "toggleTopicDrop" - "keyup .post-search-field": "performSearch" + "keydown .post-search-field": "performSearch" "click .sort-bar a": "sortThreads" "click .browse-topic-drop-menu": "filterTopic" "click .browse-topic-drop-search-input": "ignoreClick" @@ -100,8 +100,9 @@ class @DiscussionThreadListView extends Backbone.View clearTimeout(@timer) @timer = setTimeout(callback, ms) - performSearch: -> - callback = => + performSearch: (event) -> + if event.which == 13 + event.preventDefault() url = DiscussionUtil.urlFor("search") text = @$(".post-search-field").val() DiscussionUtil.safeAjax @@ -112,6 +113,4 @@ class @DiscussionThreadListView extends Backbone.View success: (response, textStatus) => if textStatus == 'success' @collection.reset(response.discussion_data) - @displayedCollection.reset(@collection) - - @delay(callback, 300) + @displayedCollection.reset(@collection.models) diff --git a/lms/static/coffee/src/discussion/views/thread_response_view.coffee b/lms/static/coffee/src/discussion/views/thread_response_view.coffee index cd060d79e0..bc3f393661 100644 --- a/lms/static/coffee/src/discussion/views/thread_response_view.coffee +++ b/lms/static/coffee/src/discussion/views/thread_response_view.coffee @@ -8,8 +8,6 @@ class @ThreadResponseView extends DiscussionContentView "click .action-endorse": "toggleEndorse" render: -> - console.log @model - console.log @model.toJSON() @$el.html(@template(@model.toJSON())) if window.user.voted(@model) @$(".vote-btn").addClass("is-cast")