diff --git a/src/c3nav/editor/views/base.py b/src/c3nav/editor/views/base.py index 02485538..2567abc6 100644 --- a/src/c3nav/editor/views/base.py +++ b/src/c3nav/editor/views/base.py @@ -192,6 +192,22 @@ class APIHybridFormTemplateResponse(APIHybridResponse): return render(request, self.template, self.ctx) +class APIHybridTemplateContextResponse(APIHybridResponse): + def __init__(self, template: str, ctx: dict, fields=None): + self.template = template + self.ctx = ctx + self.fields = fields + + def get_api_response(self, request): + result = self.ctx + if self.fields: + result = {name: value for name, value in result.items() if name in self.fields} + return result + + def get_html_response(self, request): + return render(request, self.template, self.ctx) + + class NoAPIHybridResponse(Exception): pass diff --git a/src/c3nav/editor/views/edit.py b/src/c3nav/editor/views/edit.py index 121b9fde..eda2e357 100644 --- a/src/c3nav/editor/views/edit.py +++ b/src/c3nav/editor/views/edit.py @@ -17,7 +17,8 @@ from django.views.decorators.http import etag from c3nav.editor.forms import GraphEdgeSettingsForm, GraphEditorActionForm from c3nav.editor.views.base import (APIHybridError, APIHybridFormTemplateResponse, APIHybridLoginRequiredResponse, - APIHybridMessageRedirectResponse, etag_func, sidebar_view) + APIHybridMessageRedirectResponse, APIHybridTemplateContextResponse, etag_func, + sidebar_view) from c3nav.mapdata.models.access import AccessPermission from c3nav.mapdata.utils.user import can_access_editor @@ -39,11 +40,11 @@ def child_model(request, model: typing.Union[str, models.Model], kwargs=None, pa } -@sidebar_view +@sidebar_view(api_hybrid=True) @etag(etag_func) def main_index(request): Level = request.changeset.wrap_model('Level') - return render(request, 'editor/index.html', { + return APIHybridTemplateContextResponse('editor/index.html', { 'levels': Level.objects.filter(Level.q_for_request(request), on_top_of__isnull=True), 'can_create_level': (request.user_permissions.can_access_base_mapdata and request.changeset.can_edit(request)), @@ -55,7 +56,7 @@ def main_index(request): child_model(request, 'AccessRestrictionGroup'), child_model(request, 'Source'), ], - }) + }, fields=('can_create_level', 'child_models')) @sidebar_view