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: class Meta:
model = Conference model = Conference
fields = [ 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', 'volunteers_opening_date', 'volunteers_closing_date', 'reply_email', 'secure_domain', 'staff',
] ]
widgets = { widgets = {
@ -270,6 +270,12 @@ class ConferenceForm(forms.ModelForm):
} }
class HomepageForm(forms.ModelForm):
class Meta:
model = Conference
fields = ['home']
class CreateUserForm(forms.ModelForm): class CreateUserForm(forms.ModelForm):
class Meta: class Meta:
model = User model = User

View File

@ -7,7 +7,8 @@
{{ block.super }} {{ block.super }}
<div class="container"> <div class="container">
<ul class="nav nav-pills nav-justified subnav"> <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 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 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> <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/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'^staff/select2/$', views.Select2View.as_view(), name='django_select2-json'),
url(r'^admin/$', views.admin, name='admin'), 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/$', views.TalkCategoryList.as_view(), name='category-list'),
url(r'^admin/categories/add/$', views.TalkCategoryCreate.as_view(), name='category-add'), 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'), 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/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'^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'^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.mail import send_mail
from django.core.urlresolvers import reverse_lazy from django.core.urlresolvers import reverse_lazy
from django.shortcuts import get_object_or_404, redirect, render 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 .models import Participant, Talk, TalkCategory, Vote, Track, Tag, Room, Volunteer, Activity
from .forms import TalkForm, TalkStaffForm, TalkFilterForm, TalkActionForm, \ from .forms import TalkForm, TalkStaffForm, TalkFilterForm, TalkActionForm, \
ParticipantForm, ParticipantFilterForm, NotifyForm, \ ParticipantForm, ParticipantFilterForm, NotifyForm, \
ConferenceForm, CreateUserForm, TrackForm, RoomForm, \ ConferenceForm, HomepageForm, CreateUserForm, TrackForm, RoomForm, \
VolunteerForm, VolunteerFilterForm, MailForm, \ VolunteerForm, VolunteerFilterForm, MailForm, \
TagForm, TalkCategoryForm, ActivityForm, \ TagForm, TalkCategoryForm, ActivityForm, \
ACCEPTATION_VALUES, CONFIRMATION_VALUES ACCEPTATION_VALUES, CONFIRMATION_VALUES
@ -832,7 +831,6 @@ def participant_add_talk(request, participant_id):
@staff_required @staff_required
def conference_edit(request): def conference_edit(request):
form = ConferenceForm(request.POST or None, instance=request.conference) form = ConferenceForm(request.POST or None, instance=request.conference)
if request.method == 'POST' and form.is_valid(): if request.method == 'POST' and form.is_valid():
old_staff = set(request.conference.staff.all()) old_staff = set(request.conference.staff.all())
new_conference = form.save() new_conference = form.save()
@ -865,13 +863,24 @@ You can now:
fail_silently=False, fail_silently=False,
) )
messages.success(request, _('Modifications successfully saved.')) messages.success(request, _('Modifications successfully saved.'))
return redirect(reverse('conference')) return redirect(reverse('conference-edit'))
return render(request, 'cfp/admin/conference.html', { return render(request, 'cfp/admin/conference.html', {
'form': form, '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): class TalkUpdate(StaffRequiredMixin, OnSiteMixin, OnSiteFormMixin, UpdateView):
model = Talk model = Talk
form_class = TalkStaffForm form_class = TalkStaffForm

View File

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