470 def text_history_compare(request, key, v1_version_key, v2_version_key, mode=''): |
470 def text_history_compare(request, key, v1_version_key, v2_version_key, mode=''): |
471 text = get_text_by_keys_or_404(key) |
471 text = get_text_by_keys_or_404(key) |
472 v1 = get_textversion_by_keys_or_404(v1_version_key, key=key) |
472 v1 = get_textversion_by_keys_or_404(v1_version_key, key=key) |
473 v2 = get_textversion_by_keys_or_404(v2_version_key, key=key) |
473 v2 = get_textversion_by_keys_or_404(v2_version_key, key=key) |
474 |
474 |
475 content = get_uniffied_inner_diff_table(v1.content, v2.content) |
475 content = get_uniffied_inner_diff_table(v1.title, |
|
476 v2.title, |
|
477 _("by %(author)s") %{'author' : v1.get_name()}, |
|
478 _("by %(author)s") %{'author' : v2.get_name()}, |
|
479 v1.content, |
|
480 v2.content) |
476 if mode=='1': |
481 if mode=='1': |
477 # alternate diff |
482 # alternate diff |
478 from cm.utils.diff import text_diff |
483 from cm.utils.diff import text_diff |
479 content = text_diff(v1.get_content(), v2.get_content()) |
484 content = text_diff(v1.get_content(), v2.get_content()) |
480 |
485 |
530 return (start, end + 1) |
535 return (start, end + 1) |
531 |
536 |
532 def diff_decorate(minus, plus): |
537 def diff_decorate(minus, plus): |
533 return minus, plus |
538 return minus, plus |
534 |
539 |
535 def get_uniffied_inner_diff_table(text1, text2): |
540 def get_uniffied_inner_diff_table(title1, title2, author1, author2, text1, text2): |
536 """ |
541 """ |
537 Return the inner of the html table for text1 vs text2 diff |
542 Return the inner of the html table for text1 vs text2 diff |
538 """ |
543 """ |
539 gen = unified_diff(text1.split('\n'), text2.split('\n'), n=3) |
544 gen = unified_diff(text1.split('\n'), text2.split('\n'), n=3) |
540 index = 0 |
545 index = 0 |
541 res = ['<table class="diff"><tbody>'] |
546 res = ['<table class="diff"><tbody>'] |
|
547 res.append('<tr><td></td><td class="diff-title">%s</td><td></td><td></td><td class="diff-title">%s</td></tr>' %(title1, title2)) |
|
548 res.append('<tr><td></td><td class="diff-author">%s</td><td></td><td></td><td class="diff-author">%s</td></tr>' %(author1, author2)) |
|
549 res.append('<tr><td colspan="5"></td></tr>') |
542 #res.append('<tr><td width="50%" colspan="2"></td><td width="50%" colspan="2"></td></tr>') |
550 #res.append('<tr><td width="50%" colspan="2"></td><td width="50%" colspan="2"></td></tr>') |
543 |
551 |
544 for g in gen: |
552 for g in gen: |
545 if index > 1: |
553 if index > 1: |
546 col_in = None |
554 col_in = None |
632 version.edit(new_title, new_format, new_content, new_tags, new_note, True, cancel_modified_scopes) |
640 version.edit(new_title, new_format, new_content, new_tags, new_note, True, cancel_modified_scopes) |
633 |
641 |
634 return version |
642 return version |
635 |
643 |
636 def save_new_version(self, text, request): |
644 def save_new_version(self, text, request): |
637 new_text_version = TextVersion.objects.duplicate(text.get_latest_version(), True) |
645 print "!!" |
638 new_text_version.user = request.user if request.user.is_authenticated() else None |
|
639 new_text_version.note = request.POST.get('note','') |
|
640 new_text_version.email = request.POST.get('email','') |
|
641 new_text_version.name = request.POST.get('name','') |
|
642 new_text_version.save() |
|
643 |
|
644 new_content = request.POST.get('content') |
646 new_content = request.POST.get('content') |
645 new_title = request.POST.get('title') |
647 new_title = request.POST.get('title') |
646 new_format = request.POST.get('format', text.last_text_version.format) |
648 new_format = request.POST.get('format', text.last_text_version.format) |
647 new_note = request.POST.get('note',None) |
649 new_note = request.POST.get('note',None) |
648 new_tags = request.POST.get('tags',None) |
650 new_tags = request.POST.get('tags',None) |
649 cancel_modified_scopes = (request.POST.get('cancel_modified_scopes',u'1') == u'1') |
651 cancel_modified_scopes = (request.POST.get('cancel_modified_scopes',u'1') == u'1') |
|
652 |
|
653 new_text_version = text.edit(new_title, new_format, new_content, new_tags, new_note, keep_comments=True, cancel_modified_scopes=cancel_modified_scopes, new_version=True) |
|
654 |
650 new_text_version.edit(new_title, new_format, new_content, new_tags, new_note, True, cancel_modified_scopes) |
655 new_text_version.edit(new_title, new_format, new_content, new_tags, new_note, True, cancel_modified_scopes) |
|
656 new_text_version.user = request.user if request.user.is_authenticated() else None |
|
657 new_text_version.note = request.POST.get('note','') |
|
658 new_text_version.email = request.POST.get('email','') |
|
659 new_text_version.name = request.POST.get('name','') |
|
660 new_text_version.save() |
651 |
661 |
652 return new_text_version |
662 return new_text_version |
653 |
663 |
654 def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None, |
664 def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None, |
655 initial=None, error_class=ErrorList, label_suffix=':', |
665 initial=None, error_class=ErrorList, label_suffix=':', |