Commit a2108e48 by Rocky Duan

mustache template

parent 7d271714
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from mitxmako.shortcuts import render_to_string from mitxmako.shortcuts import render_to_string
from utils import render_mustache
import urllib import urllib
def pluralize(singular_term, count): def pluralize(singular_term, count):
...@@ -26,4 +27,7 @@ def url_for_tags(course_id, tags): ...@@ -26,4 +27,7 @@ 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)}) return reverse('django_comment_client.forum.views.forum_form_discussion', args=[course_id]) + '?' + urllib.urlencode({'tags': ",".join(tags)})
def render_content(content): def render_content(content):
return render_to_string('discussion/_content.html', {'content': content}) context = {
'content': content,
}
return render_mustache('discussion/_content.mustache', context)
...@@ -6,12 +6,15 @@ from xmodule.modulestore.django import modulestore ...@@ -6,12 +6,15 @@ from xmodule.modulestore.django import modulestore
from django.http import HttpResponse from django.http import HttpResponse
from django.utils import simplejson from django.utils import simplejson
from django.db import connection from django.db import connection
import logging
from django.conf import settings from django.conf import settings
from django_comment_client.permissions import check_permissions_by_view
from mitxmako import middleware
import logging
import operator import operator
import itertools import itertools
import pystache
from django_comment_client.permissions import check_permissions_by_view
_FULLMODULES = None _FULLMODULES = None
_DISCUSSIONINFO = None _DISCUSSIONINFO = None
...@@ -175,3 +178,7 @@ def get_annotated_content_infos(course_id, thread, user): ...@@ -175,3 +178,7 @@ def get_annotated_content_infos(course_id, thread, user):
_annotate(child) _annotate(child)
_annotate(thread) _annotate(thread)
return infos return infos
def render_mustache(template_name, dictionary, *args, **kwargs):
template = middleware.lookup['main'].get_template(template_name).source
return pystache.render(template, dictionary)
...@@ -338,7 +338,7 @@ initializeFollowThread = (thread) -> ...@@ -338,7 +338,7 @@ initializeFollowThread = (thread) ->
"click .admin-endorse": -> "click .admin-endorse": ->
handleEndorse(this, not $content.hasClass("endorsed")) handleEndorse(this, not $content.hasClass("endorsed"))
"click .discussion-openclose": -> "click .admin-openclose": ->
handleOpenClose(this, $(this).text()) handleOpenClose(this, $(this).text())
"click .admin-edit": -> "click .admin-edit": ->
...@@ -404,6 +404,6 @@ initializeFollowThread = (thread) -> ...@@ -404,6 +404,6 @@ initializeFollowThread = (thread) ->
if not Discussion.getContentInfo id, 'can_delete' if not Discussion.getContentInfo id, 'can_delete'
$local(".admin-delete").remove() $local(".admin-delete").remove()
if not Discussion.getContentInfo id, 'can_openclose' if not Discussion.getContentInfo id, 'can_openclose'
$local(".discussion-openclose").remove() $local(".admin-openclose").remove()
#if not Discussion.getContentInfo id, 'can_vote' #if not Discussion.getContentInfo id, 'can_vote'
# $local(".discussion-vote").css "visibility", "hidden" # $local(".discussion-vote").css "visibility", "hidden"
...@@ -9,7 +9,11 @@ ...@@ -9,7 +9,11 @@
<div class="discussion-content"> <div class="discussion-content">
<div class="discussion-content-wrapper"> <div class="discussion-content-wrapper">
${render_vote(content)} <div class="discussion-votes">
<a class="discussion-vote discussion-vote-up" href="javascript:void(0)">&#9650;</a>
<div class="discussion-votes-point">${content['votes']['point']}</div>
<a class="discussion-vote discussion-vote-down" href="javascript:void(0)">&#9660;</a>
</div>
<div class="discussion-right-wrapper"> <div class="discussion-right-wrapper">
<ul class="admin-actions"> <ul class="admin-actions">
% if content['type'] == 'comment': % if content['type'] == 'comment':
...@@ -18,79 +22,50 @@ ...@@ -18,79 +22,50 @@
<li><a href="javascript:void(0)" class="admin-edit">Edit</a></li> <li><a href="javascript:void(0)" class="admin-edit">Edit</a></li>
<li><a href="javascript:void(0)" class="admin-delete">Delete</a></li> <li><a href="javascript:void(0)" class="admin-delete">Delete</a></li>
% if content['type'] == "thread": % if content['type'] == "thread":
<li><a class="discussion-openclose" id="discussion-openclose-${content['id']}" href="javascript:void(0);">${close_thread_text(content)}</a></li> <li><a class="admin-openclose" href="javascript:void(0);">${close_thread_text(content)}</a></li>
% endif % endif
</ul> </ul>
% if content['type'] == "thread": % if content['type'] == "thread":
${render_title(content)} <a class="thread-title" name="${content['id']}" href="javascript:void(0)">${(content.get('highlighted_title') or content['title']) | h}</a>
<div class="thread-raw-title" style="display: none">${content['title']}</div>
% endif % endif
<div class="discussion-content-view"> <div class="discussion-content-view">
<a name="${content['id']}" style="width: 0; height: 0; padding: 0; border: none;"></a> <a name="${content['id']}" style="width: 0; height: 0; padding: 0; border: none;"></a>
<div class="content-body ${content['type']}-body" id="content-body-${content['id']}">${(content.get('highlighted_body') or content['body']) | h}</div> <div class="content-body">${(content.get('highlighted_body') or content['body']) | h}</div>
<div class="content-raw-body ${content['type']}-raw-body" style="display: none">${content['body'] | h}</div> <div class="content-raw-body" style="display: none">${content['body'] | h}</div>
% if content['type'] == "thread": % if content['type'] == "thread":
${render_tags(content)} <div class="thread-tags">
% for tag in content['tags']:
<a class="thread-tag" href="${url_for_tags(content['course_id'], [tag])}">${tag | h}</a>
% endfor
</div>
<div class="thread-raw-tags" style="display: none">${",".join(content['tags']) | h}</div>
% endif % endif
${render_bottom_bar(content)} <div class="info">
<div class="comment-time">
${time_ago_in_words(parse(content['updated_at']))} ago by
% if content['anonymous']:
anonymous
% else:
<a href="${url_for_user(content['course_id'], content['user_id'])}">${content['username']}</a>
% endif
</div>
<div class="comment-count">
% if content.get('comments_count', -1) >= 0:
% if discussion_type == 'user':
<a href="javascript:void(0)" class="discussion-show-comments first-time">Show all comments (${content['comments_count']} total)</a>
% else:
<a href="javascript:void(0)" class="discussion-show-comments">Show ${content['comments_count']} ${pluralize('comment', content['comments_count'])}</a>
% endif
% endif
</div>
<ul class="discussion-actions">
<li><a class="discussion-link discussion-reply discussion-reply-${content['type']}" href="javascript:void(0)">Reply</a></li>
<li><div class="follow-wrapper"></div></li>
<li><a class="discussion-link discussion-permanent-link" href="javascript:void(0)">Permanent Link</a></li>
</ul>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<%def name="render_title(content)">
<a class="thread-title" name="${content['id']}" href="javascript:void(0)">${(content.get('highlighted_title') or content['title']) | h}</a>
<div class="thread-raw-title" style="display: none">${content['title']}</div>
</%def>
<%def name="render_tags(content)">
<div class="thread-tags">
% for tag in content['tags']:
<a class="thread-tag" href="${url_for_tags(content['course_id'], [tag])}">${tag | h}</a>
% endfor
</div>
<div class="thread-raw-tags" style="display: none">${",".join(content['tags']) | h}</div>
</%def>
<%def name="render_bottom_bar(content)">
<div class="info">
${render_info(content)}
<ul class="discussion-actions">
<li>${render_link("discussion-link discussion-reply discussion-reply-" + content['type'], "Reply")}</li>
<li><div class="follow-wrapper"></div></li>
<li>${render_link("discussion-link discussion-permanent-link", "Permanent Link")}</li>
</ul>
</div>
</%def>
<%def name="render_info(content)">
<div class="comment-time">
${time_ago_in_words(parse(content['updated_at']))} ago by
% if content['anonymous']:
anonymous
% else:
<a href="${url_for_user(content['course_id'], content['user_id'])}">${content['username']}</a>
% endif
</div>
<div class="comment-count">
% if content.get('comments_count', -1) >= 0:
% if discussion_type == 'user':
<a href="javascript:void(0)" class="discussion-show-comments first-time">Show all comments (${content['comments_count']} total)</a>
% else:
<a href="javascript:void(0)" class="discussion-show-comments">Show ${content['comments_count']} ${pluralize('comment', content['comments_count'])}</a>
% endif
% endif
</div>
</%def>
<%def name="render_link(cls, html)">
<a class="${cls}" href="javascript:void(0)">${html}</a>
</%def>
<%def name="render_vote(content)">
<div class="discussion-votes">
${render_link("discussion-vote discussion-vote-up", "&#9650;")}
<div class="discussion-votes-point">${content['votes']['point']}</div>
${render_link("discussion-vote discussion-vote-down", "&#9660;")}
</div>
</%def>
<div class="discussion-content">
<div class="discussion-content-wrapper">
<div class="discussion-votes">
<a class="discussion-vote discussion-vote-up" href="javascript:void(0)">&#9650;</a>
<div class="discussion-votes-point">{{content.votes.point}}</div>
<a class="discussion-vote discussion-vote-down" href="javascript:void(0)">&#9660;</a>
</div>
<div class="discussion-right-wrapper">
<ul class="admin-actions">
<li><a href="javascript:void(0)" class="admin-endorse">Endorse</a></li>
<li><a href="javascript:void(0)" class="admin-edit">Edit</a></li>
<li><a href="javascript:void(0)" class="admin-delete">Delete</a></li>
<li><a href="javascript:void(0)" class="admin-openclose">Close thread</a></li>
</ul>
{{#thread}}
<a class="thread-title" name="{{content.id}}" href="javascript:void(0)">{{{content.displayed_title}}}</a>
<div class="thread-raw-title" style="display: none">{{{content.title}}}</div>
{{/thread}}
<div class="discussion-content-view">
<a name="{{content.id}}" style="width: 0; height: 0; padding: 0; border: none;"></a>
<div class="content-body">{{{content.displayed_body}}}</div>
<div class="content-raw-body" style="display: none">{{{content.body}}}</div>
{{#thread}}
<div class="thread-tags">
{{#content.tags}}
<a class="thread-tag" href="{{#url_for_tags}}{{tag}}{{/url_for_tags}}">{{tag}}</a>
{{/content.tags}}
</div>
<div class="thread-raw-tags" style="display: none">{{content.raw_tags}}</div>
{{/thread}}
<div class="info">
<div class="comment-time">
<span class="time-ago">{{content.updated_at}}</span> ago by
{{#content.anonymous}}
anonymous
{{/content.anonymous}}
{{^content.anonymous}}
<a href="{{#url_for_user}}{{content.user_id}}{{/url_for_user}}">{{content.username}}</a>
{{/content.anonymous}}
</div>
<div class="comment-count">
{{#thread}}
{{#partial_comments}}
<a href="javascript:void(0)" class="discussion-show-comments first-time">Show all comments ({{content.comments_count}} total)</a>
{{/partial_comments}}
{{^partial_comments}}
<a href="javascript:void(0)" class="discussion-show-comments">Show {{#pluralize}}{{content.comments_count}} comment}}{{/pluralize}}</a>
{{/partial_comments}}
{{/thread}}
</div>
<ul class="discussion-actions">
<li><a class="discussion-link discussion-reply discussion-reply-{{content.type}}" href="javascript:void(0)">Reply</a></li>
<li><div class="follow-wrapper"></div></li>
<li><a class="discussion-link discussion-permanent-link" href="javascript:void(0)">Permanent Link</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
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