Add template "theme" feature, albeit global

would be even better to let each user session have something different, but
alas this is all-or-nothing for now
This commit is contained in:
Lance Edgar 2018-11-27 17:52:02 -06:00
parent f05d50bce3
commit ea0dc1ea19
8 changed files with 377 additions and 20 deletions

View file

@ -42,6 +42,7 @@ import tailbone
from tailbone import forms
from tailbone.db import Session
from tailbone.views import View
from tailbone.util import set_app_theme
class Feedback(colander.Schema):
@ -125,6 +126,22 @@ class CommonView(View):
('Tailbone', tailbone.__version__),
])
def change_theme(self):
"""
Simple view which can change user's visible UI theme, then redirect
user back to referring page.
"""
theme = self.request.params.get('theme')
if theme:
try:
set_app_theme(self.request, theme, session=Session())
except Exception as error:
msg = "Failed to set theme: {}: {}".format(error.__class__.__name__, error)
self.request.session.flash(msg, 'error')
else:
self.request.session.flash("App theme has been changed to: {}".format(theme))
return self.redirect(self.request.get_referrer())
def feedback(self):
"""
Generic view to present/handle the user feedback form.
@ -188,6 +205,12 @@ class CommonView(View):
config.add_route('mobile.about', '/mobile/about')
config.add_view(cls, attr='about', route_name='mobile.about', renderer='/mobile/about.mako')
# change theme
config.add_tailbone_permission('common', 'common.change_app_theme',
"Change global App Template Theme")
config.add_route('change_theme', '/change-theme', request_method='POST')
config.add_view(cls, attr='change_theme', route_name='change_theme')
# feedback
config.add_route('feedback', '/feedback', request_method='POST')
config.add_view(cls, attr='feedback', route_name='feedback', renderer='json')