diff --git a/common/lib/xmodule/xmodule/discussion_module.py b/common/lib/xmodule/xmodule/discussion_module.py index 6232e79c8e..e3531468ba 100644 --- a/common/lib/xmodule/xmodule/discussion_module.py +++ b/common/lib/xmodule/xmodule/discussion_module.py @@ -13,16 +13,9 @@ import json class DiscussionModule(XModule): def get_html(self): context = { - 'threads': comment_client.get_threads(self.discussion_id, recursive=False), - 'time_ago_in_words': time_ago_in_words, - 'parse': dateutil.parser.parse, 'discussion_id': self.discussion_id, - 'search_bar': '', - 'user_info': comment_client.get_user_info(self.user_id, raw=True), - 'tags': comment_client.get_threads_tags(raw=True), - 'course_id': self.course_id, } - return self.system.render_template('discussion/inline.html', context) + return self.system.render_template('discussion/_show_discussion.html', context) def __init__(self, system, location, definition, instance_state=None, shared_state=None, **kwargs): XModule.__init__(self, system, location, definition, instance_state, shared_state, **kwargs) @@ -33,8 +26,6 @@ class DiscussionModule(XModule): self.discussion_id = xml_data.attrib['id'] self.title = xml_data.attrib['for'] self.discussion_category = xml_data.attrib['discussion_category'] - self.user_id = instance_state['user_id'] - self.course_id = instance_state['course_id'] class DiscussionDescriptor(RawDescriptor): module_class = DiscussionModule diff --git a/lms/djangoapps/courseware/module_render.py b/lms/djangoapps/courseware/module_render.py index 0bfdb1a1b2..122802f72a 100644 --- a/lms/djangoapps/courseware/module_render.py +++ b/lms/djangoapps/courseware/module_render.py @@ -124,13 +124,6 @@ def get_module(user, request, location, student_module_cache, position=None): ''' descriptor = modulestore().get_item(location) - user_id = user.id - - import re - course_id = re.search(r'^/courses/(?P[^/]+/[^/]+/[^/]+)/', request.path) - if course_id: - course_id = course_id.group('course_id') - instance_module = student_module_cache.lookup(descriptor.category, descriptor.location.url()) @@ -142,11 +135,6 @@ def get_module(user, request, location, student_module_cache, position=None): shared_module = None instance_state = instance_module.state if instance_module is not None else {} - - instance_hash = json.loads(instance_state) if isinstance(instance_state, str) or isinstance(instance_state, unicode) \ - else instance_state - - instance_state = json.dumps(dict(instance_hash.items() + [("user_id", user.id), ("course_id", course_id)])) shared_state = shared_module.state if shared_module is not None else None # TODO (vshnayder): fix hardcoded urls (use reverse) diff --git a/lms/djangoapps/django_comment_client/forum/urls.py b/lms/djangoapps/django_comment_client/forum/urls.py index 6ebdd04aba..945aae9fa5 100644 --- a/lms/djangoapps/django_comment_client/forum/urls.py +++ b/lms/djangoapps/django_comment_client/forum/urls.py @@ -4,5 +4,6 @@ import django_comment_client.forum.views urlpatterns = patterns('django_comment_client.forum.views', url(r'search$', 'search', name='search'), url(r'(?P\w+)/threads/(?P\w+)$', 'single_thread', name='single_thread'), + url(r'(?P\w+)/inline$', 'inline_discussion', name='inline_discussion'), url(r'(?P\w+)$', 'forum_form_discussion', name='forum_form_discussion'), ) diff --git a/lms/djangoapps/django_comment_client/forum/views.py b/lms/djangoapps/django_comment_client/forum/views.py index d878d55238..4f8c5e0f3c 100644 --- a/lms/djangoapps/django_comment_client/forum/views.py +++ b/lms/djangoapps/django_comment_client/forum/views.py @@ -40,6 +40,12 @@ def render_discussion(request, course_id, threads, discussion_id=None, search_te } return render_to_string('discussion/inline.html', context) +def inline_discussion(request, course_id, discussion_id): + print "rendering inline" + threads = comment_client.get_threads(discussion_id, recursive=False) + html = render_discussion(request, course_id, threads, discussion_id) + return HttpResponse(html, content_type="text/plain") + def render_search_bar(request, course_id, discussion_id=None, text=''): if not discussion_id: return '' @@ -54,10 +60,6 @@ def forum_form_discussion(request, course_id, discussion_id): course = check_course(course_id) - _, course_name, _ = course_id.split('/') - - url_course_id = course_id.replace('/', '_').replace('.', '_') - search_text = request.GET.get('text', '') if len(search_text) > 0: @@ -67,9 +69,7 @@ def forum_form_discussion(request, course_id, discussion_id): context = { 'csrf': csrf(request)['csrf_token'], - 'COURSE_TITLE': course.title, 'course': course, - 'init': '', 'content': render_discussion(request, course_id, threads, discussion_id, search_text), 'accordion': render_accordion(request, course, discussion_id), } diff --git a/lms/static/coffee/src/discussion.coffee b/lms/static/coffee/src/discussion.coffee index 261eb69be8..a85fb20e48 100644 --- a/lms/static/coffee/src/discussion.coffee +++ b/lms/static/coffee/src/discussion.coffee @@ -9,9 +9,13 @@ $ -> $('#open_close_accordion a').click @toggle $('#accordion').show() + $(".discussion-module").each (index, elem) -> + Discussion.initializeDiscussionModule(elem) + + $("section.discussion").each (index, discussion) -> - Discussion.bindDiscussionEvents(discussion) Discussion.initializeDiscussion(discussion) + Discussion.bindDiscussionEvents(discussion) generateLocal = (elem) -> @@ -82,12 +86,52 @@ Discussion = upload : "/courses/#{$$course_id}/discussion/upload" search : "/courses/#{$$course_id}/discussion/forum/search" tags_autocomplete : "/courses/#{$$course_id}/discussion/threads/tags/autocomplete" + retrieve_discussion : "/courses/#{$$course_id}/discussion/forum/#{param}/inline" }[name] handleAnchorAndReload: (response) -> #window.location = window.location.pathname + "#" + response['id'] window.location.reload() + initializeDiscussionModule: (elem) -> + $discussionModule = $(elem) + $local = generateLocal($discussionModule) + handleShowDiscussion = (elem) -> + $elem = $(elem) + if $elem.attr("disabled") + return + if not $local("section.discussion").length + $elem.attr("disabled", "disabled") + discussion_id = $elem.attr("discussion_id") + url = Discussion.urlFor 'retrieve_discussion', discussion_id + $.ajax + url: url + method: "GET" + success: (data, textStatus, xhr) -> + $discussionModule.append(data) + discussion = $local("section.discussion") + Discussion.initializeDiscussion(discussion) + Discussion.bindDiscussionEvents(discussion) + $elem.removeAttr("disabled") + $elem.html("Hide Discussion") + $elem.unbind('click').click -> + handleHideDiscussion(this) + dataType: 'html' + else + $local("section.discussion").show() + $elem.html("Hide Discussion") + $elem.unbind('click').click -> + handleHideDiscussion(this) + handleHideDiscussion = (elem) -> + $local("section.discussion").hide() + $elem = $(elem) + $elem.html("Show Discussion") + $elem.unbind('click').click -> + handleShowDiscussion(this) + + $local(".discussion-show").click -> + handleShowDiscussion(this) + initializeDiscussion: (discussion) -> initializeVote = (index, content) -> @@ -342,8 +386,9 @@ Discussion = converter = Markdown.getMathCompatibleConverter() $local(".content-body").html(converter.makeHtml(raw_text)) id = $content.attr("_id") - if not ($$annotated_content_info[id] || [])['editable'] - $local(".discussion-edit").remove() + if $$annotated_content_info? + if not ($$annotated_content_info[id] || [])['editable'] + $local(".discussion-edit").remove() diff --git a/lms/templates/courseware.html b/lms/templates/courseware.html index eb8aed7e1b..7575ad8660 100644 --- a/lms/templates/courseware.html +++ b/lms/templates/courseware.html @@ -36,6 +36,10 @@ document.write('\x3Cscript type="text/javascript" src="' + document.location.protocol + '//www.youtube.com/player_api">\x3C/script>'); + + <%include file="course_navigation.html" args="active_page='courseware'" /> diff --git a/lms/templates/discussion/_show_discussion.html b/lms/templates/discussion/_show_discussion.html new file mode 100644 index 0000000000..3d92f242a1 --- /dev/null +++ b/lms/templates/discussion/_show_discussion.html @@ -0,0 +1,3 @@ +