add login to editor
This commit is contained in:
parent
0f3fea804a
commit
b014da6a9b
9 changed files with 85 additions and 30 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
17
src/c3nav/editor/templates/editor/fragment_nav.html
Normal file
17
src/c3nav/editor/templates/editor/fragment_nav.html
Normal 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>
|
14
src/c3nav/editor/templates/editor/login.html
Normal file
14
src/c3nav/editor/templates/editor/login.html
Normal 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>
|
|
@ -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 %}
|
||||
|
|
|
@ -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'))
|
||||
|
|
|
@ -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'))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue