def _diff_post(revision,last_revision,use_default=False,render_mode=False,is_answer=False): title_diff = None body_diff = None tags_diff = None descs = [] if use_default: title_diff = revision.title body_diff = revision.html tags_diff = mark_safe(tags_html(revision.tagname_list())) if last_revision is not None: if not is_answer and last_revision.title != revision.title: title_diff = mark_safe(htmldiff(revision.title,last_revision.title )) descs.append( _("edited title")) if revision.html != last_revision.html: if not render_mode:#markdown diff body_diff = mark_safe(htmldiff(revision.body,last_revision.body )) else:#render html diff revision_html = static_content(revision.html,"markdown") last_revision_html = static_content(last_revision.html,"markdown") body_diff = htmldiff(revision_html,last_revision_html,render_mode=True ) descs.append(_("edited body")) current_tags = " ".join(revision.tagname_list()) last_tags = " ".join(last_revision.tagname_list()) if last_tags != current_tags: tags_diff = tagsdiff(current_tags,last_tags) tags_diff = mark_safe(tags_html(tags_diff)) descs.append(_("edited tags")) return (title_diff,body_diff,tags_diff,",".join(descs))
def revisions(request, id ): post = get_object_or_404(Node, id=id).leaf revisions = list(post.revisions.exclude(suggest_status="pendding").order_by('revised_at')) rev_ctx = [] last_revision = None title_diff,body_diff,tags_diff = (None,None,None) edit_desc = None for i, revision in enumerate(revisions): if i > 0 : (title_diff,body_diff,tags_diff,edit_desc) = _diff_post(revision,last_revision,use_default=True) else: (title_diff,body_diff,tags_diff) = (revision.title,revision.html,mark_safe(tags_html(revision.tagname_list()))) rev_ctx.append(dict(inst=revision)) rev_ctx[i]['title'] = title_diff rev_ctx[i]['html'] = body_diff rev_ctx[i]['tags'] = tags_diff if len(revision.summary) == 0: rev_ctx[i]['summary'] = edit_desc else: rev_ctx[i]['summary'] = revision.summary last_revision = revision rev_ctx.reverse() return render_to_response('revisions.html', { 'post': post, 'revisions': rev_ctx, 'is_post':True, }, context_instance=RequestContext(request))