Changeset - 01d0f363f36d
[Not reviewed]
default
0 2 4
Marcin Kuzminski - 16 years ago 2010-04-25 01:18:38
marcin@python-works.com
added pygments webhelper
6 files changed with 598 insertions and 4 deletions:
0 comments (0 inline, 0 general)
pylons_app/lib/helpers.py
Show inline comments
 
"""Helper functions
 

	
 
Consists of functions to typically be used within templates, but also
 
available to Controllers. This module is available to both as 'h'.
 
"""
 
from pylons import url
 
from pylons.i18n.translation import _, ungettext
 
from webhelpers.html import (literal, HTML, escape)
 
from webhelpers.html.builder import make_tag
 
from webhelpers.html.tools import (auto_link, button_to, highlight, js_obfuscate
 
                                   , mail_to, strip_links, strip_tags, tag_re)
 
from webhelpers.html.tags import (auto_discovery_link, checkbox, css_classes,
 
                                  end_form, file, form, hidden, image,
 
                                  javascript_link, link_to, link_to_if,
 
                                  link_to_unless, ol, required_legend,
 
                                  select, stylesheet_link,
 
                                  submit, text, password, textarea, title,
 
                                  ul, xml_declaration)
 
from webhelpers.text import (chop_at, collapse, convert_accented_entities,
 
                             convert_misc_entities, lchop, plural, rchop,
 
                             remove_formatting, replace_whitespace, urlify)
 

	
 
from webhelpers.pylonslib import Flash as _Flash
 
from webhelpers.pylonslib.secure_form import secure_form
 

	
 
from pygments import highlight
 
from pygments.formatters import HtmlFormatter
 
from pygments.lexers import guess_lexer
 
from pygments.lexers import get_lexer_by_name
 

	
 
#Custom helper here :)
 
class _Link(object):
 
    '''
 
    Make a url based on label and url with help of url_for
 
    @param label:name of link    if not defined url is used
 
    @param url: the url for link
 
    '''
 

	
 
    def __call__(self, label='', *url_, **urlargs):
 
        if label is None or '':
 
            label = url
 
        link_fn = link_to(label, url(*url_, **urlargs))
 
        return link_fn
 

	
 

	
 
class _GetError(object):
 

	
 
    def __call__(self, field_name, form_errors):
 
        tmpl = """<span class="error_msg">%s</span>"""
 
        if form_errors and form_errors.has_key(field_name):
 
            return literal(tmpl % form_errors.get(field_name))
 

	
 
class _FileSizeFormat():
 
class _FileSizeFormat(object):
 
    """
 
    Formats the value like a 'human-readable' file size (i.e. 13 KB, 4.1 MB,
 
    102 bytes, etc).
 
    """
 
    def __call__(self, bytes):
 
        try:
 
            bytes = float(bytes)
 
        except TypeError:
 
            return u"0 bytes"
 
    
 
        if bytes < 1024:
 
            return ungettext("%(size)d byte", "%(size)d bytes", bytes) % {'size': bytes}
 
        if bytes < 1024 * 1024:
 
            return _("%.1f KB") % (bytes / 1024)
 
        if bytes < 1024 * 1024 * 1024:
 
            return _("%.1f MB") % (bytes / (1024 * 1024))
 
        return _("%.1f GB") % (bytes / (1024 * 1024 * 1024))
 

	
 

	
 

	
 
def pygmentize(code, **kwargs):
 
    '''
 
    Filter for chunks of html to replace code tags with pygmented code
 
    '''
 
    return literal(highlight(code, guess_lexer(code), HtmlFormatter(**kwargs)))
 

	
 

	
 

	
 
filesizeformat = _FileSizeFormat()
 
link = _Link()
 
flash = _Flash()
 
get_error = _GetError()
pylons_app/public/css/pygments.css
Show inline comments
 
new file 100644
 
div.codeblock {
 
    overflow: auto;
 
    padding: 0px;
 
    border: 1px solid #ccc;
 
    background: #f8f8f8;
 
    font-size: 100%;
 
    line-height: 100%;
 
    /* new */
 
    line-height: 125%;
 
}
 

	
 
.code-highlight {
 
    padding: 0px;
 
    margin-top: 5px;
 
    margin-bottom: 5px;
 
    border-left: 2px solid #ccc;
 
}
 
.code-highlight pre, .linenodiv pre { 
 
	padding: 5px;
 
    margin: 0;
 
}
 
.linenos a { text-decoration: none; }
 

	
 

	
 
.code { display: block; }
 
.code-highlight .hll { background-color: #ffffcc }
 
.code-highlight .c { color: #408080; font-style: italic } /* Comment */
 
.code-highlight .err { border: 1px solid #FF0000 } /* Error */
 
.code-highlight .k { color: #008000; font-weight: bold } /* Keyword */
 
.code-highlight .o { color: #666666 } /* Operator */
 
.code-highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
 
.code-highlight .cp { color: #BC7A00 } /* Comment.Preproc */
 
.code-highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
 
.code-highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
 
.code-highlight .gd { color: #A00000 } /* Generic.Deleted */
 
.code-highlight .ge { font-style: italic } /* Generic.Emph */
 
.code-highlight .gr { color: #FF0000 } /* Generic.Error */
 
.code-highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
 
.code-highlight .gi { color: #00A000 } /* Generic.Inserted */
 
.code-highlight .go { color: #808080 } /* Generic.Output */
 
.code-highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
 
.code-highlight .gs { font-weight: bold } /* Generic.Strong */
 
.code-highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
 
.code-highlight .gt { color: #0040D0 } /* Generic.Traceback */
 
.code-highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
 
.code-highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
 
.code-highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
 
.code-highlight .kp { color: #008000 } /* Keyword.Pseudo */
 
.code-highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
 
.code-highlight .kt { color: #B00040 } /* Keyword.Type */
 
.code-highlight .m { color: #666666 } /* Literal.Number */
 
.code-highlight .s { color: #BA2121 } /* Literal.String */
 
.code-highlight .na { color: #7D9029 } /* Name.Attribute */
 
.code-highlight .nb { color: #008000 } /* Name.Builtin */
 
.code-highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
 
.code-highlight .no { color: #880000 } /* Name.Constant */
 
.code-highlight .nd { color: #AA22FF } /* Name.Decorator */
 
.code-highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
 
.code-highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
 
.code-highlight .nf { color: #0000FF } /* Name.Function */
 
.code-highlight .nl { color: #A0A000 } /* Name.Label */
 
.code-highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
 
.code-highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
 
.code-highlight .nv { color: #19177C } /* Name.Variable */
 
.code-highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
 
.code-highlight .w { color: #bbbbbb } /* Text.Whitespace */
 
.code-highlight .mf { color: #666666 } /* Literal.Number.Float */
 
.code-highlight .mh { color: #666666 } /* Literal.Number.Hex */
 
.code-highlight .mi { color: #666666 } /* Literal.Number.Integer */
 
.code-highlight .mo { color: #666666 } /* Literal.Number.Oct */
 
.code-highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
 
.code-highlight .sc { color: #BA2121 } /* Literal.String.Char */
 
.code-highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
 
.code-highlight .s2 { color: #BA2121 } /* Literal.String.Double */
 
.code-highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
 
.code-highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
 
.code-highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
 
.code-highlight .sx { color: #008000 } /* Literal.String.Other */
 
.code-highlight .sr { color: #BB6688 } /* Literal.String.Regex */
 
.code-highlight .s1 { color: #BA2121 } /* Literal.String.Single */
 
.code-highlight .ss { color: #19177C } /* Literal.String.Symbol */
 
.code-highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
 
.code-highlight .vc { color: #19177C } /* Name.Variable.Class */
 
.code-highlight .vg { color: #19177C } /* Name.Variable.Global */
 
.code-highlight .vi { color: #19177C } /* Name.Variable.Instance */
 
.code-highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
pylons_app/public/css/style-monoblue_custom.css
Show inline comments
 
new file 100644
 
/*** Initial Settings ***/
 
* {
 
  margin: 0;
 
  padding: 0;
 
  font-weight: normal;
 
  font-style: normal;
 
}
 

	
 
html {
 
  font-size: 100%;
 
  font-family: sans-serif;
 
}
 

	
 
body {
 
  font-size: 77%;
 
  margin: 15px 50px;
 
  background: #4B4B4C;
 
}
 

	
 
a {
 
  color:#0000cc;
 
  text-decoration: none;
 
}
 
/*** end of Initial Settings ***/
 

	
 

	
 
/** common settings **/
 
div#container {
 
  background: #FFFFFF;
 
  position: relative;
 
  color: #666;
 
}
 

	
 
div.page-header {
 
  padding: 50px 20px 0;
 
  background: #006699 top left repeat-x;
 
  position: relative;
 
}
 
  div.page-header h1 {
 
    margin: 10px 0 30px;
 
    font-size: 1.8em;
 
    font-weight: bold;
 
    font-family: osaka,'MS P Gothic', Georgia, serif;
 
    letter-spacing: 1px;
 
    color: #DDD;
 
  }
 
  div.page-header h1 a {
 
    font-weight: bold;
 
    color: #FFF;
 
  }
 
  div.page-header a {
 
    text-decoration: none;
 
  }
 

	
 
  div.page-header form {
 
    position: absolute;
 
    margin-bottom: 2px;
 
    bottom: 0;
 
    right: 20px;
 
  }
 
  div.page-header form label {
 
    color: #DDD;
 
  }
 
  div.page-header form input {
 
    padding: 2px;
 
    border: solid 1px #DDD;
 
  }
 
  div.page-header form dl {
 
    overflow: hidden;
 
  }
 
  div.page-header form dl dt {
 
    font-size: 1.2em;
 
  }
 
  div.page-header form dl dt,
 
  div.page-header form dl dd {
 
    margin: 0 0 0 5px;
 
    float: left;
 
    height: 24px;
 
    line-height: 20px;
 
  }
 

	
 
  ul.page-nav {
 
    margin: 10px 0 0 0;
 
    list-style-type: none;
 
    overflow: hidden;
 
    width: 800px;
 
  }
 
    ul.page-nav li {
 
      margin: 0 2px 0 0;
 
      float: left;
 
      width: 80px;
 
      height: 24px;
 
      font-size: 1.1em;
 
      line-height: 24px;
 
      text-align: center;
 
    }
 
    ul.page-nav li.current {
 
      background: #FFF;
 
    }
 
    ul.page-nav li a {
 
      height: 24px;
 
      color: #666;
 
      background: #DDD;
 
      display: block;
 
      text-decoration: none;
 
    }
 
    ul.page-nav li a:hover {
 
      color:#333;
 
      background: #FFF;
 
    }
 

	
 
ul.submenu {
 
  margin: 10px 0 -10px 20px;
 
  list-style-type: none;
 
}
 
ul.submenu li {
 
  margin: 0 10px 0 0;
 
  font-size: 1.2em;
 
  display: inline;
 
}
 

	
 
h2 {
 
  margin: 20px 0 10px;
 
  height: 30px;
 
  line-height: 30px;
 
  text-indent: 20px;
 
  background: #FFF;
 
  font-size: 1.2em;
 
  border-top: dotted 1px #D5E1E6;
 
  font-weight: bold;
 
}
 
h2.no-link {
 
  color:#006699;
 
}
 
h2.no-border {
 
  color: #FFF;
 
  background: #006699;
 
  border: 0;
 
}
 
h2 a {
 
  font-weight:bold;
 
  color:#006699;
 
}
 

	
 
div.page-path {
 
  text-align: right;
 
  padding: 20px 30px 10px 0;
 
  border:solid #d9d8d1;
 
  border-width:0px 0px 1px;
 
  font-size: 1.2em;
 
}
 

	
 
div.page-footer {
 
  margin: 50px 0 0;
 
  position: relative;
 
}
 
  div.page-footer p {
 
    position: relative;
 
    left: 20px;
 
    bottom: 5px;
 
    font-size: 1.2em;
 
  }
 

	
 
  ul.rss-logo {
 
    position: absolute;
 
    top: -10px;
 
    right: 20px;
 
    height: 20px;
 
    list-style-type: none;
 
  }
 
  ul.rss-logo li {
 
    display: inline;
 
  }
 
  ul.rss-logo li a {
 
    padding: 3px 6px;
 
    line-height: 10px;
 
    border:1px solid;
 
    border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
 
    color:#ffffff;
 
    background-color:#ff6600;
 
    font-weight:bold;
 
    font-family:sans-serif;
 
    font-size:10px;
 
    text-align:center;
 
    text-decoration:none;
 
  }
 
  div.rss-logo li a:hover {
 
    background-color:#ee5500;
 
  }
 

	
 
p.normal {
 
  margin: 20px 0 20px 30px;
 
  font-size: 1.2em;
 
}
 

	
 
table {
 
  margin: 10px 0 0 20px;
 
  width: 95%;
 
  border-collapse: collapse;
 
}
 
table tr td {
 
  font-size: 1.1em;
 
}
 
table tr td.nowrap {
 
  white-space: nowrap;
 
}
 
/*
 
table tr.parity0:hover,
 
table tr.parity1:hover {
 
  background: #D5E1E6;
 
}
 
*/
 
table tr.parity0 {
 
  background: #F1F6F7;
 
}
 
table tr.parity1 {
 
  background: #FFFFFF;
 
}
 
table tr td {
 
  padding: 5px 5px;
 
}
 
table.annotated tr td {
 
  padding: 0px 5px;
 
}
 

	
 
span.logtags span {
 
  padding: 2px 6px;
 
  font-weight: normal;
 
  font-size: 11px;
 
  border: 1px solid;
 
  background-color: #ffaaff;
 
  border-color: #ffccff #ff00ee #ff00ee #ffccff;
 
}
 
span.logtags span.tagtag {
 
  background-color: #ffffaa;
 
  border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
 
}
 
span.logtags span.branchtag {
 
  background-color: #aaffaa;
 
  border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
 
}
 
span.logtags span.inbranchtag {
 
  background-color: #d5dde6;
 
  border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
 
}
 

	
 
div.diff pre {
 
  margin: 10px 0 0 0;
 
}
 
div.diff pre span {
 
  font-family: monospace;
 
  white-space: pre;
 
  font-size: 1.2em;
 
  padding: 3px 0;
 
}
 
td.source {
 
  white-space: pre;
 
  font-family: monospace;
 
  margin: 10px 30px 0;
 
  font-size: 1.2em;
 
  font-family: monospace;
 
}
 
  div.source div.parity0,
 
  div.source div.parity1 {
 
    padding: 1px;
 
    font-size: 1.2em;
 
  }
 
  div.source div.parity0 {
 
    background: #F1F6F7;
 
  }
 
  div.source div.parity1 {
 
    background: #FFFFFF;
 
  }
 
div.parity0:hover,
 
div.parity1:hover {
 
  background: #D5E1E6;
 
}
 
.linenr {
 
  color: #999;
 
  text-align: right;
 
}
 
.lineno {
 
  text-align: right;
 
}
 
.lineno a {
 
  color: #999;
 
}
 
td.linenr {
 
  width: 60px;
 
}
 

	
 
div#powered-by {
 
  position: absolute;
 
  width: 75px;
 
  top: 15px;
 
  right: 20px;
 
  font-size: 1.2em;
 
}
 
div#powered-by a {
 
  color: #EEE;
 
  text-decoration: none;
 
}
 
div#powered-by a:hover {
 
  text-decoration: underline;
 
}
 
/*
 
div#monoblue-corner-top-left {
 
  position: absolute;
 
  top: 0;
 
  left: 0;
 
  width: 10px;
 
  height: 10px;
 
  background: url(./monoblue-corner.png) top left no-repeat !important;
 
  background: none;
 
}
 
div#monoblue-corner-top-right {
 
  position: absolute;
 
  top: 0;
 
  right: 0;
 
  width: 10px;
 
  height: 10px;
 
  background: url(./monoblue-corner.png) top right no-repeat !important;
 
  background: none;
 
}
 
div#monoblue-corner-bottom-left {
 
  position: absolute;
 
  bottom: 0;
 
  left: 0;
 
  width: 10px;
 
  height: 10px;
 
  background: url(./monoblue-corner.png) bottom left no-repeat !important;
 
  background: none;
 
}
 
div#monoblue-corner-bottom-right {
 
  position: absolute;
 
  bottom: 0;
 
  right: 0;
 
  width: 10px;
 
  height: 10px;
 
  background: url(./monoblue-corner.png) bottom right no-repeat !important;
 
  background: none;
 
}
 
*/
 
/** end of common settings **/
 

	
 
/** summary **/
 
dl.overview {
 
  margin: 0 0 0 30px;
 
  font-size: 1.1em;
 
  overflow: hidden;
 
}
 
  dl.overview dt,
 
  dl.overview dd {
 
    margin: 5px 0;
 
    float: left;
 
  }
 
  dl.overview dt {
 
    clear: left;
 
    font-weight: bold;
 
    width: 150px;
 
  }
 
/** end of summary **/
 

	
 
/** chagelog **/
 
h3.changelog {
 
  margin: 20px 0 5px 30px;
 
  padding: 0 0 2px;
 
  font-size: 1.4em;
 
  border-bottom: dotted 1px #D5E1E6;
 
}
 
ul.changelog-entry {
 
  margin: 0 0 10px 30px;
 
  list-style-type: none;
 
  position: relative;
 
}
 
ul.changelog-entry li span.revdate {
 
  font-size: 1.1em;
 
}
 
ul.changelog-entry li.age {
 
  position: absolute;
 
  top: -25px;
 
  right: 10px;
 
  font-size: 1.4em;
 
  color: #CCC;
 
  font-weight: bold;
 
  font-style: italic;
 
}
 
ul.changelog-entry li span.name {
 
  font-size: 1.2em;
 
  font-weight: bold;
 
}
 
ul.changelog-entry li.description {
 
  margin: 10px 0 0;
 
  font-size: 1.1em;
 
}
 
/** end of changelog **/
 

	
 
/** file **/
 
p.files {
 
  margin: 0 0 0 20px;
 
  font-size: 2.0em;
 
  font-weight: bold;
 
}
 
/** end of file **/
 

	
 
/** changeset **/
 
h3.changeset {
 
  margin: 20px 0 5px 20px;
 
  padding: 0 0 2px;
 
  font-size: 1.6em;
 
  border-bottom: dotted 1px #D5E1E6;
 
}
 
p.changeset-age {
 
  position: relative;
 
}
 
p.changeset-age span {
 
  position: absolute;
 
  top: -25px;
 
  right: 10px;
 
  font-size: 1.4em;
 
  color: #CCC;
 
  font-weight: bold;
 
  font-style: italic;
 
}
 
p.description {
 
  margin: 10px 30px 0 30px;
 
  padding: 10px;
 
  border: solid 1px #CCC;
 
  font-size: 1.2em;
 
}
 
/** end of changeset **/
 

	
 
/** canvas **/
 
div#wrapper {
 
	position: relative;
 
    font-size: 1.2em;
 
}
 

	
 
canvas {
 
	position: absolute;
 
	z-index: 5;
 
	top: -0.7em;
 
}
 

	
 
ul#nodebgs li.parity0 {
 
    background: #F1F6F7;
 
}
 

	
 
ul#nodebgs li.parity1 {
 
    background: #FFFFFF;
 
}
 

	
 
ul#graphnodes {
 
	position: absolute;
 
	z-index: 10;
 
	top: 7px;
 
	list-style: none inside none;
 
}
 

	
 
ul#nodebgs {
 
	list-style: none inside none;
 
}
 

	
 
ul#graphnodes li, ul#nodebgs li {
 
	height: 39px;
 
}
 

	
 
ul#graphnodes li .info {
 
	display: block;
 
	position: relative;
 
}
 
/** end of canvas **/
 

	
 
.browser-file {
 
	background-image:url("/images/file.png");
 
	background-repeat:no-repeat;
 
	display:block;
 
	height:16px;
 
	padding-left:20px;
 
	padding-top:5px;
 
	text-align:left;
 
}
 
.browser-dir {
 
	background-image:url("/images/folder.png");
 
	background-repeat:no-repeat;
 
	display:block;
 
	height:16px;
 
	padding-left:20px;
 
	padding-top:5px;
 
	text-align:left;
 
}
 
\ No newline at end of file
pylons_app/public/images/file.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/public/images/folder.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
pylons_app/templates/base/base.html
Show inline comments
 
## -*- coding: utf-8 -*-
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml">
 
<head>
 
    <link rel="icon" href="${c.staticurl}hgicon.png" type="image/png" />
 
    <meta name="robots" content="index, nofollow"/>
 
    <link rel="stylesheet" href="${c.staticurl}style-monoblue.css" type="text/css" />
 
       <title>${next.title()}</title>
 
    <title>${next.title()}</title>
 
    ${self.css()}
 
    ${self.js()}
 
</head>
 

	
 
<body>
 
<div id="container">
 
    <div class="page-header">
 
        <h1>
 
            ${next.breadcrumbs()}
 
        </h1>
 
        <ul class="page-nav">
 
            ${self.page_nav()}
 
        </ul>
 
@@ -74,17 +74,19 @@
 
            %if current=='graph':
 
            	class='current' 
 
            %endif
 
            >${h.link_to_unless(current=='graph',_('graph'),h.url('graph_home',repo_name=c.repo_name))}</li>
 
            <li 
 
            %if current=='files':
 
            	class='current' 
 
            %endif
 
            >${h.link_to_unless(current=='files',_('files'),h.url('files_home',repo_name=c.repo_name))}</li>
 
        </ul>
 
</%def>
 

	
 

	
 
<%def name="css()">
 
<link rel="stylesheet" href="/css/style-monoblue_custom.css" type="text/css" />
 
</%def>
 

	
 
<%def name="js()">
 
<script type="text/javascript" src="/js/yui/utilities/utilities.js"></script>
 
</%def>
 
\ No newline at end of file
0 comments (0 inline, 0 general)