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 |