Use jinja2 as the templating system
authorSimo Sorce <simo@redhat.com>
Thu, 5 Dec 2013 03:42:09 +0000 (22:42 -0500)
committerSimo Sorce <simo@redhat.com>
Wed, 11 Dec 2013 20:35:39 +0000 (15:35 -0500)
Add flashy css to indicate this is development stuff

examples/ipsilon.conf
src/ipsilon.py
src/root.py [new file with mode: 0755]
templates/index.html [new file with mode: 0644]
ui/ipsilon.css [new file with mode: 0644]

index 8329d01..d536d96 100644 (file)
@@ -1,4 +1,5 @@
 [global]
 log.iscreen = "error"
 [global]
 log.iscreen = "error"
+base.dir = "../"
 providers.dir = "../src/providers"
 admin.config.db = "/var/lib/ipsilon/adminconfig.sqlite"
 providers.dir = "../src/providers"
 admin.config.db = "/var/lib/ipsilon/adminconfig.sqlite"
index 15b0ec8..20c2c66 100755 (executable)
 import sys
 sys.stdout = sys.stderr
 
 import sys
 sys.stdout = sys.stderr
 
+import os
 import atexit
 import threading
 import cherrypy
 from util import plugin
 from util import data
 import atexit
 import threading
 import cherrypy
 from util import plugin
 from util import data
-
-class Root(object):
-
-    @cherrypy.expose
-    def index(self):
-        return '/'
+from jinja2 import Environment, FileSystemLoader
+import root
 
 
 cherrypy.config.update('ipsilon.conf')
 
 
 cherrypy.config.update('ipsilon.conf')
@@ -43,8 +40,11 @@ datastore = data.Store()
 admin_config = datastore.get_admin_config()
 cherrypy.config.update(admin_config)
 
 admin_config = datastore.get_admin_config()
 cherrypy.config.update(admin_config)
 
+templates = os.path.join(cherrypy.config['base.dir'], 'templates')
+env = Environment(loader=FileSystemLoader(templates))
+
 if __name__ == "__main__":
 if __name__ == "__main__":
-    cherrypy.quickstart(Root())
+    cherrypy.quickstart(root.Root(env))
 
 else:
     cherrypy.config.update({'environment': 'embedded'})
 
 else:
     cherrypy.config.update({'environment': 'embedded'})
@@ -53,4 +53,5 @@ else:
         cherrypy.engine.start(blocking=False)
         atexit.register(cherrypy.engine.stop)
 
         cherrypy.engine.start(blocking=False)
         atexit.register(cherrypy.engine.stop)
 
-    application = cherrypy.Application(Root(), script_name=None, config=None)
+    application = cherrypy.Application(root.Root(env),
+                                       script_name=None, config=None)
diff --git a/src/root.py b/src/root.py
new file mode 100755 (executable)
index 0000000..d4cd900
--- /dev/null
@@ -0,0 +1,34 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2013  Simo Sorce <simo@redhat.com>
+#
+# see file 'COPYING' for use and warranty information
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+import cherrypy
+
+class Root(object):
+
+    def __init__(self, template_env):
+        self._env = template_env
+
+    @cherrypy.expose
+    def index_html(self):
+        tmpl = self._env.get_template('index.html')
+        return tmpl.render(title='Root', content='Awesome!')
+
+    @cherrypy.expose
+    def index(self):
+        return self.index_html()
diff --git a/templates/index.html b/templates/index.html
new file mode 100644 (file)
index 0000000..230edc7
--- /dev/null
@@ -0,0 +1,23 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8"></meta>
+    <title>{{ title }}</title>
+    <link href="ui/ipsilon.css" type="text/css" rel="stylesheet"></link>
+    <link href="ui/favicon.ico" type="image/ico" rel="icon"></link>
+</head>
+<body>
+    <div id="container">
+        <div id="background">
+            <div id="background-header"></div>
+            <div id="background-navigation"></div>
+            <div id="background-left"></div>
+            <div id="background-center"></div>
+            <div id="background-right"></div>
+        </div>
+        <div id="content">
+            <p>{{ content }}</p>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/ui/ipsilon.css b/ui/ipsilon.css
new file mode 100644 (file)
index 0000000..a73b838
--- /dev/null
@@ -0,0 +1,42 @@
+/* Intentionally shocking, for development purpose */
+
+html {
+    height: 100%;
+}
+
+body {
+    overflow: auto;
+    position: relative;
+    background-color: #DEAD42;
+    border-width: 0;
+    font-family: "Liberation Sans",Arial,Sans;
+    font-size: 14px;
+    margin: 0;
+    padding: 0;
+    height: 100%;
+}
+
+textarea[readonly] {
+    color: Gray;
+}
+
+/* ---- Container ---- */
+
+#container {
+    position: absolute;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    margin: 0 auto 0;
+}
+
+/* ---- Content ---- */
+#content {
+    position: absolute;
+    top: 42%;
+    left: 42%;
+    right: 42%;
+    bottom: 42%;
+}
+