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, }
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})
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 })
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