@@ -715,100 +715,100 @@ def repo_link(groups_and_repos):
Makes a breadcrumbs link to repo within a group
joins » on each group to create a fancy link
ex::
group >> subgroup >> repo
:param groups_and_repos:
"""
groups, repo_name = groups_and_repos
if not groups:
return repo_name
else:
def make_link(group):
return link_to(group.name, url('repos_group_home',
group_name=group.group_name))
return literal(' » '.join(map(make_link, groups)) + \
" » " + repo_name)
def fancy_file_stats(stats):
Displays a fancy two colored bar for number of added/deleted
lines of code on file
:param stats: two element list of added/deleted lines of code
a, d, t = stats[0], stats[1], stats[0] + stats[1]
width = 100
unit = float(width) / (t or 1)
# needs > 9% of width to be visible or 0 to be hidden
a_p = max(9, unit * a) if a > 0 else 0
d_p = max(9, unit * d) if d > 0 else 0
p_sum = a_p + d_p
if p_sum > width:
#adjust the percentage to be == 100% since we adjusted to 9
if a_p > d_p:
a_p = a_p - (p_sum - width)
d_p = d_p - (p_sum - width)
a_v = a if a > 0 else ''
d_v = d if d > 0 else ''
def cgen(l_type):
mapping = {'tr': 'top-right-rounded-corner',
'tl': 'top-left-rounded-corner',
'br': 'bottom-right-rounded-corner',
'bl': 'bottom-left-rounded-corner'}
mapping = {'tr': 'top-right-rounded-corner-mid',
'tl': 'top-left-rounded-corner-mid',
'br': 'bottom-right-rounded-corner-mid',
'bl': 'bottom-left-rounded-corner-mid'}
map_getter = lambda x: mapping[x]
if l_type == 'a' and d_v:
#case when added and deleted are present
return ' '.join(map(map_getter, ['tl', 'bl']))
if l_type == 'a' and not d_v:
return ' '.join(map(map_getter, ['tr', 'br', 'tl', 'bl']))
if l_type == 'd' and a_v:
return ' '.join(map(map_getter, ['tr', 'br']))
if l_type == 'd' and not a_v:
d_a = '<div class="added %s" style="width:%s%%">%s</div>' % (
cgen('a'), a_p, a_v
)
d_d = '<div class="deleted %s" style="width:%s%%">%s</div>' % (
cgen('d'), d_p, d_v
return literal('<div style="width:%spx">%s%s</div>' % (width, d_a, d_d))
def urlify_text(text_):
import re
url_pat = re.compile(r'''(http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]'''
'''|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+)''')
def url_func(match_obj):
url_full = match_obj.groups()[0]
return '<a href="%(url)s">%(url)s</a>' % ({'url': url_full})
return literal(url_pat.sub(url_func, text_))
def urlify_changesets(text_, repository):
Extract revision ids from changeset and make link from them
:param text_:
:param repository:
URL_PAT = re.compile(r'([0-9a-fA-F]{12,})')
@@ -140,96 +140,124 @@ div.color a {
padding: 0;
}
div.options {
clear: both;
overflow: hidden;
position: absolute;
background: #FFF;
margin: 7px 0 0 162px;
div.options a {
height: 1%;
display: block;
text-decoration: none;
margin: 0;
padding: 3px 8px;
.top-left-rounded-corner {
-webkit-border-top-left-radius: 8px;
-khtml-border-radius-topleft: 8px;
-moz-border-radius-topleft: 8px;
border-top-left-radius: 8px;
.top-right-rounded-corner {
-webkit-border-top-right-radius: 8px;
-khtml-border-radius-topright: 8px;
-moz-border-radius-topright: 8px;
border-top-right-radius: 8px;
.bottom-left-rounded-corner {
-webkit-border-bottom-left-radius: 8px;
-khtml-border-radius-bottomleft: 8px;
-moz-border-radius-bottomleft: 8px;
border-bottom-left-radius: 8px;
.bottom-right-rounded-corner {
-webkit-border-bottom-right-radius: 8px;
-khtml-border-radius-bottomright: 8px;
-moz-border-radius-bottomright: 8px;
border-bottom-right-radius: 8px;
.top-left-rounded-corner-mid {
-webkit-border-top-left-radius: 4px;
-khtml-border-radius-topleft: 4px;
-moz-border-radius-topleft: 4px;
border-top-left-radius: 4px;
.top-right-rounded-corner-mid {
-webkit-border-top-right-radius: 4px;
-khtml-border-radius-topright: 4px;
-moz-border-radius-topright: 4px;
border-top-right-radius: 4px;
.bottom-left-rounded-corner-mid {
-webkit-border-bottom-left-radius: 4px;
-khtml-border-radius-bottomleft: 4px;
-moz-border-radius-bottomleft: 4px;
border-bottom-left-radius: 4px;
.bottom-right-rounded-corner-mid {
-webkit-border-bottom-right-radius: 4px;
-khtml-border-radius-bottomright: 4px;
-moz-border-radius-bottomright: 4px;
border-bottom-right-radius: 4px;
.help-block {
color: #999999;
margin-bottom: 0;
margin-top: 5px;
#header {
padding: 0 10px;
#header ul#logged-user {
margin-bottom: 5px !important;
-webkit-border-radius: 0px 0px 8px 8px;
-khtml-border-radius: 0px 0px 8px 8px;
-moz-border-radius: 0px 0px 8px 8px;
border-radius: 0px 0px 8px 8px;
height: 37px;
background-color: #eedc94;
background-repeat: repeat-x;
background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1),
to(#eedc94) );
background-image: -moz-linear-gradient(top, #003b76, #00376e);
background-image: -ms-linear-gradient(top, #003b76, #00376e);
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76), color-stop(100%, #00376e) );
background-image: -webkit-linear-gradient(top, #003b76, #00376e);
background-image: -o-linear-gradient(top, #003b76, #00376e);
background-image: linear-gradient(top, #003b76, #00376e);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
endColorstr='#00376e', GradientType=0 );
box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
#header ul#logged-user li {
list-style: none;
float: left;
margin: 8px 0 0;
padding: 4px 12px;
border-left: 1px solid #316293;
#header ul#logged-user li.first {
border-left: none;
margin: 4px;
#header ul#logged-user li.first div.gravatar {
Status change: