From b6c74b03375fe2daa85d6b72160d224b24f8a09a Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Wed, 27 Jun 2012 12:14:43 -0400 Subject: fixed revision editing for the rich editor use case --- askbot/models/post.py | 2 - askbot/skins/default/templates/answer_edit.html | 17 ++++++-- askbot/skins/default/templates/question_edit.html | 18 +++++---- askbot/tests/post_model_tests.py | 36 ++++++++++++----- askbot/views/writers.py | 49 ++++++++++------------- 5 files changed, 70 insertions(+), 52 deletions(-) diff --git a/askbot/models/post.py b/askbot/models/post.py index ab885e2a..452f920b 100644 --- a/askbot/models/post.py +++ b/askbot/models/post.py @@ -1560,7 +1560,6 @@ class Post(models.Model): comment = const.POST_STATUS['default_version'] else: comment = 'No.%s Revision' % rev_no - from askbot.models.post import PostRevision return PostRevision.objects.create_answer_revision( post = self, author = author, @@ -1590,7 +1589,6 @@ class Post(models.Model): else: comment = 'No.%s Revision' % rev_no - from askbot.models.post import PostRevision return PostRevision.objects.create_question_revision( post = self, revision = rev_no, diff --git a/askbot/skins/default/templates/answer_edit.html b/askbot/skins/default/templates/answer_edit.html index 2e58ae05..b38f3fff 100644 --- a/askbot/skins/default/templates/answer_edit.html +++ b/askbot/skins/default/templates/answer_edit.html @@ -14,9 +14,17 @@
{% if revision_form.revision.errors %}{{ revision_form.revision.errors.as_ul() }}{% endif %}
- {{ revision_form.revision }} + {{ revision_form.revision }}
- {{ macros.edit_post(form, post_html = answer.html, editor_type = settings.EDITOR_TYPE) }} + {{ macros.edit_post( + form, + post_html = revision.text, + editor_type = settings.EDITOR_TYPE + ) + }} {% if settings.WIKI_ON and answer.wiki == False %} {{ macros.checkbox_in_div(form.wiki) }} {% endif %} @@ -24,7 +32,7 @@ {{ macros.checkbox_in_div(form.post_privately) }} {% endif %}
-   +  
@@ -81,7 +89,8 @@ ); $('#id_revision').unbind().change(function(){ - $("#select_revision").click(); + $("#select_revision").val('true'); + $('#edit_post_form_submit_button').click(); }); lanai.highlightSyntax(); diff --git a/askbot/skins/default/templates/question_edit.html b/askbot/skins/default/templates/question_edit.html index 3c6e9145..a6efe913 100644 --- a/askbot/skins/default/templates/question_edit.html +++ b/askbot/skins/default/templates/question_edit.html @@ -11,17 +11,18 @@ {% if revision_form.revision.errors %}{{ revision_form.revision.errors.as_ul() }}{% endif %}
- {{ revision_form.revision }} + {{ revision_form.revision }}
{% set use_category_selector = (settings.TAG_SOURCE == 'category-tree') %} {{ macros.edit_post( form, - post_type='question', - post_html=question.html, - edit_title=True, + post_type = 'question', + post_html = revision.text, + edit_title = True, mandatory_tags = mandatory_tags, use_category_selector = use_category_selector, tag_names = tag_names, @@ -40,7 +41,7 @@ {{ macros.checkbox_in_div(form.post_privately) }} {% endif %} -   +   @@ -100,7 +101,8 @@ ); $('#id_revision').unbind().change(function(){ - $("#select_revision").click(); + $("#select_revision").val('true'); + $('#edit_post_form_submit_button').click(); }); lanai.highlightSyntax(); diff --git a/askbot/tests/post_model_tests.py b/askbot/tests/post_model_tests.py index ac09c667..64d2e9a7 100644 --- a/askbot/tests/post_model_tests.py +++ b/askbot/tests/post_model_tests.py @@ -487,15 +487,22 @@ class ThreadRenderCacheUpdateTests(AskbotTestCase): time.sleep(1.5) # compensate for 1-sec time resolution in some databases - response = self.client.post(urlresolvers.reverse('edit_question', kwargs={'id': question.id}), data={ - 'title': 'edited title', - 'text': 'edited body text', - 'tags': 'tag1 tag2', - 'summary': 'just some edit', - }) + response = self.client.post( + urlresolvers.reverse('edit_question', kwargs={'id': question.id}), + data={ + 'title': 'edited title', + 'text': 'edited body text', + 'tags': 'tag1 tag2', + 'summary': 'just some edit', + 'select_revision': 'false' + } + ) self.assertEqual(1, Post.objects.count()) question = Post.objects.all()[0] - self.assertRedirects(response=response, expected_url=question.get_absolute_url()) + self.assertRedirects( + response=response, + expected_url=question.get_absolute_url() + ) thread = question.thread self.assertEqual(0, thread.answer_count) @@ -574,10 +581,17 @@ class ThreadRenderCacheUpdateTests(AskbotTestCase): time.sleep(1.5) # compensate for 1-sec time resolution in some databases self.client.logout() self.client.login(username='user2', password='pswd') - response = self.client.post(urlresolvers.reverse('edit_answer', kwargs={'id': answer.id}), data={ - 'text': 'edited body text', - 'summary': 'just some edit', - }) + response = self.client.post( + urlresolvers.reverse( + 'edit_answer', + kwargs={'id': answer.id} + ), + data={ + 'text': 'edited body text', + 'summary': 'just some edit', + 'select_revision': 'false' + } + ) self.assertRedirects(response=response, expected_url=answer.get_absolute_url()) answer = Post.objects.get(id=answer.id) diff --git a/askbot/views/writers.py b/askbot/views/writers.py index dee1ee7b..9cfab9fd 100644 --- a/askbot/views/writers.py +++ b/askbot/views/writers.py @@ -334,46 +334,43 @@ def edit_question(request, id): """edit question view """ question = get_object_or_404(models.Post, id=id) - latest_revision = question.get_latest_revision() + revision = question.get_latest_revision() revision_form = None try: request.user.assert_can_edit_question(question) if request.method == 'POST': - if 'select_revision' in request.POST: + if request.POST['select_revision'] == 'true': #revert-type edit - user selected previous revision revision_form = forms.RevisionForm( question, - latest_revision, + revision, request.POST ) if revision_form.is_valid(): # Replace with those from the selected revision rev_id = revision_form.cleaned_data['revision'] - selected_revision = models.PostRevision.objects.question_revisions().get( - post = question, - revision = rev_id - ) + revision = question.revisions.get(revision = rev_id) form = forms.EditQuestionForm( question = question, user = request.user, - revision = selected_revision + revision = revision ) else: form = forms.EditQuestionForm( request.POST, question = question, user = request.user, - revision = latest_revision + revision = revision ) else:#new content edit # Always check modifications against the latest revision form = forms.EditQuestionForm( request.POST, question = question, - revision = latest_revision, + revision = revision, user = request.user, ) - revision_form = forms.RevisionForm(question, latest_revision) + revision_form = forms.RevisionForm(question, revision) if form.is_valid(): if form.has_changed(): @@ -397,14 +394,14 @@ def edit_question(request, id): return HttpResponseRedirect(question.get_absolute_url()) else: #request type was "GET" - revision_form = forms.RevisionForm(question, latest_revision) + revision_form = forms.RevisionForm(question, revision) initial = { 'post_privately': question.is_private(), 'wiki': question.wiki } form = forms.EditQuestionForm( question = question, - revision = latest_revision, + revision = revision, user = request.user, initial = initial ) @@ -413,6 +410,7 @@ def edit_question(request, id): 'page_class': 'edit-question-page', 'active_tab': 'questions', 'question': question, + 'revision': revision, 'revision_form': revision_form, 'mandatory_tags': models.tag.get_mandatory_tags(), 'form' : form, @@ -431,35 +429,31 @@ def edit_question(request, id): @decorators.check_spam('text') def edit_answer(request, id): answer = get_object_or_404(models.Post, id=id) - latest_revision = answer.get_latest_revision() + revision = answer.get_latest_revision() try: request.user.assert_can_edit_answer(answer) - latest_revision = answer.get_latest_revision() if request.method == "POST": - if 'select_revision' in request.POST: + if request.POST['select_revision'] == 'true': # user has changed revistion number revision_form = forms.RevisionForm( answer, - latest_revision, + revision, request.POST ) if revision_form.is_valid(): # Replace with those from the selected revision rev = revision_form.cleaned_data['revision'] - selected_revision = models.PostRevision.objects.answer_revisions().get( - post = answer, - revision = rev - ) - form = forms.EditAnswerForm(answer, selected_revision) + revision = answer.revisions.get(revision = rev) + form = forms.EditAnswerForm(answer, revision) else: form = forms.EditAnswerForm( answer, - latest_revision, + revision, request.POST ) else: - form = forms.EditAnswerForm(answer, latest_revision, request.POST) - revision_form = forms.RevisionForm(answer, latest_revision) + form = forms.EditAnswerForm(answer, revision, request.POST) + revision_form = forms.RevisionForm(answer, revision) if form.is_valid(): if form.has_changed(): @@ -473,14 +467,15 @@ def edit_answer(request, id): ) return HttpResponseRedirect(answer.get_absolute_url()) else: - revision_form = forms.RevisionForm(answer, latest_revision) - form = forms.EditAnswerForm(answer, latest_revision) + revision_form = forms.RevisionForm(answer, revision) + form = forms.EditAnswerForm(answer, revision) if request.user.can_make_group_private_posts(): form.initial['post_privately'] = answer.is_private() data = { 'page_class': 'edit-answer-page', 'active_tab': 'questions', 'answer': answer, + 'revision': revision, 'revision_form': revision_form, 'form': form, } -- cgit v1.2.3-1-g7c22