diff --git a/src/c3nav/control/static/control/control.css b/src/c3nav/control/static/control/control.css new file mode 100644 index 00000000..2f7fd449 --- /dev/null +++ b/src/c3nav/control/static/control/control.css @@ -0,0 +1,7 @@ +#mapeditor { + position:absolute; + top:54px; + bottom:0; + left:0; + right:0; +} diff --git a/src/c3nav/control/templates/control/base.html b/src/c3nav/control/templates/control/base.html index 98ef8bbb..f46ae0e9 100644 --- a/src/c3nav/control/templates/control/base.html +++ b/src/c3nav/control/templates/control/base.html @@ -6,52 +6,52 @@ - Dashboard Template for Bootstrap + c3nav Administration {% compress css %} + + {% endcompress %}
-
-
- -
-
-

Dashboard

-
-
+ {% block content %} + {% endblock %}
{% compress js %} + + {% endcompress %} + {% block addbottom %} + {% endblock %} diff --git a/src/c3nav/control/templates/control/dashboard.html b/src/c3nav/control/templates/control/dashboard.html new file mode 100644 index 00000000..386a7d25 --- /dev/null +++ b/src/c3nav/control/templates/control/dashboard.html @@ -0,0 +1,4 @@ +{% extends 'control/base.html' %} +{% block content %} +

Dashboard

+{% endblock %} diff --git a/src/c3nav/control/templates/control/editor.html b/src/c3nav/control/templates/control/editor.html new file mode 100644 index 00000000..d59beae6 --- /dev/null +++ b/src/c3nav/control/templates/control/editor.html @@ -0,0 +1,25 @@ +{% extends 'control/base.html' %} +{% block content %} +

Editor

+
+{% endblock %} + +{% block addbottom %} + +{% endblock %} diff --git a/src/c3nav/control/urls.py b/src/c3nav/control/urls.py index a3780aa2..ad9c0594 100644 --- a/src/c3nav/control/urls.py +++ b/src/c3nav/control/urls.py @@ -3,5 +3,6 @@ from django.conf.urls import url from . import views urlpatterns = [ - url(r'^$', views.index, name='index'), + url(r'^$', views.dashboard, name='control.dashboard'), + url(r'^editor/(?P[^/]+)?$', views.editor, name='control.editor'), ] diff --git a/src/c3nav/control/views.py b/src/c3nav/control/views.py index 3ec7ae2e..0de4e672 100644 --- a/src/c3nav/control/views.py +++ b/src/c3nav/control/views.py @@ -1,7 +1,21 @@ -from django.shortcuts import render +from django.contrib.admin.views.decorators import staff_member_required +from django.http import Http404 +from django.shortcuts import redirect, render + +from ..mapdata import mapmanager -def index(request): - return render(request, 'control/base.html') +@staff_member_required +def dashboard(request): + return render(request, 'control/dashboard.html') -# Create your views here. + +@staff_member_required +def editor(request, level=None): + if not level: + return redirect('control.editor', level=mapmanager.levels[0]) + if level not in mapmanager.levels: + raise Http404('Level does not exist') + return render(request, 'control/editor.html', { + 'map': mapmanager + }) diff --git a/src/c3nav/mapdata/classes.py b/src/c3nav/mapdata/classes.py index c731c277..1d27841d 100644 --- a/src/c3nav/mapdata/classes.py +++ b/src/c3nav/mapdata/classes.py @@ -12,6 +12,7 @@ class MapManager: self.main_pkg = None self.pkgs = OrderedDict() self.levels = [] + self.sources_by_filename = OrderedDict() def add_map_dir(self, path): pkg = MapDataPackage(path) @@ -24,17 +25,17 @@ class MapManager: 'but '+self.main_pkg.name+' was there first.') self.main_pkg = pkg self.levels = pkg.levels - self.size = pkg.size + self.width = pkg.width + self.height = pkg.height else: if pkg.extends not in self.pkgs: raise MapInitError('map package'+pkg.name+' extends '+pkg.exends+', which was not imported ' 'beforehand.') - self.pkgs[pkg.name] = pkg + for source in pkg.sources: + self.sources_by_filename[source.filename] = source - @property - def all_sources(self): - return sum((pkg.sources for pkg in self.pkgs), []) + self.pkgs[pkg.name] = pkg class MapDataPackage: @@ -55,16 +56,21 @@ class MapDataPackage: self.extends = data.get('extends') - self.size = data.get('size') + self.width = data.get('width') + self.height = data.get('height') - self.sources = tuple(MapSource(self, name, source) - for name, source in data.get('sources', {}).items()) + self.sources = tuple(MapSource(self, source) for source in data.get('sources', [])) self.levels = data.get('levels') class MapSource: - def __init__(self, pkg, name, data): - self.name = name + def __init__(self, pkg, data): + self.name = data['name'] + self.filename = self.name+'.'+data['src'].split('.')[-1] self.src = os.path.join(pkg.path, data['src']) self.bounds = data['bounds'] + + @property + def jsbounds(self): + return json.dumps(self.bounds) diff --git a/src/c3nav/mapdata/urls.py b/src/c3nav/mapdata/urls.py new file mode 100644 index 00000000..67eb18af --- /dev/null +++ b/src/c3nav/mapdata/urls.py @@ -0,0 +1,7 @@ +from django.conf.urls import url + +from . import views + +urlpatterns = [ + url(r'^sources/(?P[^/]+)$', views.source, name='map.source'), +] diff --git a/src/c3nav/mapdata/views.py b/src/c3nav/mapdata/views.py index 91ea44a2..e1a45865 100644 --- a/src/c3nav/mapdata/views.py +++ b/src/c3nav/mapdata/views.py @@ -1,3 +1,19 @@ +import mimetypes + +from django.contrib.admin.views.decorators import staff_member_required +from django.http import Http404, HttpResponse from django.shortcuts import render -# Create your views here. +from ..mapdata import mapmanager + + +@staff_member_required +def source(request, filename): + source = mapmanager.sources_by_filename.get(filename) + if source is None: + raise Http404('Source does not exist') + + response = HttpResponse(content_type=mimetypes.guess_type(source.src)[0]) + with open(source.src, 'rb') as f: + response.write(f.read()) + return response diff --git a/src/c3nav/urls.py b/src/c3nav/urls.py index 9047830a..e72e11d4 100644 --- a/src/c3nav/urls.py +++ b/src/c3nav/urls.py @@ -2,8 +2,10 @@ from django.conf.urls import include, url from django.contrib import admin from .control import urls as control_urls +from .mapdata import urls as map_urls urlpatterns = [ url(r'^control/', include(control_urls)), + url(r'^map/', include(map_urls)), url(r'^admin/', admin.site.urls), ]