From b014da6a9b4653350d009bbe5fb5484bf6c2a3f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sun, 18 Jun 2017 20:43:20 +0200 Subject: [PATCH] add login to editor --- src/c3nav/editor/static/editor/css/editor.css | 15 +--------- src/c3nav/editor/static/editor/js/editor.js | 10 +++---- src/c3nav/editor/templates/editor/base.html | 12 ++++++-- .../editor/templates/editor/changeset.html | 8 +++-- .../editor/templates/editor/fragment_nav.html | 17 +++++++++++ src/c3nav/editor/templates/editor/login.html | 14 +++++++++ src/c3nav/editor/templates/editor/map.html | 4 +-- src/c3nav/editor/urls.py | 5 +++- src/c3nav/editor/views.py | 30 +++++++++++++++++-- 9 files changed, 85 insertions(+), 30 deletions(-) create mode 100644 src/c3nav/editor/templates/editor/fragment_nav.html create mode 100644 src/c3nav/editor/templates/editor/login.html diff --git a/src/c3nav/editor/static/editor/css/editor.css b/src/c3nav/editor/static/editor/css/editor.css index 076235eb..cc1da825 100644 --- a/src/c3nav/editor/static/editor/css/editor.css +++ b/src/c3nav/editor/static/editor/css/editor.css @@ -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; } diff --git a/src/c3nav/editor/static/editor/js/editor.js b/src/c3nav/editor/static/editor/js/editor.js index cd70c888..39bd4d78 100644 --- a/src/c3nav/editor/static/editor/js/editor.js +++ b/src/c3nav/editor/static/editor/js/editor.js @@ -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(); diff --git a/src/c3nav/editor/templates/editor/base.html b/src/c3nav/editor/templates/editor/base.html index d0a0e078..43d1c560 100644 --- a/src/c3nav/editor/templates/editor/base.html +++ b/src/c3nav/editor/templates/editor/base.html @@ -19,10 +19,18 @@ diff --git a/src/c3nav/editor/templates/editor/changeset.html b/src/c3nav/editor/templates/editor/changeset.html index 93373b2f..31b3c3c1 100644 --- a/src/c3nav/editor/templates/editor/changeset.html +++ b/src/c3nav/editor/templates/editor/changeset.html @@ -4,7 +4,7 @@ {% include 'editor/fragment_levels.html' %} -
+ {% csrf_token %}

{{ changeset.title }}

@@ -40,6 +40,10 @@ {% endfor %} {% buttons %} - + + {% endbuttons %}
diff --git a/src/c3nav/editor/templates/editor/fragment_nav.html b/src/c3nav/editor/templates/editor/fragment_nav.html new file mode 100644 index 00000000..3ca4157c --- /dev/null +++ b/src/c3nav/editor/templates/editor/fragment_nav.html @@ -0,0 +1,17 @@ +{% load i18n %} + + diff --git a/src/c3nav/editor/templates/editor/login.html b/src/c3nav/editor/templates/editor/login.html new file mode 100644 index 00000000..5bd938d7 --- /dev/null +++ b/src/c3nav/editor/templates/editor/login.html @@ -0,0 +1,14 @@ +{% load bootstrap3 %} +{% load i18n %} + +

{% trans 'Log in' %}

+ +

« {% trans 'back to map' %}

+ +
+ {% csrf_token %} + {% bootstrap_form form %} +
+ +
+
diff --git a/src/c3nav/editor/templates/editor/map.html b/src/c3nav/editor/templates/editor/map.html index e6186da3..dc714745 100644 --- a/src/c3nav/editor/templates/editor/map.html +++ b/src/c3nav/editor/templates/editor/map.html @@ -6,9 +6,7 @@ - +{% include 'editor/fragment_nav.html' %} {% endblock %} {% block subheader %} diff --git a/src/c3nav/editor/urls.py b/src/c3nav/editor/urls.py index 6a6bc06e..e81640c1 100644 --- a/src/c3nav/editor/urls.py +++ b/src/c3nav/editor/urls.py @@ -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/(?Pc?[0-9]+)/levels_on_top/create$', edit, name='editor.levels_on_top.create', kwargs={'model': 'Level'}), url(r'^changesets/(?P[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')) diff --git a/src/c3nav/editor/views.py b/src/c3nav/editor/views.py index 74c2c252..9428c65e 100644 --- a/src/c3nav/editor/views.py +++ b/src/c3nav/editor/views.py @@ -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('%s' % (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'))