def edit(request, name): site = Site.objects.get_current() if request.method == 'POST': if request.POST.get('button_cancel'): return HttpResponseRedirect(reverse(view, args=[name])) revision = None form = EditForm(request.POST) if form.is_valid(): data = form.cleaned_data if request.POST.get('button_preview'): preview = rst.render_html(data['text'], cache_max_age=WIKI_CACHE_AGE) try: prev_text = WikiPage.on_site.get(name=name).text if not isinstance(prev_text, unicode): prev_text = prev_text.decode('utf-8') except WikiPage.DoesNotExist: prev_text = "" diff_html = html_diff_text(prev_text, data['text'], 'previous revision', 'current text') return render_template( request, 'wiki/edit.html', dict(form=form, name=name, revision=revision, diff_html=diff_html, preview_html=preview)) else: page, created = WikiPage.on_site.get_or_create(name=name, site=site) page.edit(data['text'], request.user.username, data['comment']) return HttpResponseRedirect(reverse(view, args=[name])) else: try: revision = request.GET.get('revision') page = WikiPage.on_site.get(name=name) try: revision = int(revision) rev = page.revisions.get(revno=revision) comment = "Reverted" except (TypeError, ValueError, WikiPageRevision.DoesNotExist): rev = page.revisions.all()[0] comment = "" data = dict(text=rev.text, comment=comment) except (WikiPage.DoesNotExist, IndexError): data = {} revision = None form = EditForm(initial=data) return render_template(request, 'wiki/edit.html', dict(form=form, name=name, revision=revision))
def view(request, name): try: page = WikiPage.on_site.get(name=name) revision = request.GET.get('revision') try: revision = int(revision) rev = page.revisions.get(revno=revision) except (TypeError, ValueError, WikiPageRevision.DoesNotExist): rev = page if not rev.text and revision is None: raise WikiPage.DoesNotExist() body = rst.render_html(rev.text, cache_max_age=WIKI_CACHE_AGE) if body is None: raise WikiPage.DoesNotExist() return render_template(request, 'wiki/page.html', dict(name=name, body_html=body, revision=revision)) except WikiPage.DoesNotExist: return render_template(request, 'wiki/not_found.html', dict(name=name))
def edit(request, name, comment_id): doc = get_object_or_404(Docstring, name=name) try: comment_id = int(comment_id) if request.user.has_perm('docweb.can_review'): comment = doc.comments.get(id=comment_id) else: comment = doc.comments.get(id=comment_id, author=request.user.username) except (ValueError, TypeError, ReviewComment.DoesNotExist): comment_id = 'new' comment = None if request.method == 'POST': if request.POST.get('button_cancel'): return HttpResponseRedirect(reverse('pydocweb.docweb.views_docstring.view', args=[name]) + "#discussion-sec") form = CommentEditForm(request.POST) if form.is_valid(): data = form.cleaned_data if request.POST.get('button_preview'): preview = rst.render_html(data['text']) return render_template(request, 'docstring/edit_comment.html', dict(form=form, name=name, comment=comment, comment_id=comment_id, preview_html=preview)) elif request.POST.get('button_delete') and comment is not None: comment.delete() return HttpResponseRedirect(reverse('pydocweb.docweb.views_docstring.view', args=[name]) + "#discussion-sec") elif request.POST.get('button_resolved') and comment is not None: comment.resolved = True comment.save() return HttpResponseRedirect(reverse('pydocweb.docweb.views_docstring.view', args=[name]) + "#discussion-sec") elif request.POST.get('button_not_resolved') and comment is not None: comment.resolved = False comment.save() return HttpResponseRedirect(reverse('pydocweb.docweb.views_docstring.view', args=[name]) + "#discussion-sec") else: if comment is None: comment = ReviewComment(docstring=doc) try: comment.rev = doc.revisions.all()[0] except IndexError: comment.rev = None comment.author = request.user.username comment.text = strip_spurious_whitespace(data['text']) comment.timestamp = datetime.datetime.now() comment.save() return HttpResponseRedirect(reverse('pydocweb.docweb.views_docstring.view', args=[name]) + "#discussion-sec") else: if comment: data = dict(text=comment.text) else: data = {} form = CommentEditForm(initial=data) return render_template(request, 'docstring/edit_comment.html', dict(form=form, name=name, comment=comment, comment_id=comment_id))
def view(request, name): try: doc = Docstring.resolve(name) if doc.name != name: # resolve non-canonical names return HttpResponseRedirect(reverse(view, args=[doc.name])) except Docstring.DoesNotExist: raise Http404() # display the entry try: text, revision = doc.get_rev_text(request.GET.get('revision')) if not request.GET.get('revision'): revision = None body = rst.render_docstring_html(doc, text) except DocstringRevision.DoesNotExist: raise Http404() author_map = get_author_map() comments = [] for comment in doc.comments.all(): comments.append(dict( id=comment.id, resolved=comment.resolved, author=author_map.get(comment.author, comment.author), author_username=comment.author, timestamp=comment.timestamp, html=rst.render_html(comment.text), text=comment.text, )) review_form = ReviewForm(dict(status=doc.review)) params = dict(name=name, doc=doc, review_form=review_form, status=REVIEW_STATUS_NAMES[doc.review], status_code=REVIEW_STATUS_CODES[doc.review], comments=comments, body_html=body, file_name=strip_module_dir_prefix(doc.file_name), line_number=doc.line_number, revision=revision, toctree_chain=ToctreeCache.get_chain(doc)[:-1], ) if doc.type_code == 'dir': if request.method == "POST": params['new_page_form'] = NewPageForm(request.POST) else: params['new_page_form'] = NewPageForm() return render_template(request, 'docstring/page_dir.html', params) if revision is None and doc.merge_status == MERGE_CONFLICT: conflict = doc.get_merge() params['merge_type'] = 'conflict' params['merge_html'] = cgi.escape(conflict) return render_template(request, 'docstring/merge.html', params) elif revision is None and doc.merge_status == MERGE_MERGE: merged = doc.get_merge() merge_html = html_diff_text(doc.revisions.all()[0].text, merged) params['merge_html'] = merge_html return render_template(request, 'docstring/merge.html', params) else: return render_template(request, 'docstring/page.html', params)
def help_page(page_name): html = rst.render_html(WikiPage.fetch_text(page_name)) html += "<p><a href=\"%s\">Edit help</a></p>" % reverse('pydocweb.docweb.views_wiki.view', args=[page_name]) return html