# HG changeset patch # User Goffi # Date 1589879150 -7200 # Node ID 6dfcdbeb0d33702a919877f2803e3ad60aca45a1 # Parent 470c6cfdf4ce1b1ad004d53a5547b807b2abf5cf pages: handle themes using `theme` request argument diff -r 470c6cfdf4ce -r 6dfcdbeb0d33 libervia/pages/forums/topics/page_meta.py --- a/libervia/pages/forums/topics/page_meta.py Tue May 19 11:05:47 2020 +0200 +++ b/libervia/pages/forums/topics/page_meta.py Tue May 19 11:05:50 2020 +0200 @@ -7,6 +7,7 @@ from sat.core.log import getLogger from sat.tools.common import uri as xmpp_uri from sat.tools.common import data_format +from libervia.server import session_iface log = getLogger(__name__) diff -r 470c6cfdf4ce -r 6dfcdbeb0d33 libervia/server/pages.py --- a/libervia/server/pages.py Tue May 19 11:05:47 2020 +0200 +++ b/libervia/server/pages.py Tue May 19 11:05:50 2020 +0200 @@ -1345,6 +1345,7 @@ return self.host.renderer.render( self.template, + theme=session_data.theme, site_themes=self.vhost_root.site_themes, page_url=self.getURL(), media_path=f"/{C.MEDIA_DIR}", @@ -1666,6 +1667,24 @@ if session_data.locale is None: self.setBestLocale(request) + # theme + key_theme = C.KEY_THEME.encode() + if key_theme in request.args: + try: + theme = request.args.pop(key_theme)[0].decode() + except IndexError: + theme = C.TEMPLATE_THEME_DEFAULT + else: + if key_theme != session_data.theme: + if theme not in self.vhost_root.site_themes: + log.warning(_( + "Theme {theme!r} doesn't exist for {vhost}, using " + "default one") + .format(theme=theme, vhost=self.vhost_root)) + else: + session_data.theme = theme + + d = defer.Deferred() d.addCallback(self._checkAccess, request) diff -r 470c6cfdf4ce -r 6dfcdbeb0d33 libervia/server/session_iface.py --- a/libervia/server/session_iface.py Tue May 19 11:05:47 2020 +0200 +++ b/libervia/server/session_iface.py Tue May 19 11:05:50 2020 +0200 @@ -1,7 +1,6 @@ #!/usr/bin/env python3 - -# Libervia: a SAT frontend +# Libervia: a SàT frontend # Copyright (C) 2009-2020 Jérôme Poisson (goffi@goffi.org) # This program is free software: you can redistribute it and/or modify @@ -51,6 +50,7 @@ self.identities = data_objects.Identities() self.csrf_token = str(shortuuid.uuid()) self.locale = None # i18n of the pages + self.theme = C.TEMPLATE_THEME_DEFAULT self.pages_data = {} # used to keep data accross reloads (key is page instance) self.affiliations = OrderedDict() # cache for node affiliations