Commits

Benoit Chesneau  committed 3247980

refactoring

  • Participants
  • Parent commits 97b62c9

Comments (0)

Files changed (39)

File build/compress.py

+import os
+import sys
+
+from pygments.formatters import HtmlFormatter
+from pygments.styles import get_all_styles
+
+sys.path.append("../tools")
+from merge_css import MergeCSS
+from merge_js import MergeJS
+
+if  __name__ == "__main__":
+    # merge css and compact it
+    merge_css = MergeCSS('friendpaste.yml')
+    merge_css.run()
+    
+    # merge js and minify
+    #merge_js = MergeJS('friendpaste.yml')
+    #merge_js.run()
+    
+    # generate pygments styles
+    
+    for style in get_all_styles():
+        highlight_css =  os.path.join("../static/css", "%s.css" % style)
+        print "generate %s" % highlight_css
+        css = HtmlFormatter(style=style).get_style_defs('.highlight')
+        f = open(highlight_css, 'w')
+        f.write(css)
+        f.close()
+        
+        

File build/friendpaste.yml

+css_path: ../static/css
+javascript_path: ../static/js
+css:
+    ie.css:
+        - ie.css
+    print.css:
+        - print.css
+    screen.css:
+        - reset.css
+        - typography.css
+        - layout.css
+        - colors.css
+javascript:
+    
+    

File friendpaste/application.py

 
 
 from friendpaste import settings
-from friendpaste.urls import map, all_views
+from friendpaste.urls import urls_map, all_views
 from friendpaste.utils import local, local_manager
-from friendpaste.template import do_highlight, do_timesince, ALL_COLORSHEME, \
-    datetimeformat, do_blockdiff, url_for
 from friendpaste.http import FPRequest
 
 
 class FriendpasteApp(object):
     def __init__(self):
-        self.templates_path = settings.TEMPLATES_PATH
-
         self.views = all_views.copy()
 
-        self.dispatch_request = SharedDataMiddleware(
-            self.dispatch_request, 
-            { '/static': settings.SHARED_DATA }
-        )
+        self.dispatch = SharedDataMiddleware(self.dispatch, {
+            '/static': settings.STATIC_PATH
+        })
 
-        env = Environment(loader=FileSystemLoader(self.templates_path))
-        env.template_charset = 'utf-8'
-        env.filters.update({
-            'highlight': do_highlight,
-            'timesince': do_timesince,
-            'tabular': do_blockdiff,
-            'datetimeformat': datetimeformat
-        })
-        env.globals.update({
-            'ALL_COLORSHEME': ALL_COLORSHEME,
-            'url': url_for
-        })
-        self.template_env = env
-        self.initialized = True
-
-    def bind_to_thread(self):
-        local.application = self
-
-    def bind_to_context(self):
-        local.application = self
-
-    def dispatch_request(self, environ, start_response):
-        local.application = self 
-        local.url_adapter = adapter  = map.bind_to_environ(environ)
-        request = object.__new__(FPRequest)
-        local.request = request
-        request.__init__(self, environ)
+    def dispatch(self, environ, start_response): 
+        local.request = request = FPRequest(self, environ)
+        local.url_adapter = adapter  = urls_map.bind_to_environ(environ)
         
-        couchdb_server = Server(settings.SERVER_URI)
-        local.db = couchdb_server[settings.DATABASE_NAME]
-
         try:
             endpoint, args = adapter.match(request.path)
             response = self.views[endpoint](request, **args)
         return response(environ, start_response)
 
     def __call__(self, environ, start_response):
-        """Just forward a WSGI call to the first internal middleware."""
-        return ClosingIterator(self.dispatch_request(environ, start_response),
-                               [local_manager.cleanup])
+        local.application = self
+        couchdb_server = Server(settings.SERVER_URI)
+        local.db = couchdb_server[settings.DATABASE_NAME]
+        return ClosingIterator(self.dispatch(environ, start_response),
+                            [local_manager.cleanup])

File friendpaste/settings.py

 
 import os
 
+DEBUG = True
+
 SITE_URI='http://www.friendpaste.com'
 
 # database
 
 # path 
 PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
-SHARED_DATA = os.path.join(PROJECT_PATH, '../static')
+STATIC_PATH = os.path.join(PROJECT_PATH, '../static')
 TEMPLATES_PATH = os.path.join(PROJECT_PATH, '../templates')
 
 SITE_ID=1

File friendpaste/template.py

 import os
 from time import strptime, localtime
 
+from jinja2 import Environment
+from jinja2.loaders import FileSystemLoader
 from pygments import highlight, lexers, formatters
 from pygments.styles import get_all_styles
 
+from friendpaste import settings
 from friendpaste.http import FPResponse
 from friendpaste.utils import local, timesince, datetimestr_topython
 
+template_env = Environment(loader=FileSystemLoader(settings.TEMPLATES_PATH))
+template_env.charset = 'utf-8'
 
-def render_response(template_name, **kwargs):
-    return FPResponse(render_template(template_name, **kwargs))
+ALL_COLORSHEME = list(get_all_styles())
 
-def render_template(template_name, _stream=False, **kwargs):
-    tmpl = local.application.template_env.get_template(template_name)
-    if _stream:
-        return tmpl.stream(kwargs)
-    return tmpl.render(kwargs)
+
 
 def url_for(endpoint, _external=False, **values):
     return local.url_adapter.build(endpoint, values, force_external=_external)
+template_env.globals['url_for'] = url_for
+template_env.globals['DEBUG'] = settings.DEBUG
+template_env.globals['ALL_COLORSHEME'] = list(get_all_styles())
 
 
 def highlighter(value, language):
     helper filter for templates
     """ 
     return highlighter(value, language)
+template_env.filters['highlight'] = do_highlight
 
 def do_timesince(value):
     """
     """
     value = datetimestr_topython(value)
     return timesince(value)
-
+template_env.filters['timesince'] = do_timesince
 
 def do_blockdiff(value): 
     """
             rst = rst + "<tr><th class=\"linenos\">...<th><td colspan=\"3\"></td></tr>"
     rst = "<table class=\"difftabular\">%s</table>" % rst
     return rst
-    
+template_env.filters['tabular'] = do_blockdiff
+
 def datetimeformat(value):
     """
     datetime filter for the template
     """
     value=datetimestr_topython(value)
     return value.strftime('%c')
+template_env.filters['datetimeformat'] = datetimeformat
 
+def date(value, arg=None):
+    """Formats a date according to the given format."""
+    if not value:
+        return u''
+    if arg is None:
+        arg = "%a %b %d %Y at %H:%M"
+    return value.strftime(arg)
+template_env.filters["date"]=date
 
+def render_response(template_name, **kwargs):
+    return FPResponse(render_template(template_name, **kwargs))
 
-ALL_COLORSHEME = list(get_all_styles())
+def render_template(template_name, _stream=False, **kwargs):
+    tmpl = template_env.get_template(template_name)
+    if _stream:
+        return tmpl.stream(kwargs)
+    return tmpl.render(kwargs)
+
+
+

File friendpaste/urls.py

 }
 
 
-map = Map([ 
+urls_map = Map([ 
     Rule('/', endpoint='paste/create'),
     Rule('/about', endpoint='generic/about'),
     Rule('/services/<page>', endpoint='generic/services'),

File friendpaste/utils/__init__.py

 local = Local()
 local_manager = LocalManager([local])
 
+_install_hooks = []
+
+def install_hook(f):
+    _install_hooks.append(f)
+    return f
+
+def install():
+    global _install_hooks
+    print "Setup benoitc.org"
+    for a in _install_hooks:
+        sys.stderr.write("do %s\n" % a.__name__)
+        a()
+
+@install_hook
+def create_db():
+    """create the db if it don't exist"""
+    from couchdb.client import Server
+    couchdb_server = Server(settings.SERVER_URI)
+    try:
+        db = couchdb_server.create(settings.DATABASE_NAME)
+    except:
+        pass
+        
+def load_file(fname):
+    f = file(fname, 'r')
+    data = f.read()
+    f.close
+    return data
+        
+def load_views():
+    from couchdb.client import Server
+    
+    couchdb_server = Server(settings.SERVER_URI)
+    db = couchdb_server[settings.DATABASE_NAME]
+    
+    design_path = os.path.join(os.path.dirname(__file__), '../_design')
+    print "\nLoad CouchDB views ..."
+    for name in os.listdir(design_path):
+        path = os.path.join(design_path,name)
+        views = {}
+        for view in os.listdir(path):
+            views[view] = {}
+            for js in glob(os.path.join(path, view, '*.js')):
+                if os.path.basename(js) == 'map.js':
+                    views[view]['map'] = load_file(js)
+                if os.path.basename(js) == 'reduce.js':
+                    views[view]['reduce'] = load_file(js)
+            print "add %s/%s" % (name, view)
+        try:
+            db['_design/%s' % name] = {
+                'language': 'javascript',
+                'views': views
+            }
+        except:
+            v = db['_design/%s' % name] 
+            v['views'] = views
+            db['_design/%s' % name] = v
+
 def ungettext(singular, plural, number):
     """ stupid wrapper yet waiting internationalisation """
     return ngettext(singular, plural, number)

File friendpaste/views.py

         return redirect ('/%s' % s.id)
     return render_response('paste/edit.html', form=form, snippet=s) 
 
-def _get_theme(request):
-    theme = request.cookies.get('theme', 'default')
-    highlight_css = "%s/css/%s.css" % (settings.SHARED_DATA, theme)
-    if not os.path.exists(highlight_css):
-        css = HtmlFormatter(style=theme).get_style_defs('.highlight')
-        f = open(highlight_css, 'w')
-        f.write(css)
-        f.close()
-    return theme
-
 def view_snippet(request, id):
     mimetypes = request.accept_mimetypes
     if 'application/json' in mimetypes and request.method=='PUT':
     })
 
     # get theme
-    theme = _get_theme(request)
+    theme = request.cookies.get('theme', 'default')
     return render_response('paste/view.html', snippet=s, theme=theme, form=form, rev=rev)
 
 
         response.headers['content-type'] = 'text/plain'
         return response
 
-    theme = _get_theme(request)
+    theme = request.cookies.get('theme', 'default')
     return render_response('paste/diff.html', unidiff=unidiff, difft=tabular, theme=theme,
             snippet=snippet, rev=rev, old_rev=old_rev)
 
     return locals() 
     
 def setup():
-    from friendpaste.loader import install, load_views
+    from friendpaste.utils import install, load_views
     friendpaste = make_friendpaste()
     install()
     load_views()

File static/css/autumn.css

File contents unchanged.

File static/css/base.css

-/* reset.css */
-html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td {margin:0;padding:0;border:0;font-weight:inherit;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline;}
-body {line-height:1.5;}
-table {border-collapse:separate;border-spacing:0;}
-caption, th, td {text-align:left;font-weight:normal;}
-table, td, th {vertical-align:middle;}
-blockquote:before, blockquote:after, q:before, q:after {content:"";}
-blockquote, q {quotes:"" "";}
-a img {border:none;}
-
-
-html, body {
-    height: 100%;
-}
-
-body {
-    margin: 0;
-    padding: 0;
-    background: #e5f1f4 url(../images/bg.png) repeat-x;
-    font-family: Verdana,Arial,'Bitstream Vera Sans',Helvetica,sans-serif;
-    color: #000;
-    height: 100%;
-    line-height: 1;
-}
-html > body {
-    font-size: 12px;
-}
-
-* html {
-    height: 100%;
-}
-
-h1, h2, h3, h4, h5, h6 {font-weight:normal;color:#111;}
-h1 {font-size:3em;line-height:1;margin-bottom:0.5em;}
-h2 {font-size:2em;margin-bottom:0.75em;}
-h3 {font-size:1.5em;line-height:1;margin-bottom:1em;}
-h4 {font-size:1.2em;line-height:1.25;margin-bottom:1.25em;height:1.25em;}
-h5 {font-size:1em;font-weight:bold;margin-bottom:1.5em;}
-h6 {font-size:1em;font-weight:bold;}
-h1 img, h2 img, h3 img, h4 img, h5 img, h6 img {margin:0;}
-
-ul, ol, li, h1, h2, h3, h4, h5, p {
-    margin: 0 0 0.3em 0;
-    padding: 0;
-}
-strong {
-    font-weight: bold;
-}
-a:link {
-    text-decoration: none;
-    color: #2e8696;
-}
-a:visited {
-    text-decoration: none;
-    color: #2e8696;
-}
-a:hover {
-    text-decoration: underline;
-}
-a:active {
-    text-decoration: underline;
-}
-
-ol, ul {
-    list-style-image: none;
-    list-style-position: outside;
-    list-style-type: none;
-}
-
-.column {
-    margin-top: 0;
-    padding-top: 0;
-}
-/*.container {
-    display: block;
-    margin: 0pt auto;
-    width: 950px;
-    min-height: 91%;
-}*/
-
-* html .container {
-    height: 91%;
-}
-/* header */
-#header {
-    display: block;
-    width: 100%;
-    height: 100px;
-    padding: 0px 0px 0px 30px;
-    margin: 0;
-    z-index: 0
-}
-#header h1 {
-    background: transparent url(../images/logo.gif) no-repeat;
-    width: 306px;
-    height: 80px;
-    z-index: 10;
-    padding: 0;
-    margin: 0;
-    position: relative;
-    float: left;
-    top: 10px;
-}
-#header h1 a {
-    display: block;
-    font-size: 0px;
-    width: 306px;
-    height: 80px;
-    text-indent: -700em;
-}
-
-#header #nav {
-    display: block;
-    width: auto;
-    height: 40px;
-    float: left;
-    margin-left: 80px;
-    z-index: 30;
-    position: relative;
-    top: 35px;
-}
-#nav li {
-    display: block;
-    float: left;
-    margin-left: 15px;
-    background: #899834;
-    font-size: 1.2em;
-    font-weight: bold;
-    font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif;
-}
-#nav li a {
-    display: block;
-    background: url(../images/ul.gif) no-repeat scroll left top;
-    padding: 0.5em 1em 0.5em 1em;
-}
-#nav li {
-    background: #899834 url(../images/ur.gif) no-repeat scroll right top;
-    float: left
-}
-#nav .rounded-lr {
-    background: url(../images/lr.gif) no-repeat bottom right;
-}
-#nav .rounded-ll {
-    background: url(../images/ll.gif) no-repeat bottom left;
-}
-#header a:link, #header a:visited {
-    color: #fff;
-}
-#header a:hover, #header a:active {
-    text-decoration: none;
-}
-/*#header div.logo {
-    float: right;
-    width: auto;
-    padding: 10px 80px 0pt 0pt;
-}
-*/
-
-/* content */
-.content-wrapper {
-    background: transparent url(../images/home-back.png) no-repeat 100px 0pt;
-    width: 100%;
-    margin: 0;
-    padding: 0;
-}
-#content {
-    padding: 25px 0pt;
-}
-
-/* paste form */
-#snippet-edit,#snippet,#revisions {
-    padding-top: 15px;
-}
-
-.hidden { display: none; }
-
-form, #snippet {
-    width: 90%;
-    margin: 0pt auto;
-}
-form li {
-    padding-top: 5px;
-    clear: both;
-    overflow: hidden;
-}
-form li * {
-    vertical-align: middle
-}
-form label {
-    display: block;
-    width: 14em;
-    height: 12px;
-    line-height: 1em;
-    color: #333;
-    float: left;
-    padding: 0 1em 3px 0;
-}
-input[type='text'], select {
-    width: 174px;
-    border: 1px solid #949494;
-    margin: 0;
-}
-
-textarea {
-    width: 99%;
-    border: 1px solid #949494;
-}
-input[type='submit'], input[type='reset'], input[type='button'], button {
-    background: #303030;
-    color: #ccc;
-    border-color: #899834;
-    border-width: 0 1px 1px 0;
-    font-size: 1em;
-    padding: 0.3em 0.5em 0.3em 0.5em;
-    font-weight: bold;
-}
-
-
-/* paste detail */
-#snippet h2 {
-    padding-bottom: 15px;
-}
-#snippet .lsnippet {
-    font-size: 1.3em;
-}
-#actions {
-    padding: 15px 0;
-    vertical-align: middle;
-}
-#actions form {
-    margin: 0;
-    width: auto;
-    height: 2em;
-    float: right;
-    position: relative;
-}
-#actions ul {
-    list-style: none;
-    position: relative;
-}
-#actions li {
-    display: inline;
-    margin-left: 10px;
-    border-left: 1px solid #666;
-    overflow: none;
-    clear: none;
-    padding-left: 10px;
-}
-#actions li.first {
-    border: 0;
-}
-#actions form li label { display: inline; width: auto; float: none; font-weight: normal; font-size: 1em;}
-
-#info {
-    background: #f7f7f0;
-    border: 1px solid #899834;
-    padding: 0.5em 0.3em 0.5em 0.3em;
-    font-size: 0.9em;
-    font-weight: bold;
-}
-#info table {
-    width: auto;
-    padding: 0;
-    margin: 10px 0;
-}
-#info th {
-    background: #f7f7f0;
-    padding: 0;
-}
-#dl {
-    text-align: center;
-    color: #303030;
-    padding-top: 10px;
-    font-size: 0.9em;
-}
-#dl a {
-    color: #666;
-}
-
-
-
-
-.highlight {
-    border: 1px solid #899834;
-    font-family: sans-serif;
-    border-style: solid;
-}
-.highlight {
-    display: block;
-    clear: both;
-    overflow: auto;
-    position: relative;
-}
-
-h2 a.root {
-    text-decoration: none;
-    font-size: 85%;
-}
-
-tbody.wrap, pre.wrap, ol.wrap {
-    width: 800px;
-    white-space: pre-wrap; /* css-3 */
-    white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */
-    white-space: -pre-wrap; /* Opera 4-6 */
-    white-space: -o-pre-wrap; /* Opera 7 */
-    word-wrap: break-word; /* Internet Explorer 5.5+ */
-    overflow: auto;
-}
-
-table.sourcetable td {
-     font-size: 1.1em;
-}
-
-.linenos {
-    border-right: 1px solid #899834;
-    color: #666;
-    font-weight: bold;
-    width: 15px;
-}
-
-/*
-
-table.sourcetable td {
-    font-family: "DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
-    font-size: 1em;
-    font-size-adjust: none;
-    font-stretch: normal;
-    font-style: normal;
-    font-variant: normal;
-    font-weight: normal;
-    line-height: normal;
-    overflow: auto;
-    padding: 0.2em 0.3em;
-    white-space: pre;
-}
-
-table.sourcetable {
-    empty-cells: show;
-    font-size: 12px;
-    line-height: 130%;
-    margin: 0pt auto;
-    padding: 0pt;
-    table-layout: fixed;
-    width: 100%;
-}
-
-table.sourcetable td,
-table.sourcetable th,
-table.difftabular td,
-table.difftabular th {
-    height: 1.2em;
-    line-height: 1.2em;
-    padding: 0.1em;
-    vertical-align: middle;
-    margin: 0;
-}
-*/
-
-
-td.linenos { 
-    padding: 0 5px; 
-}
- 
-.linenos .special { 
-    font-weight: bold; color: #000;
-    }
- 
-td.code {
-
-    padding: 0 8px;
-
-}
-
-table.difftabular {
-    background: #f7f7f0;
-    color: #000;
-}
-
-table.difftabular th {
-    background: #f7f7f0;
-    width: 2em;
-    text-align: center;
-}
-
-table.difftabular th.linenos {
-    border: 0;
-    text-align: center;
-}
-tr.tabularh th.linenos {
-    color: #000;
-    padding-bottom: 5px;
-}
-
-tbody.hidenos td.linenos,
-tbody.hidenos th.linenos {
-    display: none;
-}
-tr.base {
-    background: #ffd8d8;
-}
-tr.base td.c,
-th.diffm {
-    border-right: 1px solid #aa3333;
-}
-
-th.diffp,
-tr.changed td.c {
-    border-right: 1px solid #33aa33;
-}
-
-tr.changed {
-    background: #ddf8cc;
-}
-
-tr.changed td.first {
-    border-top: 1px solid #33aa33;
-}
-tr.changed .last {
-    border-bottom: 1px solid #33aa33;
-}
-
-tr.base td.first {
-    border-top: 1px solid #aa3333;
-}
-tr.base .last {
-    border-bottom: 1px solid #aa3333;
-}
-
-
-
-del {
-    text-decoration: none;
-    background: #ff8888;
-    color: #000;
-}
-
-ins {
-    background: #99ff99;
-    text-decoration: none;
-    color: #000;
-}
-
-.btop {
-    border-top: 1px solid #aa3333;
-}
-
-
-#bottoma {
-    position: relative;
-    width: 100%;
-    clear: both;
-    padding: 15pt 0;
-}
-#bottom form {
-    width: auto;
-    margin: 0pt;
-}
-#bottoma ul {
-    list-style: none;
-    position: relative;
-}
-#bottoma li {
-    display: block;
-    float: left;
-    width: 100px;
-    margin-right: 10px;
-    padding: 0;
-}
-
-
-#content #revisions {
-    position: relative;
-    width: 90%;
-    margin: 0pt auto;
-}
-#content table.revisionstable {
-    position: relative;
-    width: 600px;
-    margin: 0pt 0pt 45px 0pt;
-    padding: 0;
-    border: 1px solid #899834;
-    font-family: sans-serif;
-    border-style: solid;
-}
-#content table.revisionstable td {
-    margin-left: 20px;
-}
-#revisions form {
-    margin: 0pt;
-    padding: 0pt;
-}
-td.since {
-    font-style: italic;
-}
-#revisions h2 {
-    margin-bottom: 15px;
-}
-#revisions h3, div.txt h2 {
-    background: #303030;
-    color: #fff;
-    margin: 15px 0 15px 0;
-    padding: 0.1em;
-}
-
-div.txt {
-    width: 90%;
-    padding: 15px 0;
-    margin: 0pt auto;
-}
-div.txt h3 {
-    margin: 15px 0 10px 0;
-    padding: 0.1em;
-    font-weight: bold;
-    background: #2e8696;
-}
-div.txt pre {
-    border: 1px solid #2e8696;
-    padding: 0.3em;
-}
-div.txt pre.wrap {
-    width: 99%;
-}
-
-
-li.errors {
-    background: #ff9898;
-    padding: 0.3em;
-    border: 1px solid #ff0000;
-}
-ul.errors {
-    padding: 0.3em;
-    border: 1px solid #ff0000;
-    margin-bottom: 15px;
-}
-
-#switch span {
-    display: block;
-    cursor: pointer;
-    padding: 0 0.5em 0 0.5em;
-    font-size: 0.95em;
-    float: left;
-    font-weight: bold;
-    color: #000;
-}
-#switch {
-    clear: both;
-    margin-bottom: 5px;
-    margin-top: 10px;
-    width: auto;
-    float: right;
-}
-#switch span.active {
-    color: #666;
-    text-decoration: none;
-}
-#switch span {
-    text-decoration: none;
-    cursor: hand;
-}
-
-div.textmate {
-    background: url(../images/bundle.png) no-repeat;
-    min-height: 64px;
-    padding-left: 70px;
-}
-div.textmate ol {
-    list-style-type: decimal;
-}
-
-/* bottom */
-
-#bottom {
-    display: block;
-    clear: both;
-    width: 100%;
-    margin-top: 15px;
-    background: #303030 repeat-y;
-    padding: 0.5em 0 1em 0;
-    height: 9%;
-    min-width: 980px;
-}
-div.copyright {
-    display: block;
-    margin: 0pt auto 0pt auto;
-    width: 855px;
-    color: #899834;
-    font-weight: bold;
-    font-size: 0.9em;
-}
-
-div.copyright div.brand {
-    float: left;
-    width: 400px;
-}
-div.copyright div.powered {
-    float: right;
-    width: auto;
-    position: relative;
-    font-size: 0.8em;
-}
-
-/* resizer */
-div.grippie {
-    background: url(../images/grippie.gif) 50% 50% no-repeat;
-    border: 1px dashed #899834;
-    border-top: none;
-    min-height: 10px ;
-    margin: -3px 0 5px 0;
-    padding: 0;
-}
-.grippie {
-    background-position: 50% 50%;
-}

File static/css/borland.css

File contents unchanged.

File static/css/bw.css

+.highlight  { background: #ffffff; }
+.highlight .c { font-style: italic } /* Comment */
+.highlight .err { border: 1px solid #FF0000 } /* Error */
+.highlight .k { font-weight: bold } /* Keyword */
+.highlight .cm { font-style: italic } /* Comment.Multiline */
+.highlight .c1 { font-style: italic } /* Comment.Single */
+.highlight .cs { font-style: italic } /* Comment.Special */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gh { font-weight: bold } /* Generic.Heading */
+.highlight .gp { font-weight: bold } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { font-weight: bold } /* Generic.Subheading */
+.highlight .kc { font-weight: bold } /* Keyword.Constant */
+.highlight .kd { font-weight: bold } /* Keyword.Declaration */
+.highlight .kr { font-weight: bold } /* Keyword.Reserved */
+.highlight .s { font-style: italic } /* Literal.String */
+.highlight .nc { font-weight: bold } /* Name.Class */
+.highlight .ni { font-weight: bold } /* Name.Entity */
+.highlight .ne { font-weight: bold } /* Name.Exception */
+.highlight .nn { font-weight: bold } /* Name.Namespace */
+.highlight .nt { font-weight: bold } /* Name.Tag */
+.highlight .ow { font-weight: bold } /* Operator.Word */
+.highlight .sb { font-style: italic } /* Literal.String.Backtick */
+.highlight .sc { font-style: italic } /* Literal.String.Char */
+.highlight .sd { font-style: italic } /* Literal.String.Doc */
+.highlight .s2 { font-style: italic } /* Literal.String.Double */
+.highlight .se { font-weight: bold; font-style: italic } /* Literal.String.Escape */
+.highlight .sh { font-style: italic } /* Literal.String.Heredoc */
+.highlight .si { font-weight: bold; font-style: italic } /* Literal.String.Interpol */
+.highlight .sx { font-style: italic } /* Literal.String.Other */
+.highlight .sr { font-style: italic } /* Literal.String.Regex */
+.highlight .s1 { font-style: italic } /* Literal.String.Single */
+.highlight .ss { font-style: italic } /* Literal.String.Symbol */

File static/css/colorful.css

File contents unchanged.

File static/css/default.css

File contents unchanged.

File static/css/emacs.css

File contents unchanged.

File static/css/friendly.css

File contents unchanged.

File static/css/fruity.css

File contents unchanged.

File static/css/ie.css

+body {text-align:center;}
+.container {text-align:left;}
+* html .column {overflow-x:hidden;}
+* html legend {margin:-18px -8px 16px 0;padding:0;}
+ol {margin-left:2em;}
+sup {vertical-align:text-top;}
+sub {vertical-align:text-bottom;}
+html>body p code {*white-space:normal;}
+hr {margin:-8px auto 11px;}

File static/css/manni.css

File contents unchanged.

File static/css/murphy.css

File contents unchanged.

File static/css/native.css

File contents unchanged.

File static/css/pastie.css

File contents unchanged.

File static/css/perldoc.css

+.highlight  { background: #eeeedd; }
+.highlight .c { color: #228B22 } /* Comment */
+.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
+.highlight .k { color: #8B008B; font-weight: bold } /* Keyword */
+.highlight .cm { color: #228B22 } /* Comment.Multiline */
+.highlight .cp { color: #1e889b } /* Comment.Preproc */
+.highlight .c1 { color: #228B22 } /* Comment.Single */
+.highlight .cs { color: #8B008B; font-weight: bold } /* Comment.Special */
+.highlight .gd { color: #aa0000 } /* Generic.Deleted */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #aa0000 } /* Generic.Error */
+.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.highlight .gi { color: #00aa00 } /* Generic.Inserted */
+.highlight .go { color: #888888 } /* Generic.Output */
+.highlight .gp { color: #555555 } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.highlight .gt { color: #aa0000 } /* Generic.Traceback */
+.highlight .kc { color: #8B008B; font-weight: bold } /* Keyword.Constant */
+.highlight .kd { color: #8B008B; font-weight: bold } /* Keyword.Declaration */
+.highlight .kp { color: #8B008B; font-weight: bold } /* Keyword.Pseudo */
+.highlight .kr { color: #8B008B; font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #a7a7a7; font-weight: bold } /* Keyword.Type */
+.highlight .m { color: #B452CD } /* Literal.Number */
+.highlight .s { color: #CD5555 } /* Literal.String */
+.highlight .na { color: #658b00 } /* Name.Attribute */
+.highlight .nb { color: #658b00 } /* Name.Builtin */
+.highlight .nc { color: #008b45; font-weight: bold } /* Name.Class */
+.highlight .no { color: #00688B } /* Name.Constant */
+.highlight .nd { color: #707a7c } /* Name.Decorator */
+.highlight .ne { color: #008b45; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #008b45 } /* Name.Function */
+.highlight .nn { color: #008b45; text-decoration: underline } /* Name.Namespace */
+.highlight .nt { color: #8B008B; font-weight: bold } /* Name.Tag */
+.highlight .nv { color: #00688B } /* Name.Variable */
+.highlight .ow { color: #8B008B } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mf { color: #B452CD } /* Literal.Number.Float */
+.highlight .mh { color: #B452CD } /* Literal.Number.Hex */
+.highlight .mi { color: #B452CD } /* Literal.Number.Integer */
+.highlight .mo { color: #B452CD } /* Literal.Number.Oct */
+.highlight .sb { color: #CD5555 } /* Literal.String.Backtick */
+.highlight .sc { color: #CD5555 } /* Literal.String.Char */
+.highlight .sd { color: #CD5555 } /* Literal.String.Doc */
+.highlight .s2 { color: #CD5555 } /* Literal.String.Double */
+.highlight .se { color: #CD5555 } /* Literal.String.Escape */
+.highlight .sh { color: #1c7e71; font-style: italic } /* Literal.String.Heredoc */
+.highlight .si { color: #CD5555 } /* Literal.String.Interpol */
+.highlight .sx { color: #cb6c20 } /* Literal.String.Other */
+.highlight .sr { color: #1c7e71 } /* Literal.String.Regex */
+.highlight .s1 { color: #CD5555 } /* Literal.String.Single */
+.highlight .ss { color: #CD5555 } /* Literal.String.Symbol */
+.highlight .bp { color: #658b00 } /* Name.Builtin.Pseudo */
+.highlight .vc { color: #00688B } /* Name.Variable.Class */
+.highlight .vg { color: #00688B } /* Name.Variable.Global */
+.highlight .vi { color: #00688B } /* Name.Variable.Instance */
+.highlight .il { color: #B452CD } /* Literal.Number.Integer.Long */

File static/css/print.css

Empty file added.

File static/css/screen.css

+html, body, div, span, object, iframe,h1, h2, h3, h4, h5, h6, p, blockquote, pre,a, abbr, acronym, address, code,del, dfn, em, img, q, dl, dt, dd, ol, ul, li,fieldset, form, label, legend,table, caption, tbody, tfoot, thead, tr, th, td {margin:0;padding:0;border:0;font-weight:inherit;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline;}
+body {line-height:1.5;}
+table {border-collapse:separate;border-spacing:0;}
+caption, th, td {text-align:left;font-weight:normal;}
+table, td, th {vertical-align:middle;}
+blockquote:before, blockquote:after, q:before, q:after {content:"";}
+blockquote, q {quotes:"" "";}
+a img {border:none;}
+body {font-family:Verdana,Arial,'Bitstream Vera Sans',Helvetica,sans-serif;color:#000;line-height:1;}
+html > body {font-size:12px;}
+h1, h2, h3, h4, h5, h6 {font-weight:normal;}
+h1 {font-size:3em;line-height:1;margin-bottom:0.5em;}
+h2 {font-size:2em;margin-bottom:0.75em;}
+h3 {font-size:1.5em;line-height:1;margin-bottom:1em;}
+h4 {font-size:1.2em;line-height:1.25;margin-bottom:1.25em;height:1.25em;}
+h5 {font-size:1em;font-weight:bold;margin-bottom:1.5em;}
+h6 {font-size:1em;font-weight:bold;}
+strong {font-weight:bold;}
+a:link {text-decoration:none;}
+a:visited {text-decoration:none;}
+a:hover {text-decoration:underline;}
+a:active {text-decoration:underline;}
+#nav li {font-size:1.2em;font-weight:bold;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;}
+#header a:hover, #header a:active {text-decoration:none;}
+form label {line-height:1em;}
+input[type='submit'], input[type='reset'], input[type='button'], button {font-size:1em;font-weight:bold;}
+#actions ul {list-style:none;}
+#actions form li label {font-weight:normal;font-size:1em;}
+#info {font-size:0.9em;font-weight:bold;}
+#dl {text-align:center;font-size:0.9em;}
+.highlight {font-family:sans-serif;}
+h2 a.root {text-decoration:none;font-size:85%;}
+table.sourcetable td {font-size:1.1em;}
+.linenos {font-weight:bold;}
+table.difftabular th {text-align:center;}
+table.difftabular th.linenos {text-align:center;}
+del, ins {text-decoration:none;}
+#bottoma ul {list-style:none;}
+#content table.revisionstable {font-family:sans-serif;}
+td.since {font-style:italic;}
+div.txt h3 {font-weight:bold;}
+#switch span {font-size:0.95em;font-weight:bold;}
+#switch span.active {text-decoration:none;}
+#switch span {text-decoration:none;cursor:hand;}
+div.textmate ol {list-style-type:decimal;}
+div.copyright {font-weight:bold;font-size:0.9em;}
+div.copyright div.powered {font-size:0.8em;}
+html, body {height:100%;}
+body {margin:0;padding:0;background:url(../images/bg.png) repeat-x;color:#000;height:100%;}
+* html {height:100%;}
+h1 {margin-bottom:0.5em;}
+h2 {margin-bottom:0.75em;}
+h3 {margin-bottom:1em;}
+h4 {height:1.25em;}
+h5 {margin-bottom:1.5em;}
+h1 img, h2 img, h3 img, h4 img, h5 img, h6 img {margin:0;}
+ul, ol, li, h1, h2, h3, h4, h5, p {margin:0 0 0.3em 0;padding:0;}
+ol, ul {list-style-image:none;list-style-position:outside;list-style-type:none;}
+.column {margin-top:0;padding-top:0;}
+* html .container {height:91%;}
+#header {display:block;width:100%;height:100px;padding:0px 0px 0px 30px;margin:0;z-index:0;}
+#header h1 {background:transparent url(../images/logo.gif) no-repeat;width:306px;height:80px;z-index:10;padding:0;margin:0;position:relative;float:left;top:10px;}
+#header h1 a {display:block;font-size:0px;width:306px;height:80px;text-indent:-700em;}
+#header #nav {display:block;width:auto;height:40px;float:left;margin-left:80px;z-index:30;position:relative;top:35px;}
+#nav li {display:block;float:left;margin-left:15px;}
+#nav li a {display:block;background:url(../images/ul.gif) no-repeat scroll left top;padding:0.5em 1em 0.5em 1em;}
+#nav li {background-image:url(../images/ur.gif);background-position:no-repeat scroll right top;float:left;}
+#nav .rounded-lr {background:url(../images/lr.gif) no-repeat bottom right;}
+#nav .rounded-ll {background:url(../images/ll.gif) no-repeat bottom left;}
+.content-wrapper {background:transparent url(../images/home-back.png) no-repeat 100px 0pt;width:100%;margin:0;padding:0;}
+#content {padding:25px 0pt;}
+#snippet-edit,#snippet,#revisions {padding-top:15px;}
+.hidden {display:none;}
+form, #snippet {width:90%;margin:0pt auto;}
+form li {padding-top:5px;clear:both;overflow:hidden;}
+form li * {vertical-align:middle;}
+form label {display:block;width:14em;height:12px;float:left;padding:0 1em 3px 0;}
+input[type='text'], select {width:174px;border:1px solid;margin:0;}
+textarea {width:99%;border:1px solid;}
+input[type='submit'], input[type='reset'], input[type='button'], button {border-width:0 1px 1px 0;padding:0.3em 0.5em 0.3em 0.5em;}
+#snippet h2 {padding-bottom:15px;}
+#snippet .lsnippet {font-size:1.3em;}
+#actions {padding:15px 0;vertical-align:middle;}
+#actions form {margin:0;width:auto;height:2em;float:right;position:relative;}
+#actions ul {position:relative;}
+#actions li {display:inline;margin-left:10px;border-left:1px solid;overflow:none;clear:none;padding-left:10px;}
+#actions li.first {border:0;}
+#actions form li label {display:inline;width:auto;float:none;}
+#info {border:1px solid;padding:0.5em 0.3em 0.5em 0.3em;}
+#info table {width:auto;padding:0;margin:10px 0;}
+#info th {padding:0;}
+#dl {font-size:0.9em;}
+.highlight {border:1px solid;}
+.highlight {display:block;clear:both;overflow:auto;position:relative;}
+tbody.wrap, pre.wrap, ol.wrap {width:800px;white-space:pre-wrap;white-space:-moz-pre-wrap !important;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;overflow:auto;}
+.linenos {border-right:1px solid;width:15px;}
+td.linenos {padding:0 5px;}
+.linenos .special {font-weight:bold;color:#000;}
+td.code {padding:0 8px;}
+table.difftabular th {width:2em;}
+table.difftabular th.linenos {border:0;}
+tr.tabularh th.linenos {padding-bottom:5px;}
+tbody.hidenos td.linenos,tbody.hidenos th.linenos {display:none;}
+tr.base td.c,th.diffm {border-right:1px solid;}
+th.diffp,tr.changed td.c {border-right:1px solid;}
+tr.changed td.first {border-top:1px solid;}
+tr.changed .last {border-bottom:1px solid;}
+tr.base td.first {border-top:1px solid;}
+tr.base .last {border-bottom:1px solid;}
+.btop {border-top:1px solid;}
+#bottoma {position:relative;width:100%;clear:both;padding:15pt 0;}
+#bottom form {width:auto;margin:0pt;}
+#bottoma ul {list-style:none;}
+#bottoma li {display:block;float:left;width:100px;margin-right:10px;padding:0;}
+#content #revisions {position:relative;width:90%;margin:0pt auto;}
+#content table.revisionstable {position:relative;width:600px;margin:0pt 0pt 45px 0pt;padding:0;border:1px solid;}
+#content table.revisionstable td {margin-left:20px;}
+#revisions form {margin:0pt;padding:0pt;}
+td.since {font-style:italic;}
+#revisions h2 {margin-bottom:15px;}
+#revisions h3, div.txt h2 {margin:15px 0 15px 0;padding:0.1em;}
+div.txt {width:90%;padding:15px 0;margin:0pt auto;}
+div.txt h3 {margin:15px 0 10px 0;padding:0.1em;}
+div.txt pre {border:1px solid;padding:0.3em;}
+div.txt pre.wrap {width:99%;}
+li.errors {padding:0.3em;border:1px solid;}
+ul.errors {padding:0.3em;border:1px solid;margin-bottom:15px;}
+#switch span {display:block;cursor:pointer;padding:0 0.5em 0 0.5em;float:left;}
+#switch {clear:both;margin-bottom:5px;margin-top:10px;width:auto;float:right;}
+#switch span {cursor:hand;}
+div.textmate {background:url(../images/bundle.png) no-repeat;min-height:64px;padding-left:70px;}
+#bottom {display:block;clear:both;width:100%;margin-top:15px;background:repeat-y;padding:0.5em 0 1em 0;height:9%;min-width:980px;}
+div.copyright {display:block;margin:0pt auto 0pt auto;width:855px;}
+div.copyright div.brand {float:left;width:400px;}
+div.copyright div.powered {float:right;width:auto;position:relative;}
+div.grippie {background:url(../images/grippie.gif) 50% 50% no-repeat;border:1px dashed;border-top:none;min-height:10px;margin:-3px 0 5px 0;padding:0;}
+.grippie {background-position:50% 50%;}
+body {background-color:#e5f1f4;color:#000;}
+h1, h2, h3, h4, h5, h6 {color:#111;}
+a:link {color:#2e8696;}
+a:visited {color:#2e8696;}
+#nav li {background-color:#899834;}
+#header a:link, #header a:visited {color:#fff;}
+form label {color:#333;}
+input[type='text'], select {border-color:#949494;}
+textarea {width:99%;border:#949494;}
+input[type='submit'], input[type='reset'], input[type='button'], button {background:#303030;color:#ccc;border-color:#899834;}
+#actions li {border-left-color:#666;}
+#info {background:#f7f7f0;border-color:#899834;}
+#info th {background:#f7f7f0;}
+#dl {color:#303030;}
+#dl a {color:#666;}
+.highlight {border-color:#899834;}
+.linenos {border-right-color:#899834;color:#666;}
+table.difftabular {background-color:#f7f7f0;color:#000;}
+table.difftabular th {background-color:#f7f7f0;}
+tr.tabularh th.linenos {color:#000;}
+tr.base {background-color:#ffd8d8;}
+tr.base td.c,th.diffm {border-right-color:#aa3333;}
+th.diffp,tr.changed td.c {border-right-color:#33aa33;}
+tr.changed {background-color:#ddf8cc;}
+tr.changed td.first {border-top-color:#33aa33;}
+tr.changed .last {border-bottom-color:#33aa33;}
+tr.base td.first {border-top-color:#aa3333;}
+tr.base .last {border-bottom-color:#aa3333;}
+del {background-color:#ff8888;color:#000;}
+ins {background-color:#99ff99;color:#000;}
+.btop {border-top-color:#aa3333;}
+#content table.revisionstable {border-color:1px solid;}
+#revisions h3, div.txt h2 {background-color:#303030;color:#fff;}
+div.txt h3 {background-color:#2e8696;}
+div.txt pre {border-color:1px solid;}
+li.errors {background-color:#ff9898;padding:0.3em;border-color:#ff0000;}
+ul.errors {border-color:#ff0000;}
+#switch span {color:#000;}
+#switch span.active {color:#666;}
+#bottom {background-color:#303030;}
+div.copyright {color:#899834;}
+div.grippie {border-color:#899834;}

File static/css/src/colors.css

+body {
+    background-color: #e5f1f4;
+    color: #000;
+}
+
+h1, h2, h3, h4, h5, h6 {color:#111;}
+
+
+a:link {
+    color: #2e8696;
+}
+a:visited {
+    color: #2e8696;
+}
+
+#nav li {
+    background-color: #899834;
+}
+
+#header a:link, #header a:visited {
+    color: #fff;
+}
+
+form label {
+    color: #333;
+}
+input[type='text'], select {
+    border-color: #949494;
+}
+
+textarea {
+    width: 99%;
+    border: #949494;
+}
+
+input[type='submit'], input[type='reset'], input[type='button'], button {
+    background: #303030;
+    color: #ccc;
+    border-color: #899834;
+}
+
+#actions li {
+    border-left-color:#666;
+}
+
+#info {
+    background: #f7f7f0;
+    border-color: #899834;
+}
+
+#info th {
+    background: #f7f7f0;
+}
+#dl {
+    color: #303030;
+}
+#dl a {
+    color: #666;
+}
+
+.highlight {
+    border-color:#899834;
+}
+
+
+.linenos {
+    border-right-color: #899834;
+    color: #666;
+}
+
+table.difftabular {
+    background-color: #f7f7f0;
+    color: #000;
+}
+
+table.difftabular th {
+    background-color: #f7f7f0;
+}
+
+
+tr.tabularh th.linenos {
+    color: #000;
+}
+
+tr.base {
+    background-color: #ffd8d8;
+}
+tr.base td.c,
+th.diffm {
+    border-right-color:#aa3333;
+}
+
+th.diffp,
+tr.changed td.c {
+    border-right-color: #33aa33;
+}
+
+tr.changed {
+    background-color: #ddf8cc;
+}
+
+tr.changed td.first {
+    border-top-color: #33aa33;
+}
+tr.changed .last {
+    border-bottom-color:#33aa33;
+}
+
+tr.base td.first {
+    border-top-color: #aa3333;
+}
+tr.base .last {
+    border-bottom-color:#aa3333;
+}
+
+
+
+del {
+    background-color: #ff8888;
+    color: #000;
+}
+
+ins {
+    background-color: #99ff99;
+    color: #000;
+}
+
+.btop {
+    border-top-color:#aa3333;
+}
+
+
+#content table.revisionstable {
+    border-color: 1px solid;
+}
+
+#revisions h3, div.txt h2 {
+    background-color: #303030;
+    color: #fff;
+}
+
+
+div.txt h3 {
+    background-color: #2e8696;
+}
+div.txt pre {
+    border-color: 1px solid;
+}
+
+li.errors {
+    background-color: #ff9898;
+    padding: 0.3em;
+    border-color:#ff0000;
+}
+ul.errors {
+    border-color: #ff0000;
+}
+
+#switch span {
+    color: #000;
+}
+oat: right;
+}
+#switch span.active {
+    color: #666;
+}
+
+
+/* bottom */
+
+#bottom {
+    background-color: #303030;
+}
+
+div.copyright {
+    color: #899834;
+}
+
+
+/* resizer */
+div.grippie {
+    border-color: #899834;
+}
+
+

File static/css/src/debug.css

+@import url("reset.css");  /* reset css */
+@import url("typography.css");  /* Typography */
+@import url("layout.css");  /* Typography */
+@import url("colors.css");  /* Colors */
+@import url("default.css");  /* Typography */
+
+
+/* class utilities */
+.hidden { display: none;}

File static/css/src/default.css

Empty file added.

File static/css/src/ie.css

+/* -------------------------------------------------------------- 
+   
+   ie.css
+   
+   Contains every hack for Internet Explorer,
+   so that our core files stay sweet and nimble.
+   
+-------------------------------------------------------------- */
+
+/* Make sure the layout is centered in IE5 */
+body { text-align: center; }
+.container { text-align: left; }
+
+/* Fixes IE margin bugs */
+* html .column { overflow-x: hidden; }
+
+
+/* Elements
+-------------------------------------------------------------- */
+
+/* Fixes incorrect styling of legend in IE6. */
+* html legend { margin:-18px -8px 16px 0; padding:0; }
+
+/* Fixes incorrect placement of ol numbers in IE6/7. */
+ol { margin-left:2em; }
+
+/* Fixes wrong line-height on sup/sub in IE. */
+sup { vertical-align: text-top; }
+sub { vertical-align: text-bottom; }
+
+/* Fixes IE7 missing wrapping of code elements. */
+html>body p code { *white-space: normal; } 
+
+/* IE 6&7 has problems with setting proper <hr> margins. */
+hr  { margin: -8px auto 11px; }

File static/css/src/layout.css

+
+
+html, body {
+    height: 100%;
+}
+
+body {
+    margin: 0;
+    padding: 0;
+    background: url(../../images/bg.png) repeat-x;
+    color: #000;
+    height: 100%;
+}
+
+
+* html {
+    height: 100%;
+}
+
+h1 {margin-bottom:0.5em;}
+h2 {margin-bottom:0.75em;}
+h3 {;margin-bottom:1em;}
+h4 {height:1.25em;}
+h5 {margin-bottom:1.5em;}
+h1 img, h2 img, h3 img, h4 img, h5 img, h6 img {margin:0;}
+
+ul, ol, li, h1, h2, h3, h4, h5, p {
+    margin: 0 0 0.3em 0;
+    padding: 0;
+}
+
+ol, ul {
+    list-style-image: none;
+    list-style-position: outside;
+    list-style-type: none;
+}
+
+.column {
+    margin-top: 0;
+    padding-top: 0;
+}
+
+
+* html .container {
+    height: 91%;
+}
+
+/* header */
+#header {
+    display: block;
+    width: 100%;
+    height: 100px;
+    padding: 0px 0px 0px 30px;
+    margin: 0;
+    z-index: 0
+}
+#header h1 {
+    background: transparent url(../../images/logo.gif) no-repeat;
+    width: 306px;
+    height: 80px;
+    z-index: 10;
+    padding: 0;
+    margin: 0;
+    position: relative;
+    float: left;
+    top: 10px;
+}
+#header h1 a {
+    display: block;
+    font-size: 0px;
+    width: 306px;
+    height: 80px;
+    text-indent: -700em;
+}
+
+#header #nav {
+    display: block;
+    width: auto;
+    height: 40px;
+    float: left;
+    margin-left: 80px;
+    z-index: 30;
+    position: relative;
+    top: 35px;
+}
+#nav li {
+    display: block;
+    float: left;
+    margin-left: 15px;
+}
+#nav li a {
+    display: block;
+    background: url(../../images/ul.gif) no-repeat scroll left top;
+    padding: 0.5em 1em 0.5em 1em;
+}
+#nav li {
+    background-image: url(../../images/ur.gif);
+    background-position:  no-repeat scroll right top;
+    float: left
+}
+#nav .rounded-lr {
+    background: url(../../images/lr.gif) no-repeat bottom right;
+}
+#nav .rounded-ll {
+    background: url(../../images/ll.gif) no-repeat bottom left;
+}
+
+/* content */
+.content-wrapper {
+    background: transparent url(../../images/home-back.png) no-repeat 100px 0pt;
+    width: 100%;
+    margin: 0;
+    padding: 0;
+}
+#content {
+    padding: 25px 0pt;
+}
+
+/* paste form */
+#snippet-edit,#snippet,#revisions {
+    padding-top: 15px;
+}
+
+.hidden { display: none; }
+
+form, #snippet {
+    width: 90%;
+    margin: 0pt auto;
+}
+form li {
+    padding-top: 5px;
+    clear: both;
+    overflow: hidden;
+}
+form li * {
+    vertical-align: middle
+}
+form label {
+    display: block;
+    width: 14em;
+    height: 12px;
+    float: left;
+    padding: 0 1em 3px 0;
+}
+input[type='text'], select {
+    width: 174px;
+    border: 1px solid;
+    margin: 0;
+}
+
+textarea {
+    width: 99%;
+    border: 1px solid;
+}
+
+input[type='submit'], input[type='reset'], input[type='button'], button {
+    border-width: 0 1px 1px 0;
+    padding: 0.3em 0.5em 0.3em 0.5em;
+}
+
+
+/* paste detail */
+#snippet h2 {
+    padding-bottom: 15px;
+}
+#snippet .lsnippet {
+    font-size: 1.3em;
+}
+#actions {
+    padding: 15px 0;
+    vertical-align: middle;
+}
+#actions form {
+    margin: 0;
+    width: auto;
+    height: 2em;
+    float: right;
+    position: relative;
+}
+#actions ul {
+    position: relative;
+}
+#actions li {
+    display: inline;
+    margin-left: 10px;
+    border-left: 1px solid;
+    overflow: none;
+    clear: none;
+    padding-left: 10px;
+}
+#actions li.first {
+    border: 0;
+}
+#actions form li label {
+    display: inline;
+    width: auto;
+    float: none;
+}
+
+#info {
+    border: 1px solid;
+    padding: 0.5em 0.3em 0.5em 0.3em;
+}
+#info table {
+    width: auto;
+    padding: 0;
+    margin: 10px 0;
+}
+#info th {
+    padding: 0;
+}
+#dl {
+    font-size: 0.9em;
+}
+
+
+
+.highlight {
+    border: 1px solid;
+}
+.highlight {
+    display: block;
+    clear: both;
+    overflow: auto;
+    position: relative;
+}
+
+
+
+tbody.wrap, pre.wrap, ol.wrap {
+    width: 800px;
+    white-space: pre-wrap; /* css-3 */
+    white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */
+    white-space: -pre-wrap; /* Opera 4-6 */
+    white-space: -o-pre-wrap; /* Opera 7 */
+    word-wrap: break-word; /* Internet Explorer 5.5+ */
+    overflow: auto;
+}
+
+.linenos {
+    border-right: 1px solid;
+    width: 15px;
+}
+
+
+td.linenos { 
+    padding: 0 5px; 
+}
+ 
+.linenos .special { 
+    font-weight: bold; color: #000;
+    }
+ 
+td.code {
+    padding: 0 8px;
+}
+
+
+
+table.difftabular th {
+    width: 2em;
+}
+
+table.difftabular th.linenos {
+    border: 0;
+}
+
+tr.tabularh th.linenos {
+    padding-bottom: 5px;
+}
+
+tbody.hidenos td.linenos,
+tbody.hidenos th.linenos {
+    display: none;
+}
+
+tr.base td.c,
+th.diffm {
+    border-right: 1px solid;
+}
+
+th.diffp,
+tr.changed td.c {
+    border-right: 1px solid;
+}
+
+tr.changed td.first {
+    border-top: 1px solid;
+}
+tr.changed .last {
+    border-bottom: 1px solid;
+}
+
+tr.base td.first {
+    border-top: 1px solid;
+}
+tr.base .last {
+    border-bottom: 1px solid;
+}
+
+
+
+.btop {
+    border-top: 1px solid;
+}
+
+
+#bottoma {
+    position: relative;
+    width: 100%;
+    clear: both;
+    padding: 15pt 0;
+}
+#bottom form {
+    width: auto;
+    margin: 0pt;
+}
+#bottoma ul {
+    list-style: none;
+}
+#bottoma li {
+    display: block;
+    float: left;
+    width: 100px;
+    margin-right: 10px;
+    padding: 0;
+}
+
+
+#content #revisions {
+    position: relative;
+    width: 90%;
+    margin: 0pt auto;
+}
+#content table.revisionstable {
+    position: relative;
+    width: 600px;
+    margin: 0pt 0pt 45px 0pt;
+    padding: 0;
+    border: 1px solid;
+}
+#content table.revisionstable td {
+    margin-left: 20px;
+}
+#revisions form {
+    margin: 0pt;
+    padding: 0pt;
+}
+td.since {
+    font-style: italic;
+}
+#revisions h2 {
+    margin-bottom: 15px;
+}
+#revisions h3, div.txt h2 {
+    margin: 15px 0 15px 0;
+    padding: 0.1em;
+}
+
+div.txt {
+    width: 90%;
+    padding: 15px 0;
+    margin: 0pt auto;
+}
+div.txt h3 {
+    margin: 15px 0 10px 0;
+    padding: 0.1em;
+}
+div.txt pre {
+    border: 1px solid;
+    padding: 0.3em;
+}
+div.txt pre.wrap {
+    width: 99%;
+}
+
+
+li.errors {
+    padding: 0.3em;
+    border: 1px solid;
+}
+ul.errors {
+    padding: 0.3em;
+    border: 1px solid;
+    margin-bottom: 15px;
+}
+
+#switch span {
+    display: block;
+    cursor: pointer;
+    padding: 0 0.5em 0 0.5em;
+    float: left;
+}
+#switch {
+    clear: both;
+    margin-bottom: 5px;
+    margin-top: 10px;
+    width: auto;
+    float: right;
+}
+
+#switch span {
+    cursor: hand;
+}
+
+div.textmate {
+    background: url(../../images/bundle.png) no-repeat;
+    min-height: 64px;
+    padding-left: 70px;
+}
+
+
+/* bottom */
+
+#bottom {
+    display: block;
+    clear: both;
+    width: 100%;
+    margin-top: 15px;
+    background: repeat-y;
+    padding: 0.5em 0 1em 0;
+    height: 9%;
+    min-width: 980px;
+}
+div.copyright {
+    display: block;
+    margin: 0pt auto 0pt auto;
+    width: 855px;
+}
+
+div.copyright div.brand {
+    float: left;
+    width: 400px;
+}
+div.copyright div.powered {
+    float: right;
+    width: auto;
+    position: relative;
+}
+
+/* resizer */
+div.grippie {
+    background: url(../../images/grippie.gif) 50% 50% no-repeat;
+    border: 1px dashed;
+    border-top: none;
+    min-height: 10px ;
+    margin: -3px 0 5px 0;
+    padding: 0;
+}
+.grippie {
+    background-position: 50% 50%;
+}

File static/css/src/reset.css

+/* -------------------------------------------------------------- 
+  
+   reset.css
+   * Resets default browser CSS.
+   
+-------------------------------------------------------------- */
+
+html, body, div, span, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, code,
+del, dfn, em, img, q, dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body { 
+  line-height: 1.5; 
+}
+
+/* Tables still need 'cellspacing="0"' in the markup. */
+table { border-collapse: separate; border-spacing: 0; }
+caption, th, td { text-align: left; font-weight: normal; }
+table, td, th { vertical-align: middle; }
+
+/* Remove possible quote marks (") from <q>, <blockquote>. */
+blockquote:before, blockquote:after, q:before, q:after { content: ""; }
+blockquote, q { quotes: "" ""; }
+
+/* Remove annoying border on linked images. */
+a img { border: none; }

File static/css/src/typography.css

+body {
+    font-family: Verdana,Arial,'Bitstream Vera Sans',Helvetica,sans-serif;
+    color: #000;
+    line-height: 1;
+}
+
+html > body {
+    font-size: 12px;
+}
+
+h1, h2, h3, h4, h5, h6 {font-weight:normal;}
+h1 {font-size:3em;line-height:1;margin-bottom:0.5em;}
+h2 {font-size:2em;margin-bottom:0.75em;}
+h3 {font-size:1.5em;line-height:1;margin-bottom:1em;}
+h4 {font-size:1.2em;line-height:1.25;margin-bottom:1.25em;height:1.25em;}
+h5 {font-size:1em;font-weight:bold;margin-bottom:1.5em;}
+h6 {font-size:1em;font-weight:bold;}
+
+
+strong {
+    font-weight: bold;
+}
+a:link {
+    text-decoration: none;
+}
+a:visited {
+    text-decoration: none;
+}
+a:hover {
+    text-decoration: underline;
+}
+a:active {
+    text-decoration: underline;
+}
+
+#nav li {
+    font-size: 1.2em;
+    font-weight: bold;
+    font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif;
+}
+
+#header a:hover, #header a:active {
+    text-decoration: none;
+}
+
+form label {
+    line-height: 1em;
+}
+
+input[type='submit'], input[type='reset'], input[type='button'], button {
+    font-size: 1em;
+    font-weight: bold;
+}
+
+#actions ul {
+    list-style: none;
+}
+
+
+#actions form li label {
+    font-weight: normal;