73284798e9e9 webui

More infrastructure for the web UI.
[view raw] [browse files]
author Steve Losh <steve@stevelosh.com>
date Tue, 13 Oct 2009 20:06:47 -0400
parents 22906da596df
children 7b4e78679c9d
branches/tags webui
files review/web_media/aal.css review/web_templates/index.html review/web_ui.py

Changes

--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/review/web_media/aal.css	Tue Oct 13 20:06:47 2009 -0400
@@ -0,0 +1,99 @@
+/* 
+  aardvark.legs by Anatoli Papirovski - http://fecklessmind.com/
+  Licensed under the MIT license. http://www.opensource.org/licenses/mit-license.php
+*/
+
+/* 
+  Reset first. Modified version of Eric Meyer and Paul Chaplin reset 
+  from http://meyerweb.com/eric/tools/css/reset/ 
+*/
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, font, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+header, nav, section, article, aside, footer
+{border: 0; margin: 0; outline: 0; padding: 0; background: transparent; vertical-align: baseline;}
+
+blockquote, q {quotes: none;}
+blockquote:before,blockquote:after,q:before,q:after {content: ''; content: none;}
+
+header, nav, section, article, aside, footer {display: block;}
+
+/* Basic styles */
+body {background: #fff; color: #000; font: 1em/1.5em "Helvetica Neue", Helvetica, Arial, "Liberation Sans", "Bitstream Vera Sans", sans-serif;}
+html>body {font-size: 16px;}
+
+img {display: inline-block; vertical-align: bottom;}
+
+h1,h2,h3,h4,h5,h6,strong,b,dt,th {font-weight: 700;}
+address,cite,em,i,caption,dfn,var {font-style: italic;}
+
+h1 {margin: 0 0 0.75em; font-size: 2em;}
+h2 {margin: 0 0 1em; font-size: 1.5em;}
+h3 {margin: 0 0 1.286em; font-size: 1.167em;}
+h4 {margin: 0 0 1.5em; font-size: 1em;}
+h5 {margin: 0 0 1.8em; font-size: .834em;}
+h6 {margin: 0 0 2em; font-size: .75em;}
+
+p,ul,ol,dl,blockquote,pre {margin: 0 0 1.5em;}
+
+li ul,li ol {margin: 0;}
+ul {list-style: outside disc;}
+ol {list-style: outside decimal;}
+li {margin: 0 0 0 2em;}
+dd {padding-left: 1.5em;}
+blockquote {padding: 0 1.5em;}
+
+a {text-decoration: underline;}
+a:hover {text-decoration: none;}
+abbr,acronym {border-bottom: 1px dotted; cursor: help;}
+del {text-decoration: line-through;}
+ins {text-decoration: overline;}
+sub {font-size: .834em; line-height: 1em; vertical-align: sub;}
+sup {font-size: .834em; line-height: 1em; vertical-align: super;}
+
+tt,code,kbd,samp,pre {font-size: 1em; font-family: "Courier New", Courier, monospace;}
+
+/* Table styles */
+table {border-collapse: collapse; border-spacing: 0; margin: 0 0 1.5em;}
+caption {text-align: left;}
+th, td {padding: .25em .5em;}
+tbody td, tbody th {border: 1px solid #000;}
+tfoot {font-style: italic;}
+
+/* Form styles */
+fieldset {clear: both;}
+legend {padding: 0 0 1.286em; font-size: 1.167em; font-weight: 700;}
+fieldset fieldset legend {padding: 0 0 1.5em; font-size: 1em;}
+* html legend {margin-left: -7px;}
+*+html legend {margin-left: -7px;}
+
+form .field, form .buttons {clear: both; margin: 0 0 1.5em;}
+form .field label {display: block;}
+form ul.fields li {list-style-type: none; margin: 0;}
+form ul.inline li, form ul.inline label {display: inline;}
+form ul.inline li {padding: 0 .75em 0 0;}
+
+input.radio, input.checkbox {vertical-align: top;}
+label, button, input.submit, input.image {cursor: pointer;}
+* html input.radio, * html input.checkbox {vertical-align: middle;}
+*+html input.radio, *+html input.checkbox {vertical-align: middle;}
+
+textarea {overflow: auto;}
+input.text, input.password, textarea, select {margin: 0; font: 1em/1.3 Helvetica, Arial, "Liberation Sans", "Bitstream Vera Sans", sans-serif; vertical-align: baseline;}
+input.text, input.password, textarea {border: 1px solid #444; border-bottom-color: #666; border-right-color: #666; padding: 2px;}
+
+* html button {margin: 0 .34em 0 0;}
+*+html button {margin: 0 .34em 0 0;}
+
+form.horizontal .field {padding-left: 150px;}
+form.horizontal .field label {display: inline; float: left; width: 140px; margin-left: -150px;}
+
+/* Useful classes */
+img.left {display: inline; float: left; margin: 0 1.5em .75em 0;}
+img.right {display: inline; float: right; margin: 0 0 .75em .75em;}
\ No newline at end of file
--- a/review/web_templates/index.html	Tue Oct 13 19:46:03 2009 -0400
+++ b/review/web_templates/index.html	Tue Oct 13 20:06:47 2009 -0400
@@ -5,6 +5,7 @@
 <html>
     <head>
         <title>${ basename(rd.target.root) } / hg-review</title>
+        <link rel="stylesheet" href="/media/aal.css" type="text/css" media="screen" />
     </head>
     
     <body>
--- a/review/web_ui.py	Tue Oct 13 19:46:03 2009 -0400
+++ b/review/web_ui.py	Tue Oct 13 20:06:47 2009 -0400
@@ -6,6 +6,7 @@
 
 package_path = os.path.split(os.path.realpath(__file__))[0]
 template_path = os.path.join(package_path, 'web_templates')
+media_path = os.path.join(package_path, 'web_media')
 top_path = os.path.split(package_path)[0]
 bundled_path = os.path.join(top_path, 'bundled')
 webpy_path = os.path.join(bundled_path, 'webpy')
@@ -16,7 +17,8 @@
 
 _rd = None
 urls = (
-    '/', 'index'
+    '/', 'index',
+    '/media/([^/]*)', 'media',
 )
 
 
@@ -31,12 +33,23 @@
         revs = (_rd.target[r] for r in xrange(rev_max, rev_min, -1))
         return render.index(_rd, revs)
     
+class media:
+    def GET(self, fname):
+        if '..' in fname:
+            return ''
+        else:
+            with open(os.path.join(media_path, fname)) as f:
+                content = f.read()
+            return content
+    
 
 app = web.application(urls, globals())
 
 def load_interface(ui, repo):
     global _rd
     _rd = api.ReviewDatastore(ui, repo)
-    
+    print sys.argv
     sys.argv = sys.argv[:1]    # Seriously, web.py?  This is such a hack.
+    sys.argv = [__file__]
+    print sys.argv
     app.run()