@@ -35,13 +35,12 @@ from webhelpers.paginate import Page
from webhelpers.html.tags import _set_input_attrs, _set_id_attr, \
convert_boolean_attrs, NotGiven, _make_safe_id_component
from rhodecode.lib.annotate import annotate_highlight
from rhodecode.lib.utils import repo_name_slug
from rhodecode.lib import str2bool, safe_unicode, safe_str, get_changeset_safe
from rhodecode.lib.markup_renderer import MarkupRenderer
def _reset(name, value=None, id=NotGiven, type="reset", **attrs):
"""
Reset button
@@ -285,21 +284,56 @@ flash = _Flash()
#==============================================================================
# SCM FILTERS available via h.
from vcs.utils import author_name, author_email
from rhodecode.lib import credentials_filter, age as _age
from rhodecode.model.db import User
age = lambda x:_age(x)
capitalize = lambda x: x.capitalize()
email = author_email
email_or_none = lambda x: email(x) if email(x) != x else None
person = lambda x: author_name(x)
short_id = lambda x: x[:12]
hide_credentials = lambda x: ''.join(credentials_filter(x))
def email_or_none(x):
if email(x) != '':
return email(x)
# See if it contains a username we can get an email from
user = User.get_by_username(author_name(x), case_insensitive=True,
cache=True)
if user is not None:
return user.email
# No valid email, not a valid user in the system, none!
return None
def person(x):
# Valid email in the attribute passed, see if they're in the system
# attr to return from fetched user
person_getter = lambda usr: usr.username
user = User.get_by_email(email(x), case_insensitive=True, cache=True)
return person_getter(user)
# Maybe it's a username?
# Still nothing? Just pass back the author name then
return author_name(x)
def bool2icon(value):
"""Returns True/False values represented as small html image of true/false
icons
:param value: bool value
@@ -51,14 +51,13 @@ ${c.repo_name} ${_('Changelog')} - ${c.r
<span>${_('commit')} ${cs.revision}: ${h.short_id(cs.raw_id)}@${cs.date}</span>
</div>
<div class="author">
<div class="gravatar">
<img alt="gravatar" src="${h.gravatar_url(h.email(cs.author),16)}"/>
<div title="${h.email_or_none(cs.author)}" class="user">${h.person(cs.author)}</div>
##<span><a href="mailto:${h.email_or_none(cs.author)}">${h.email_or_none(cs.author)}</a></span><br/>
<div title="${cs.author}" class="user">${h.person(cs.author)}</div>
<div class="message">${h.link_to(h.wrap_paragraphs(cs.message),h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}</div>
<div class="right">
<div id="${cs.raw_id}_changes_info" class="changes">
<span id="${cs.raw_id}" class="changed_total tooltip" title="${_('Affected number of files, click to show more details')}">${len(cs.affected_files)}</span>
@@ -61,13 +61,13 @@
<img alt="gravatar" src="${h.gravatar_url(h.email(c.cs.author),16)}"/>
<div title="${h.email_or_none(c.cs.author)}" class="user">${h.person(c.cs.author)}</div>
<div title="${c.cs.author}" class="user">${h.person(c.cs.author)}</div>
<div class="commit">${c.file.last_changeset.message}</div>
<div class="code-body">
%if c.file.is_binary:
${_('Binary file (%s)') % c.file.mimetype}
@@ -93,13 +93,15 @@
<span class="tooltip" title="${node.last_changeset.date}">
${h.age(node.last_changeset.date)}</span>
%endif
</td>
<td>
%if node.is_file():
${node.last_changeset.author}
<span title="${node.last_changeset.author}">
${h.person(node.last_changeset.author)}
</span>
</tr>
%endfor
</tbody>
<tbody id="tbody_filtered" style="display:none">
@@ -32,13 +32,13 @@
<img alt="gravatar" src="${h.gravatar_url(h.email(c.changeset.author),16)}"/>
<div title="${h.email_or_none(c.changeset.author)}" class="user">${h.person(c.changeset.author)}</div>
<div title="${c.changeset.author}" class="user">${h.person(c.changeset.author)}</div>
Status change: