diff --git a/lms/djangoapps/django_comment_client/helpers.py b/lms/djangoapps/django_comment_client/helpers.py new file mode 100644 index 0000000000..7c98aa4742 --- /dev/null +++ b/lms/djangoapps/django_comment_client/helpers.py @@ -0,0 +1,29 @@ +from django.core.urlresolvers import reverse +from mitxmako.shortcuts import render_to_string +import urllib + +def pluralize(singular_term, count): + if int(count) >= 2: + return singular_term + 's' + return singular_term + +def show_if(text, condition): + if condition: + return text + else: + return '' + +def close_thread_text(content): + if content.get('closed'): + return 'Re-open thread' + else: + return 'Close thread' + +def url_for_user(course_id, user_id): + return reverse('django_comment_client.forum.views.user_profile', args=[course_id, user_id]) + +def url_for_tags(course_id, tags): + return reverse('django_comment_client.forum.views.forum_form_discussion', args=[course_id]) + '?' + urllib.urlencode({'tags': ",".join(tags)}) + +def render_content(content): + return render_to_string('discussion/_content.html', {'content': content}) diff --git a/lms/djangoapps/django_comment_client/utils.py b/lms/djangoapps/django_comment_client/utils.py index 3ef33afbbf..47d0a676b4 100644 --- a/lms/djangoapps/django_comment_client/utils.py +++ b/lms/djangoapps/django_comment_client/utils.py @@ -175,9 +175,3 @@ def get_annotated_content_infos(course_id, thread, user): _annotate(child) _annotate(thread) return infos - -def pluralize(singular_term, count): - if int(count) >= 2: - return singular_term + 's' - return singular_term - diff --git a/lms/templates/discussion/_content.html b/lms/templates/discussion/_content.html new file mode 100644 index 0000000000..2f37bd89a7 --- /dev/null +++ b/lms/templates/discussion/_content.html @@ -0,0 +1,96 @@ +<%! from django_comment_client.helpers import url_for_tags, url_for_user %> +<%! from datehelper import time_ago_in_words %> +<%! from dateutil.parser import parse %> +<%! from django_comment_client.helpers import close_thread_text, \ + url_for_tags, \ + url_for_user, \ + pluralize +%> + +
+
+ ${render_vote(content)} +
+ + % if content['type'] == "thread": + ${render_title(content)} + % endif +
+ +
${(content.get('highlighted_body') or content['body']) | h}
+ + % if content['type'] == "thread": + ${render_tags(content)} + % endif + ${render_bottom_bar(content)} +
+
+
+
+ +<%def name="render_title(content)"> + ${(content.get('highlighted_title') or content['title']) | h} + + + +<%def name="render_tags(content)"> +
+ % for tag in content['tags']: + ${tag | h} + % endfor +
+ + + +<%def name="render_bottom_bar(content)"> +
+ ${render_info(content)} + +
+ + +<%def name="render_info(content)"> + +
+ ${time_ago_in_words(parse(content['updated_at']))} ago by + % if content['anonymous']: + anonymous + % else: + ${content['username']} + % endif +
+
+ % if content.get('comments_count', -1) >= 0: + % if discussion_type == 'user': + Show all comments (${content['comments_count']} total) + % else: + Show ${content['comments_count']} ${pluralize('comment', content['comments_count'])} + % endif + % endif +
+ + +<%def name="render_link(cls, html)"> + ${html} + + +<%def name="render_vote(content)"> +
+ ${render_link("discussion-vote discussion-vote-up", "▲")} +
${content['votes']['point']}
+ ${render_link("discussion-vote discussion-vote-down", "▼")} +
+ diff --git a/lms/templates/discussion/_content_renderer.html b/lms/templates/discussion/_content_renderer.html new file mode 100644 index 0000000000..8834e4b327 --- /dev/null +++ b/lms/templates/discussion/_content_renderer.html @@ -0,0 +1,20 @@ +<%! import django_comment_client.helpers as helpers %> + +<%def name="render_content(content)"> + ${helpers.render_content(content)} + + +<%def name="render_content_with_comments(content)"> +
+ ${render_content(content)} + ${render_comments(content.get('children', []))} +
+ + +<%def name="render_comments(comments)"> +
+ % for comment in comments: + ${render_content_with_comments(comment)} + % endfor +
+ diff --git a/lms/templates/discussion/_forum.html b/lms/templates/discussion/_forum.html index f0c6ad4be9..21dd182002 100644 --- a/lms/templates/discussion/_forum.html +++ b/lms/templates/discussion/_forum.html @@ -1,4 +1,4 @@ -<%namespace name="renderer" file="_thread.html"/> +<%namespace name="renderer" file="_content_renderer.html"/>
@@ -16,7 +16,7 @@ <%include file="_sort.html" />
% for thread in threads: - ${renderer.render_thread(course_id, thread, show_comments=False)} + ${renderer.render_content_with_comments(thread)} % endfor
<%include file="_paginator.html" /> diff --git a/lms/templates/discussion/_inline.html b/lms/templates/discussion/_inline.html index 9e16c49d58..1737e2e558 100644 --- a/lms/templates/discussion/_inline.html +++ b/lms/templates/discussion/_inline.html @@ -1,4 +1,4 @@ -<%namespace name="renderer" file="_thread.html"/> +<%namespace name="renderer" file="_content_renderer.html"/>
@@ -6,7 +6,7 @@
% for thread in threads: - ${renderer.render_thread(course_id, thread, show_comments=False)} + ${renderer.render_content_with_comments(thread)} % endfor
diff --git a/lms/templates/discussion/_thread.html b/lms/templates/discussion/_thread.html deleted file mode 100644 index 8d4c36ea77..0000000000 --- a/lms/templates/discussion/_thread.html +++ /dev/null @@ -1,144 +0,0 @@ -<%! from django.core.urlresolvers import reverse %> -<%! from datehelper import time_ago_in_words %> -<%! from dateutil.parser import parse %> -<%! from django_comment_client.utils import pluralize %> -<%! import urllib %> - -<%! - def show_if(text, condition): - if condition: - return text - else: - return '' -%> - -<%! - def close_thread_text(content): - if content.get('closed'): - return 'Re-open thread' - else: - return 'Close thread' -%> - -<%def name="render_thread(course_id, thread, show_comments=False)"> -
- ${render_content(thread, "thread", show_comments=show_comments)} - % if show_comments: - ${render_comments(thread.get('children', []))} - % endif -
- - -<%def name="render_comment(comment)"> -
- ${render_content(comment, "comment")} -
- ${render_comments(comment.get('children', []))} -
-
- - -<%def name="render_comments(comments)"> -
- % for comment in comments: - ${render_comment(comment)} - % endfor -
- - -<%def name="render_content(content, type, **kwargs)"> -
-
- ${render_vote(content)} -
- - ${render_title(content, type, **kwargs)} -
- -
${(content.get('highlighted_body') or content['body']) | h}
- - ${render_tags(content, type, **kwargs)} - ${render_bottom_bar(content, type, **kwargs)} -
-
-
-
- - -<%def name="render_title(content, type, **kwargs)"> - % if type == "thread": - ${(content.get('highlighted_title') or content['title']) | h} - - % endif - - -<%def name="render_tags(content, type, **kwargs)"> - <% - def url_for_tags(tags): - return reverse('django_comment_client.forum.views.forum_form_discussion', args=[course_id]) + '?' + urllib.urlencode({'tags': ",".join(tags)}) - %> - % if type == "thread": -
- % for tag in content['tags']: - ${tag | h} - % endfor -
- - % endif - - -<%def name="render_bottom_bar(content, type, **kwargs)"> -
- ${render_info(content, type, **kwargs)} -
    -
  • ${render_link("discussion-link discussion-reply discussion-reply-" + type, "Reply")}
  • -
  • -
  • ${render_link("discussion-link discussion-permanent-link", "Permanent Link")}
  • -
-
- - -<%def name="render_info(content, type, **kwargs)"> - <% - def url_for_user(user_id): - return reverse('django_comment_client.forum.views.user_profile', args=[course_id, user_id]) - %> -
- ${time_ago_in_words(parse(content['updated_at']))} ago by - % if content['anonymous']: - anonymous - % else: - ${content['username']} - % endif -
-
- % if content.get('comments_count', -1) >= 0: - % if discussion_type == 'user': - Show all comments (${content['comments_count']} total) - % else: - Show ${content['comments_count']} ${pluralize('comment', content['comments_count'])} - % endif - % endif -
- - -<%def name="render_link(cls, html)"> - ${html} - - -<%def name="render_vote(content)"> -
- ${render_link("discussion-vote discussion-vote-up", "▲")} -
${content['votes']['point']}
- ${render_link("discussion-vote discussion-vote-down", "▼")} -
- diff --git a/lms/templates/discussion/ajax_create_comment.html b/lms/templates/discussion/ajax_create_comment.html index 9156040e54..92f78f9e52 100644 --- a/lms/templates/discussion/ajax_create_comment.html +++ b/lms/templates/discussion/ajax_create_comment.html @@ -1,3 +1,3 @@ -<%namespace name="renderer" file="_thread.html"/> +<%namespace name="renderer" file="_content_renderer.html"/> -${renderer.render_comment(content)} +${renderer.render_content_with_comments(content)} diff --git a/lms/templates/discussion/ajax_create_thread.html b/lms/templates/discussion/ajax_create_thread.html index 884a96b3a4..92f78f9e52 100644 --- a/lms/templates/discussion/ajax_create_thread.html +++ b/lms/templates/discussion/ajax_create_thread.html @@ -1,3 +1,3 @@ -<%namespace name="renderer" file="_thread.html"/> +<%namespace name="renderer" file="_content_renderer.html"/> -${renderer.render_thread(course_id, content)} +${renderer.render_content_with_comments(content)} diff --git a/lms/templates/discussion/ajax_update_comment.html b/lms/templates/discussion/ajax_update_comment.html index 61437467da..2a451bb34c 100644 --- a/lms/templates/discussion/ajax_update_comment.html +++ b/lms/templates/discussion/ajax_update_comment.html @@ -1,3 +1,3 @@ -<%namespace name="renderer" file="_thread.html"/> +<%namespace name="renderer" file="_content_renderer.html"/> -${renderer.render_content(content, "comment")} +${renderer.render_content(content)} diff --git a/lms/templates/discussion/ajax_update_thread.html b/lms/templates/discussion/ajax_update_thread.html index 59afa57ecc..2a451bb34c 100644 --- a/lms/templates/discussion/ajax_update_thread.html +++ b/lms/templates/discussion/ajax_update_thread.html @@ -1,3 +1,3 @@ -<%namespace name="renderer" file="_thread.html"/> +<%namespace name="renderer" file="_content_renderer.html"/> -${renderer.render_content(content, "thread")} +${renderer.render_content(content)}