homepage markdown preview

This commit is contained in:
Élie Bouttier 2017-11-25 23:19:24 +01:00
parent 476dd3fbd4
commit 825a0111b4
7 changed files with 94 additions and 9 deletions

View File

@ -259,7 +259,7 @@ class ConferenceForm(forms.ModelForm):
class Meta:
model = Conference
fields = [
'name', 'home', 'venue', 'city', 'contact_email', 'schedule_publishing_date', 'schedule_redirection_url',
'name', 'venue', 'city', 'contact_email', 'schedule_publishing_date', 'schedule_redirection_url',
'volunteers_opening_date', 'volunteers_closing_date', 'reply_email', 'secure_domain', 'staff',
]
widgets = {
@ -270,6 +270,12 @@ class ConferenceForm(forms.ModelForm):
}
class HomepageForm(forms.ModelForm):
class Meta:
model = Conference
fields = ['home']
class CreateUserForm(forms.ModelForm):
class Meta:
model = User

View File

@ -7,7 +7,8 @@
{{ block.super }}
<div class="container">
<ul class="nav nav-pills nav-justified subnav">
<li{% block conferencetab %}{% endblock %}><a href="{% url 'conference' %}"><span class="glyphicon glyphicon-cog"></span>&nbsp;{% trans "Conference" %}</a></li>
<li{% block conferencetab %}{% endblock %}><a href="{% url 'conference-edit' %}"><span class="glyphicon glyphicon-cog"></span>&nbsp;{% trans "Conference" %}</a></li>
<li{% block homepagetab %}{% endblock %}><a href="{% url 'homepage-edit' %}"><span class="glyphicon glyphicon-cog"></span>&nbsp;{% trans "Home page" %}</a></li>
<li{% block categoriestab %}{% endblock %}><a href="{% url 'category-list' %}"><span class="glyphicon glyphicon-inbox"></span>&nbsp;{% trans "Categories" %}</a></li>
<li{% block tagstab %}{% endblock %}><a href="{% url 'tag-list' %}"><span class="glyphicon glyphicon-tags"></span>&nbsp;{% trans "Tags" %}</a></li>
<li{% block activitiestab %}{% endblock %}><a href="{% url 'activity-list' %}"><span class="glyphicon glyphicon-screenshot"></span>&nbsp;{% trans "Activities" %}</a></li>

View File

@ -0,0 +1,54 @@
{% extends 'cfp/admin/base.html' %}
{% load bootstrap3 i18n static %}
{% block homepagetab %} class="active"{% endblock %}
{% block content %}
<h1>{% trans "Home page" %}</h1>
<!--<div class="panel panel-default">
<div class="panel-heading">
<b>Truc</b>
</div>
<div class=-->
<div>
<ul class="nav nav-tabs" role="tablist">
<li role="presentation" class="active"><a href="#editor" aria-controls="editor" role="tab" data-toggle="tab">{% trans "Editor" %}</a></li>
<li role="presentation"><a href="#preview" aria-controls="preview" role="tab" data-toggle="tab">{% trans "Preview" %}</a></li>
<li><a href="https://daringfireball.net/projects/markdown/syntax" target="blank" role="tab">{% trans "Syntax" %}</a></li>
</ul>
</div>
<form method="POST">
{% csrf_token %}
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" style="padding-bottom: 20px;" id="editor">
<textarea style="width: 100%; min-height: 220px;" id="markdown-content" name="home">{{ form.home.value|default_if_none:"" }}</textarea>
</div>
<div role="tabpanel" class="tab-pane" id="preview">
<div style="width: 100%; min-height: 220px;" class="well" id="markdown-preview"></div>
</div>
</div>
{% buttons %}
<button type="submit" class="btn btn-primary">{% trans "Save" %}</button>
{% endbuttons %}
</form>
{% endblock %}
{% block js_end %}
{{ block.super }}
{{ form.media.js }}
<script type="text/javascript">
var markdown_preview_url = "{% url 'markdown-preview' %}";
</script>
<script src="{% static 'jquery.cookie/jquery.cookie.js' %}"></script>
<script src="{% static 'js/markdown-preview.js' %}"></script>
{% endblock %}
{% block css %}
{{ block.super }}
{{ form.media.css }}
{% endblock %}

View File

@ -55,7 +55,8 @@ urlpatterns = [
url(r'^staff/schedule/((?P<program_format>[\w]+)/)?$', views.staff_schedule, name='staff-schedule'),
url(r'^staff/select2/$', views.Select2View.as_view(), name='django_select2-json'),
url(r'^admin/$', views.admin, name='admin'),
url(r'^admin/conference/$', views.conference_edit, name='conference'),
url(r'^admin/conference/$', views.conference_edit, name='conference-edit'),
url(r'^admin/homepage/$', views.homepage_edit, name='homepage-edit'),
url(r'^admin/categories/$', views.TalkCategoryList.as_view(), name='category-list'),
url(r'^admin/categories/add/$', views.TalkCategoryCreate.as_view(), name='category-add'),
url(r'^admin/categories/(?P<pk>[0-9]+)/edit/$', views.TalkCategoryUpdate.as_view(), name='category-edit'),
@ -66,5 +67,4 @@ urlpatterns = [
url(r'^admin/activities/add/$', views.ActivityCreate.as_view(), name='activity-add'),
url(r'^admin/activities/(?P<slug>[-\w]+)/edit/$', views.ActivityUpdate.as_view(), name='activity-edit'),
url(r'^schedule/((?P<program_format>[\w]+)/)?$', views.public_schedule, name='public-schedule'),
#url(r'^markdown/$', views.markdown_preview, name='markdown'),
]

View File

@ -1,4 +1,3 @@
from math import ceil
from django.core.mail import send_mail
from django.core.urlresolvers import reverse_lazy
from django.shortcuts import get_object_or_404, redirect, render
@ -29,7 +28,7 @@ from .utils import is_staff
from .models import Participant, Talk, TalkCategory, Vote, Track, Tag, Room, Volunteer, Activity
from .forms import TalkForm, TalkStaffForm, TalkFilterForm, TalkActionForm, \
ParticipantForm, ParticipantFilterForm, NotifyForm, \
ConferenceForm, CreateUserForm, TrackForm, RoomForm, \
ConferenceForm, HomepageForm, CreateUserForm, TrackForm, RoomForm, \
VolunteerForm, VolunteerFilterForm, MailForm, \
TagForm, TalkCategoryForm, ActivityForm, \
ACCEPTATION_VALUES, CONFIRMATION_VALUES
@ -832,7 +831,6 @@ def participant_add_talk(request, participant_id):
@staff_required
def conference_edit(request):
form = ConferenceForm(request.POST or None, instance=request.conference)
if request.method == 'POST' and form.is_valid():
old_staff = set(request.conference.staff.all())
new_conference = form.save()
@ -865,13 +863,24 @@ You can now:
fail_silently=False,
)
messages.success(request, _('Modifications successfully saved.'))
return redirect(reverse('conference'))
return redirect(reverse('conference-edit'))
return render(request, 'cfp/admin/conference.html', {
'form': form,
})
@staff_required
def homepage_edit(request):
form = HomepageForm(request.POST or None, instance=request.conference)
if request.method == 'POST' and form.is_valid():
form.save()
messages.success(request, _('Modifications successfully saved.'))
return redirect(reverse('homepage-edit'))
return render(request, 'cfp/admin/homepage.html', {
'form': form,
})
class TalkUpdate(StaffRequiredMixin, OnSiteMixin, OnSiteFormMixin, UpdateView):
model = Talk
form_class = TalkStaffForm

View File

@ -17,8 +17,11 @@ from django.conf.urls import include, url
from django.contrib import admin
from django.conf import settings
from . import views
urlpatterns = [
url(r'^markdown/$', views.markdown_preview, name='markdown-preview'),
url(r'^admin/django/', admin.site.urls),
url(r'^accounts/', include('accounts.urls')),
url(r'^', include('cfp.urls')),

12
ponyconf/views.py Normal file
View File

@ -0,0 +1,12 @@
from django.contrib.auth.decorators import login_required
from django.views.decorators.http import require_http_methods
from django.http import HttpResponse
from .utils import markdown_to_html
@login_required
@require_http_methods(["POST"])
def markdown_preview(request):
content = request.POST.get('data', '')
return HttpResponse(markdown_to_html(content))