示例#1
0
def waliki_box(context, slug, show_edit=True, *args, **kwargs):
    """
    A templatetag to render a wiki page content as a box in any webpage,
    and allow rapid edition if you have permission.

    It's inspired in `django-boxes`_

    .. _django-boxes: https://github.com/eldarion/django-boxes
    """

    request = context["request"]
    try:
        page = Page.objects.get(slug=slug)
    except Page.DoesNotExist:
        page = None

    if (page and check_perms_helper('change_page', request.user, slug) or
        (not page and check_perms_helper('add_page', request.user, slug))):
        form = PageForm(instance=page, initial={'slug': slug})
        form_action = reverse("waliki_edit", args=[slug])
    else:
        form = None
        form_action = None

    return {
        "request": request,
        "slug": slug,
        "label": slug.replace('/', '_'),
        "page": page,
        "form": form,
        "form_action": form_action,
    }
示例#2
0
文件: views.py 项目: felsen/waliki
def version(request, slug, version, raw=False):
    page = get_object_or_404(Page, slug=slug)
    content = Git().version(page, version)
    if not content:
        raise Http404
    form = PageForm(instance=page, initial={'message': _('Restored version @%s') % version, 'raw': content},
                    is_hidden=True)

    if raw:
        return HttpResponse(content, content_type='text/plain; charset=utf-8')

    content = Page.preview(page.markup, content)
    return render(request, 'waliki/version.html', {'page': page,
                                                   'content': content,
                                                   'slug': slug,
                                                   'version': version,
                                                   'form': form})
示例#3
0
文件: views.py 项目: leliel12/waliki
def version(request, slug, version):
    page = get_object_or_404(Page, slug=slug)
    content = Git().version(page, version)
    if not content:
        raise Http404
    form = PageForm(instance=page,
                    initial={
                        'message': 'Restored version @%s' % version,
                        'raw': content
                    },
                    is_hidden=True)
    content = Page.preview(page.markup, content)
    return render(
        request, 'waliki/version.html', {
            'page': page,
            'content': content,
            'slug': slug,
            'version': version,
            'form': form
        })
示例#4
0
def create_waliki_page(request, slug):
    slug = slug.strip('/')
    just_created = False
    try:
        page = Page.objects.get(slug=slug)
    except Page.DoesNotExist:
        page = Page.objects.create(markup=request.POST['markup'], slug=slug)
        page.raw = ""
        page_saved.send(sender=edit,
                        page=page,
                        author=request.user,
                        message=_("Page created"),
                        form_extra_data={})
        just_created = True

    original_markup = page.markup
    data = request.POST
    form_extra_data = {}
    receivers_responses = page_preedit.send(sender=edit, page=page)
    for r in receivers_responses:
        if isinstance(r[1], dict) and 'form_extra_data' in r[1]:
            form_extra_data.update(r[1]['form_extra_data'])

    form = PageForm(data, instance=page,
                    initial={'extra_data': json.dumps(form_extra_data)})
    if form.is_valid():
        page = form.save(commit=False)
        if page.markup != original_markup:
            old_path = page.path
            page.update_extension()
            msg = _("The markup was changed from {original} to {new}").format(
                original=original_markup, new=page.markup)
            page_moved.send(sender=edit,
                            page=page,
                            old_path=old_path,
                            author=request.user,
                            message=msg,
                            commit=False
                            )
            was_moved = True
        else:
            was_moved = False
        page.raw = form.cleaned_data['raw']
        page.save()
        try:
            receivers_responses = page_saved.send(sender=edit,
                                                  page=page,
                                                  author=request.user,
                                                  message=form.cleaned_data[
                                                      "message"],
                                                  form_extra_data=json.loads(
                                                      form.cleaned_data[
                                                          "extra_data"] or "{}"
                                                  ),
                                                  was_moved=was_moved)
        except Page.EditionConflict as e:
            messages.warning(request, e)
            return None

        for r in receivers_responses:
            if isinstance(r[1], dict) and 'messages' in r[1]:
                for key, value in r[1]['messages'].items():
                    getattr(messages, key)(request, value)

    cm_modes = [(m.name, m.codemirror_mode_name) for m in get_all_markups()]

    cm_settings = settings.WALIKI_CODEMIRROR_SETTINGS
    cm_settings.update({'mode': dict(cm_modes)[page.markup]})
    return None