src/cm/views/texts.py
changeset 250 cae2de810f77
parent 240 a00efaf32ea7
child 254 94afd8e00c74
equal deleted inserted replaced
249:31934b8c7bef 250:cae2de810f77
    13 from cm.utils import get_among, get_among, get_int
    13 from cm.utils import get_among, get_among, get_int
    14 from cm.utils.html import on_content_receive
    14 from cm.utils.html import on_content_receive
    15 from cm.utils.comment_positioning import compute_new_comment_positions, \
    15 from cm.utils.comment_positioning import compute_new_comment_positions, \
    16     insert_comment_markers
    16     insert_comment_markers
    17 from cm.utils.spannifier import spannify
    17 from cm.utils.spannifier import spannify
       
    18 from cm.utils.diff import diff_match_patch2
    18 from cm.views import get_keys_from_dict, get_textversion_by_keys_or_404, get_text_by_keys_or_404, redirect
    19 from cm.views import get_keys_from_dict, get_textversion_by_keys_or_404, get_text_by_keys_or_404, redirect
    19 from cm.views.export import content_export2, content_export
    20 from cm.views.export import content_export2, content_export
    20 from cm.views.user import AnonUserRoleForm, cm_login
    21 from cm.views.user import AnonUserRoleForm, cm_login
    21 from difflib import unified_diff
    22 from difflib import unified_diff
    22 from django import forms
    23 from django import forms
   497                                             _("by %(author)s") %{'author' : v2.get_name()},
   498                                             _("by %(author)s") %{'author' : v2.get_name()},
   498                                             v1.content,
   499                                             v1.content,
   499                                             v2.content)
   500                                             v2.content)
   500     if mode=='1':
   501     if mode=='1':
   501         # alternate diff
   502         # alternate diff
   502         from cm.utils.diff import text_diff
   503         #from cm.utils.diff import text_diff
   503         content = text_diff(v1.get_content(), v2.get_content())
   504         dif = diff_match_patch2()
       
   505         content = dif.diff_prettyHtml_one_way(dif.diff_main(v1.get_content(), v2.get_content()), mode='ins_del')
   504 
   506 
   505     template_dict = {
   507     template_dict = {
   506                      'text' : text,
   508                      'text' : text,
   507                      'v1': v1,
   509                      'v1': v1,
   508                      'v2': v2,
   510                      'v2': v2,
   589                     try:
   591                     try:
   590                         g = gen.next()
   592                         g = gen.next()
   591                     except StopIteration:
   593                     except StopIteration:
   592                         break
   594                         break
   593                 minus, plus = diff_decorate(minus, plus)
   595                 minus, plus = diff_decorate(minus, plus)
   594                 res.append('<tr><td class="diff-marker">-</td><td class="diff-deletedline">%s</td><td class="diff-separator"></td><td class="diff-marker">+</td><td class="diff-addedline">%s</td></tr>' % ('<br />'.join(minus), '<br />'.join(plus)))
   596                 
       
   597                 
       
   598                 minus, plus = '<br />'.join(minus), '<br />'.join(plus)                
       
   599                 dif = diff_match_patch2()
       
   600                 p = dif.diff_prettyHtml_one_way(dif.diff_main(minus, plus), 1)
       
   601                 minus = dif.diff_prettyHtml_one_way(dif.diff_main(minus, plus), 2)
       
   602                 plus = p
       
   603                 res.append('<tr><td class="diff-marker">-</td><td class="diff-deletedline">%s</td><td class="diff-separator"></td><td class="diff-marker">+</td><td class="diff-addedline">%s</td></tr>' % (minus, plus))
   595              
   604              
   596         index += 1
   605         index += 1
   597     res.append('</tbody></table>')
   606     res.append('</tbody></table>')
   598     return ''.join(res)
   607     return ''.join(res)
   599 
   608