diff --git a/lms/djangoapps/django_comment_client/forum/views.py b/lms/djangoapps/django_comment_client/forum/views.py index 98ca7b1f7d..77883ae898 100644 --- a/lms/djangoapps/django_comment_client/forum/views.py +++ b/lms/djangoapps/django_comment_client/forum/views.py @@ -18,7 +18,7 @@ from django_comment_client.utils import merge_dict, extract, strip_none, strip_b import json import django_comment_client.utils as utils import comment_client as cc - +import xml.sax.saxutils as saxutils THREADS_PER_PAGE = 50000 PAGES_NEARBY_DELTA = 2 @@ -143,9 +143,10 @@ def render_search_bar(request, course_id, discussion_id=None, text=''): def forum_form_discussion(request, course_id): course = get_course_with_access(request.user, course_id, 'load') + category_map = utils.get_discussion_category_map(course) threads, query_params = get_threads(request, course_id) content = render_forum_discussion(request, course_id, threads, discussion_id=_general_discussion_id(course_id), query_params=query_params) - + user_info = cc.User.from_django_user(request.user).to_dict() if request.is_ajax(): return utils.JsonResponse({ 'html': content, @@ -161,6 +162,7 @@ def forum_form_discussion(request, course_id): trending_tags = cc.search_trending_tags( course_id, ) + escapedict = {'"': '"'} context = { 'csrf': csrf(request)['csrf_token'], 'course': course, @@ -168,7 +170,10 @@ def forum_form_discussion(request, course_id): 'recent_active_threads': recent_active_threads, 'trending_tags': trending_tags, 'staff_access' : has_access(request.user, course, 'staff'), - 'threads': threads, + 'threads': saxutils.escape(json.dumps(threads),escapedict), + 'user_info': saxutils.escape(json.dumps(user_info),escapedict), + 'course_id': course.id, + 'category_map': category_map, } # print "start rendering.." return render_to_response('discussion/index.html', context) @@ -197,7 +202,7 @@ def render_single_thread(request, discussion_id, course_id, thread_id): def single_thread(request, course_id, discussion_id, thread_id): if request.is_ajax(): - + user_info = cc.User.from_django_user(request.user).to_dict() thread = cc.Thread.find(thread_id).retrieve(recursive=True) annotated_content_info = utils.get_annotated_content_infos(course_id, thread, request.user, user_info=user_info) @@ -226,19 +231,19 @@ def single_thread(request, course_id, discussion_id, thread_id): ) user_info = cc.User.from_django_user(request.user).to_dict() - + escapedict = {'"': '"'} context = { 'discussion_id': discussion_id, 'csrf': csrf(request)['csrf_token'], 'init': '', - 'user_info': json.dumps(user_info), + 'user_info': saxutils.escape(json.dumps(user_info),escapedict), 'content': render_single_thread(request, discussion_id, course_id, thread_id), 'course': course, 'recent_active_threads': recent_active_threads, 'trending_tags': trending_tags, 'course_id': course.id, 'thread_id': thread_id, - 'threads': json.dumps(threads), + 'threads': saxutils.escape(json.dumps(threads), escapedict), 'category_map': category_map, } diff --git a/lms/static/coffee/src/discussion/discussion.coffee b/lms/static/coffee/src/discussion/discussion.coffee index bb7a405840..0737aaed0c 100644 --- a/lms/static/coffee/src/discussion/discussion.coffee +++ b/lms/static/coffee/src/discussion/discussion.coffee @@ -3,7 +3,6 @@ if Backbone? model: Thread initialize: -> - DiscussionUtil.addDiscussion @id, @ @bind "add", (item) => item.discussion = @ @comparator = @sortByDate diff --git a/lms/static/coffee/src/discussion/main.coffee b/lms/static/coffee/src/discussion/main.coffee index e69de29bb2..e1f651ddb2 100644 --- a/lms/static/coffee/src/discussion/main.coffee +++ b/lms/static/coffee/src/discussion/main.coffee @@ -0,0 +1,16 @@ +DiscussionApp = + start: (elem)-> + # TODO: Perhaps eliminate usage of global variables when possible + element = $(elem) + window.$$contents = {} + window.$$course_id = element.data("course-id") + user_info = element.data("user-info") + threads = element.data("threads") + window.user = new DiscussionUser(user_info) + discussion = new Discussion(threads) + new DiscussionRouter({discussion: discussion}) + Backbone.history.start({pushState: true, root: "/courses/#{$$course_id}/discussion/forum/"}) + +$ -> + $("section.discussion").each (index, elem) -> + DiscussionApp.start(elem) diff --git a/lms/static/coffee/src/discussion/utils.coffee b/lms/static/coffee/src/discussion/utils.coffee index 3c5259be0b..fa0bbda5e8 100644 --- a/lms/static/coffee/src/discussion/utils.coffee +++ b/lms/static/coffee/src/discussion/utils.coffee @@ -13,16 +13,9 @@ class @DiscussionUtil @getTemplate: (id) -> $("script##{id}").html() - @getDiscussionData: (id) -> - return $$discussion_data[id] - @addContent: (id, content) -> window.$$contents[id] = content @getContent: (id) -> window.$$contents[id] - - @addDiscussion: (id, discussion) -> window.$$discussions[id] = discussion - - @getDiscussion: (id) -> window.$$discussions[id] @bulkUpdateContentInfo: (infos) -> for id, info of infos diff --git a/lms/templates/discussion/index.html b/lms/templates/discussion/index.html index 948fa8dd9d..ed8cb765f2 100644 --- a/lms/templates/discussion/index.html +++ b/lms/templates/discussion/index.html @@ -1,4 +1,7 @@ <%! import django_comment_client.helpers as helpers %> +<%! from django.template.defaultfilters import escapejs %> +<%! from django.core.urlresolvers import reverse %> + <%inherit file="../main.html" /> <%namespace name='static' file='../static_content.html'/> <%block name="bodyclass">discussion @@ -16,51 +19,15 @@ <%include file="../courseware/course_navigation.html" args="active_page='discussion'" /> +<%include file="_new_post.html" /> -
-
- -
- This page intentionally left blank -
-
+ +
+
+ +
+
-
-
-
- -
- -
- ${content.decode('utf-8')} -
-
-
+<%include file="_underscore_templates.html" /> \ No newline at end of file diff --git a/lms/templates/discussion/single_thread.html b/lms/templates/discussion/single_thread.html index cab4502dcf..ee1ef9c269 100644 --- a/lms/templates/discussion/single_thread.html +++ b/lms/templates/discussion/single_thread.html @@ -17,23 +17,7 @@ <%include file="_js_body_dependencies.html" /> <%static:js group='discussion'/> -
<%include file="_underscore_templates.html" />