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 %}
@@ -25,9 +25,8 @@
-{% endblock %} +{% end %} {% block script_init %} - {{ super() }} -{% endblock %} +{% end %} diff --git a/remoteappmanager/templates/error.html b/remoteappmanager/templates/error.html index bef771a63..4044c3ce9 100644 --- a/remoteappmanager/templates/error.html +++ b/remoteappmanager/templates/error.html @@ -1,28 +1,78 @@ -{% extends "page.html" %} - -{% block login_widget %} -{% endblock %} - -{% block main %} - -
- {% block h1_error %} -

- {{status_code}} : {{status_message}} -

- {% endblock h1_error %} - {% block error_detail %} - {% if message %} -

- {{message}} -

- {% endif %} - {% if message_html %} -

- {{message_html | safe}} -

- {% endif %} - {% endblock error_detail %} -
- -{% endblock %} + + + + + + {% block title %}RemoteApp Manager{% end %} + + + + + + {% if analytics is not None %} + + {% end %} + + + + + + +
+ + +
+ +
+ + + +
+ +
+

+ {{status_code}} : {{status_message}} +

+ {% if message %} +

+ {{message}} +

+ {% end %} +
+
+
+ +
+ + + + + + + diff --git a/remoteappmanager/templates/page.html b/remoteappmanager/templates/page.html index 2272c4a32..93b5a8836 100644 --- a/remoteappmanager/templates/page.html +++ b/remoteappmanager/templates/page.html @@ -1,17 +1,15 @@ -{% set skin = skin | default("skin-blue") %} - - {% block title %}RemoteApp Manager{% endblock %} + {% block title %}RemoteApp Manager{% end %} {% block stylesheet %} - {% endblock %} + {% end %} {% block script %} - {% if analytics %} - - {% endif %} - {% endblock %} + {% if analytics is not None %} + + {% end %} + {% end %} - +