add login to editor

This commit is contained in:
Laura Klünder 2017-06-18 20:43:20 +02:00
parent 0f3fea804a
commit b014da6a9b
9 changed files with 85 additions and 30 deletions

View file

@ -115,7 +115,7 @@ legend {
right: 8px;
top: 8px;
}
[data-levels], [data-sublevels], [data-changeset] {
[data-levels], [data-sublevels], #sidebar .nav, [data-back-to-map] {
display:none;
}
form button.invisiblesubmit {
@ -218,19 +218,6 @@ form button.invisiblesubmit {
left:-100vw;
}
.navbar-collapse.collapse {
display: block;
}
.navbar-nav>li, .navbar-header {
float: left;
}
.navbar-nav.navbar-right:last-child {
margin-right: -15px;
}
.navbar-right {
float: right;
}
#show_details {
display:none;
}

View file

@ -89,7 +89,7 @@ editor = {
$('#sidebar').find('.content').on('click', 'a[href]', editor._sidebar_link_click)
.on('click', 'button[type=submit]', editor._sidebar_submit_btn_click)
.on('submit', 'form', editor._sidebar_submit);
$('.changeset a').click(editor._sidebar_link_click);
$('nav.navbar').on('click', 'a[href]', editor._sidebar_link_click);
var location_path = editor.get_location_path();
editor._sidebar_loaded();
history.replaceState({}, '', location_path);
@ -143,9 +143,9 @@ editor = {
return;
}
var changeset = content.find('a[data-changeset]');
if (changeset.length) {
$('.changeset a').text(changeset.text()).attr('href', changeset.attr('href'));
var nav = content.find('.nav');
if (nav.length) {
$('#navbar-collapse').find('.nav').html(nav.html());
}
content.find('[data-toggle="tooltip"]').tooltip();
@ -179,7 +179,7 @@ editor = {
});
} else if (content.find('[data-keep-geometry]').length) {
if (editor._last_map_path === null) $('[data-back-to-map]').remove()
$('a[data-back-to-map]').attr('href', editor._last_map_path);
$('a[data-back-to-map]').attr('href', editor._last_map_path).show();
$('body').removeClass('show-map');
editor._level_control.hide();
editor._sublevel_control.hide();

View file

@ -19,10 +19,18 @@
<nav class="navbar navbar-static-top navbar-default">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-collapse" aria-expanded="false">
<span class="sr-only">{% trans 'Toggle navigation' %}</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="{% url 'editor.index' %}">{% trans 'c3nav map editor' %}</a>
</div>
{% block addnav %}
{% endblock %}
<div class="collapse navbar-collapse" id="navbar-collapse">
{% block addnav %}
{% endblock %}
</div>
</div>
</nav>

View file

@ -4,7 +4,7 @@
{% include 'editor/fragment_levels.html' %}
<form method="post" data-keep-geometry>
<form method="post" action="{{ request.path }}" data-keep-geometry>
{% csrf_token %}
<h3>{{ changeset.title }}</h3>
@ -40,6 +40,10 @@
{% endfor %}
{% buttons %}
<button type="submit" class="btn btn-danger btn-sm" name="delete" value="1">{% trans 'Delete' %}</button>
<button type="submit" class="btn btn-danger" name="delete" value="1">{% trans 'Delete' %}</button>
<div class="pull-right">
<a type="submit" class="btn btn-default">{% trans 'Edit' %}</a>
<a type="submit" class="btn btn-primary">{% trans 'Login' %}</a>
</div>
{% endbuttons %}
</form>

View file

@ -0,0 +1,17 @@
{% load i18n %}
<ul class="nav navbar-nav navbar-right">
<li><a href="{{ request.changeset.get_absolute_url }}">{{ request.changeset.count_display }}</a></li>
{% if request.user.is_authenticated %}
<li class="logged_in_user">
<a>{{ request.user.username }}</a>
</li>
{% endif %}
<li class="login_logout">
{% if request.user.is_authenticated %}
<a href="{% url 'editor.logout' %}?redirect={{ request.path }}">{% trans 'Log out' %}</a>
{% else %}
<a href="{% url 'editor.login' %}?redirect={{ request.path }}">{% trans 'Log in' %}</a>
{% endif %}
</li>
</ul>

View file

@ -0,0 +1,14 @@
{% load bootstrap3 %}
{% load i18n %}
<h3>{% trans 'Log in' %}</h3>
<p><a data-back-to-map>« {% trans 'back to map' %}</a></p>
<form method="post" action="{{ request.path_info }}?{{ request.GET.urlencode }}" data-keep-geometry>
{% csrf_token %}
{% bootstrap_form form %}
<div class="form-group">
<button type="submit" class="btn btn-primary btn-block">{% trans 'Log in' %}</button>
</div>
</form>

View file

@ -6,9 +6,7 @@
<noscript>
<div id="noscript">{% trans 'Without Javascript' %}</div>
</noscript>
<ul class="nav navbar-nav navbar-right">
<li class="changeset"><a href="{{ request.changeset.get_absolute_url }}">{{ request.changeset.count_display }}</a></li>
</ul>
{% include 'editor/fragment_nav.html' %}
{% endblock %}
{% block subheader %}

View file

@ -1,7 +1,8 @@
from django.apps import apps
from django.conf.urls import url
from c3nav.editor.views import changeset_detail, edit, level_detail, list_objects, main_index, space_detail
from c3nav.editor.views import (changeset_detail, edit, level_detail, list_objects, login_view, logout_view, main_index,
space_detail)
def add_editor_urls(model_name, parent_model_name=None, with_list=True, explicit_edit=False):
@ -35,6 +36,8 @@ urlpatterns = [
url(r'^levels/(?P<on_top_of>c?[0-9]+)/levels_on_top/create$', edit, name='editor.levels_on_top.create',
kwargs={'model': 'Level'}),
url(r'^changesets/(?P<pk>[0-9]+)/$', changeset_detail, name='editor.changesets.detail'),
url(r'^login$', login_view, name='editor.login'),
url(r'^logout$', logout_view, name='editor.logout'),
]
urlpatterns.extend(add_editor_urls('Level', with_list=False, explicit_edit=True))
urlpatterns.extend(add_editor_urls('LocationGroup'))

View file

@ -3,12 +3,13 @@ from contextlib import suppress
from functools import wraps
from django.conf import settings
from django.contrib.auth import login, logout
from django.contrib.auth.forms import AuthenticationForm
from django.core.exceptions import FieldDoesNotExist, PermissionDenied
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404, redirect, render
from django.urls import reverse
from django.utils.formats import date_format
from django.utils.html import escape
from django.utils.translation import ugettext_lazy as _
from django.views.decorators.cache import never_cache
@ -27,8 +28,7 @@ def sidebar_view(func):
if request.is_ajax() or 'ajax' in request.GET:
if isinstance(response, HttpResponseRedirect):
return render(request, 'editor/redirect.html', {'target': response['location']})
response.write('<a data-changeset href="%s">%s</a>' % (request.changeset.get_absolute_url(),
escape(request.changeset.count_display)))
response.write(render(request, 'editor/fragment_nav.html', {}).content)
return response
if isinstance(response, HttpResponseRedirect):
return response
@ -481,3 +481,27 @@ def changeset_detail(request, pk):
return render(request, 'editor/delete.html', ctx)
return render(request, 'editor/changeset.html', ctx)
@sidebar_view
def login_view(request):
if request.method == 'POST':
form = AuthenticationForm(request, data=request.POST)
if form.is_valid():
login(request, form.user_cache)
print(request.GET.get('redirect', ''))
if request.GET.get('redirect', '').startswith('/editor/'):
return redirect(request.GET.get('redirect', ''))
return redirect(reverse('editor.index'))
else:
form = AuthenticationForm(request)
return render(request, 'editor/login.html', {'form': form})
@sidebar_view
def logout_view(request):
logout(request)
if request.GET.get('redirect', '').startswith('/editor/'):
return redirect(request.GET.get('redirect', ''))
return redirect(reverse('editor.login'))