# HG changeset patch # User Steve Losh # Date 1255478807 14400 # Node ID 73284798e9e96a85c9e21f65efc4be0a3e341db6 # Parent 22906da596dfa37ff2fc5377dac5f0bc349c7183 More infrastructure for the web UI. diff -r 22906da596df -r 73284798e9e9 review/web_media/aal.css --- /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 diff -r 22906da596df -r 73284798e9e9 review/web_templates/index.html --- 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 @@ ${ basename(rd.target.root) } / hg-review + diff -r 22906da596df -r 73284798e9e9 review/web_ui.py --- 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()