diff --git a/doc/source/developer.rst b/doc/source/developer.rst
index 059b33484..7b3393020 100644
--- a/doc/source/developer.rst
+++ b/doc/source/developer.rst
@@ -21,7 +21,6 @@ API reference
remoteappmanager.application
remoteappmanager.command_line_config
remoteappmanager.file_config
- remoteappmanager.jinja2_adapters
remoteappmanager.netutils
remoteappmanager.traitlets
remoteappmanager.user
@@ -46,4 +45,3 @@ API reference
remoteappmanager.webapi.admin.container
remoteappmanager.services.hub
remoteappmanager.services.reverse_proxy
-
diff --git a/frontend/sharedDependencies.js b/frontend/sharedDependencies.js
index a8b54c776..a165e02a5 100644
--- a/frontend/sharedDependencies.js
+++ b/frontend/sharedDependencies.js
@@ -6,6 +6,7 @@ require('ionicons-css');
require('admin-lte-css');
require('skin-black-css');
require('skin-red-css');
+require('skin-blue-css');
// Load JS (Global jQuery so that it's accessible by bootstrap)
window.jQuery = window.$ = require('jquery');
diff --git a/remoteappmanager/base_application.py b/remoteappmanager/base_application.py
index 5989b3580..00b8650fa 100644
--- a/remoteappmanager/base_application.py
+++ b/remoteappmanager/base_application.py
@@ -4,14 +4,12 @@
from traitlets import Instance, default
from tornado import web
import tornado.ioloop
-from jinja2 import Environment, FileSystemLoader
from tornadowebapi.registry import Registry
from remoteappmanager.db.interfaces import ABCDatabase
from remoteappmanager.logging.logging_mixin import LoggingMixin
from remoteappmanager.docker.container_manager import ContainerManager
-from remoteappmanager.jinja2_adapters import Jinja2LoaderAdapter, gravatar_id
from remoteappmanager.user import User
from remoteappmanager.traitlets import as_dict
from remoteappmanager.services.hub import Hub
@@ -84,8 +82,6 @@ def __init__(self,
settings["static_url_prefix"] = (
self._command_line_config.base_urlpath + "static/")
- self._jinja_init(settings)
-
handlers = self._get_handlers()
super().__init__(handlers, **settings)
@@ -181,17 +177,3 @@ def _get_handlers(self):
web_api = self.registry.api_handlers(base_urlpath)
web_handlers = self._web_handlers()
return web_api+web_handlers
-
- def _jinja_init(self, settings):
- """Initializes the jinja template system settings.
- These will be passed as settings and will be accessible at
- rendering."""
- jinja_env = Environment(
- loader=FileSystemLoader(
- settings["template_path"]
- ),
- autoescape=True,
- )
-
- jinja_env.filters["gravatar_id"] = gravatar_id
- settings["template_loader"] = Jinja2LoaderAdapter(jinja_env)
diff --git a/remoteappmanager/handlers/admin/admin_home_handler.py b/remoteappmanager/handlers/admin/admin_home_handler.py
index c90909d67..a081db5ae 100644
--- a/remoteappmanager/handlers/admin/admin_home_handler.py
+++ b/remoteappmanager/handlers/admin/admin_home_handler.py
@@ -9,4 +9,4 @@ class AdminHomeHandler(BaseHandler):
@web.authenticated
@gen.coroutine
def get(self):
- self.render('admin/page.html')
+ self.render('admin_page.html')
diff --git a/remoteappmanager/handlers/base_handler.py b/remoteappmanager/handlers/base_handler.py
index 9b8b9ef12..c980184d6 100644
--- a/remoteappmanager/handlers/base_handler.py
+++ b/remoteappmanager/handlers/base_handler.py
@@ -1,5 +1,6 @@
from http.client import responses
from urllib.parse import urljoin
+import hashlib
from tornado import web, gen
@@ -36,12 +37,20 @@ def render(self, template_name, **kwargs):
args.update(kwargs)
- if file_config.ga_tracking_id:
- args.update({
- "analytics": {
- "tracking_id": file_config.ga_tracking_id
- }
- })
+ args.update({
+ "analytics": {
+ "tracking_id": file_config.ga_tracking_id
+ } if file_config.ga_tracking_id else None
+ })
+
+ args.update({
+ "gravatar_id": (
+ hashlib.md5(
+ str(self.current_user.name).strip().lower().encode(
+ "utf-8")).hexdigest()
+ if self.current_user is not None
+ else None)
+ })
super(BaseHandler, self).render(template_name, **args)
diff --git a/remoteappmanager/handlers/user_home_handler.py b/remoteappmanager/handlers/user_home_handler.py
index 57da924bd..385e933ab 100644
--- a/remoteappmanager/handlers/user_home_handler.py
+++ b/remoteappmanager/handlers/user_home_handler.py
@@ -9,4 +9,4 @@ class UserHomeHandler(BaseHandler):
@web.authenticated
@gen.coroutine
def get(self):
- self.render('user/page.html')
+ self.render('user_page.html')
diff --git a/remoteappmanager/jinja2_adapters.py b/remoteappmanager/jinja2_adapters.py
deleted file mode 100644
index 192d87575..000000000
--- a/remoteappmanager/jinja2_adapters.py
+++ /dev/null
@@ -1,81 +0,0 @@
-import hashlib
-
-from tornado.template import Template
-
-
-class Jinja2LoaderAdapter:
- """Adapts the Jinja2 environment to act as a loader
- as desired by tornado.
-
- The class uses duck typing to implement the interface of tornado.BaseLoader
- and relies on jinja caching to hold the premade templates.
- """
- def __init__(self, env):
- """Initializes the adapter.
-
- Parameters
- ----------
- env : Environment
- the jinja2 environment
-
- """
- self._env = env
-
- def reset(self):
- """Resets the LRU cache in jinja template environment.
- The method is already thread safe.
- """
- self._env.cache.clear()
-
- def load(self, name, parent_path=None):
- """Loads the template with a given name.
-
- Parameters
- ----------
- name : str
- the simple name of the template.
- parent_path : str
- The parent path (unused)
-
- Return
- ------
- Jinja2TemplateAdapter object, adapting a jinja template into a tornado
- template interface
- """
- return Jinja2TemplateAdapter(self._env.get_template(name))
-
- def resolve_path(self, name, parent_path=None):
- """Returns the absolute name of the template according to the loader.
-
- Parameters
- ----------
- name : str
- the simple name of the template.
- parent_path : str
- The parent path (unused)
-
- Return
- ------
- The absolute path of the template
- """
- _, filename, _ = self._env.loader.get_source(self._env, name)
- return filename
-
-
-class Jinja2TemplateAdapter(Template):
- """Adapts the Jinja template interface to act as a tornado template.
- It reimplements the base class, but it uses no functionality of it.
-
- """
- def __init__(self, template):
- self._template = template
-
- def generate(self, **kwargs):
- """Generate this template with the given arguments."""
- return self._template.render(**kwargs)
-
-
-def gravatar_id(value):
- """Computes the gravatar identifier for a given value (normally email)
- Used for jinja filter."""
- return hashlib.md5(str(value).strip().lower().encode("utf-8")).hexdigest()
diff --git a/remoteappmanager/templates/admin/page.html b/remoteappmanager/templates/admin_page.html
similarity index 91%
rename from remoteappmanager/templates/admin/page.html
rename to remoteappmanager/templates/admin_page.html
index 0f6b4bb9b..0148ca813 100644
--- a/remoteappmanager/templates/admin/page.html
+++ b/remoteappmanager/templates/admin_page.html
@@ -1,6 +1,6 @@
{% extends "page.html" %}
-{% set skin = "skin-red" %}
+{% block skin %} skin-red {% end %}
{% block sidebar %}
-{% endblock %}
+{% end %}
{% block main %}
- {{message}} -
- {% endif %} - {% if message_html %} -- {{message_html | safe}} -
- {% endif %} - {% endblock error_detail %} -+ {{message}} +
+ {% end %} +