Mercurial > public > src > rhodecode
changeset 193:50a39f923f31
Added file annotation template. Bumped version to 0.6.8. Changelog and changeset are now cleaned with js, it's still very beta.
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Sat, 22 May 2010 02:00:39 +0200 |
parents | f191f99f59c9 |
children | 3d1dd13887f9 |
files | pylons_app/__init__.py pylons_app/controllers/changeset.py pylons_app/lib/utils.py pylons_app/templates/changelog/changelog.html pylons_app/templates/changeset/changeset.html pylons_app/templates/files/files_annotate.html |
diffstat | 6 files changed, 146 insertions(+), 101 deletions(-) [+] |
line wrap: on
line diff
--- a/pylons_app/__init__.py Sat May 22 01:58:36 2010 +0200 +++ b/pylons_app/__init__.py Sat May 22 02:00:39 2010 +0200 @@ -2,7 +2,7 @@ Hg app, a web based mercurial repository managment based on pylons """ -VERSION = (0, 6, 0, 'beta') +VERSION = (0, 6, 8, 'beta') __version__ = '.'.join((str(each) for each in VERSION[:4]))
--- a/pylons_app/controllers/changeset.py Sat May 22 01:58:36 2010 +0200 +++ b/pylons_app/controllers/changeset.py Sat May 22 02:00:39 2010 +0200 @@ -1,20 +1,23 @@ -import logging - -from pylons import request, response, session, tmpl_context as c, url, config, app_globals as g +from pylons import request, response, session, tmpl_context as c, url, config, \ + app_globals as g from pylons.controllers.util import abort, redirect - +from pylons_app.lib.auth import LoginRequired from pylons_app.lib.base import BaseController, render from pylons_app.lib.utils import get_repo_slug from pylons_app.model.hg_model import HgModel +import logging + + log = logging.getLogger(__name__) class ChangesetController(BaseController): + + @LoginRequired() def __before__(self): - c.repos_prefix = config['repos_name'] - c.repo_name = get_repo_slug(request) + super(ChangesetController, self).__before__() - def index(self): - # Return a rendered template - #return render('/changeset.mako') - # or, return a string - return 'Hello World' + def index(self, revision): + hg_model = HgModel() + c.changeset = hg_model.get_repo(c.repo_name).get_changeset(revision) + + return render('changeset/changeset.html')
--- a/pylons_app/lib/utils.py Sat May 22 01:58:36 2010 +0200 +++ b/pylons_app/lib/utils.py Sat May 22 02:00:39 2010 +0200 @@ -53,7 +53,7 @@ @param path: path to mercurial config file """ if not os.path.isfile(path): - log.error('Unable to read config file %s' % path) + log.warning('Unable to read config file %s' % path) return False #propagated from mercurial documentation sections = [
--- a/pylons_app/templates/changelog/changelog.html Sat May 22 01:58:36 2010 +0200 +++ b/pylons_app/templates/changelog/changelog.html Sat May 22 02:00:39 2010 +0200 @@ -1,7 +1,10 @@ +<%! +from pylons_app.lib import filters +%> <%inherit file="/base/base.html"/> <%def name="title()"> - ${_('Repository managment')} + ${_('Changelog - %s') % c.repo_name} </%def> <%def name="breadcrumbs()"> ${h.link_to(u'Home',h.url('/'))} @@ -11,104 +14,66 @@ ${_('changelog')} </%def> <%def name="page_nav()"> - <form action="log"> - <dl class="search"> - <dt><label>Search: </label></dt> - <dd><input type="text" name="rev" /></dd> - </dl> - </form> - - ${self.menu('changelog')} + ${self.menu('changelog')} </%def> <%def name="main()"> <h2 class="no-link no-border">${_('Changelog')} - ${_('showing ')} ${c.size} ${_('revisions')}</h2> <noscript>${_('The revision graph only works with JavaScript-enabled browsers.')}</noscript> -<div> -${h.form(h.url.current(),method='get')} - ${_('Show')}: ${h.text('size',size=5,value=c.size)} ${_('revisions')} - ${h.submit('','set')} -${h.end_form()} -</div> -<div id="wrapper" style="height:${c.canvasheight}px"> - <div style="float:left;height:${c.canvasheight}px"> - <canvas id="graph" width="224" height="${c.canvasheight}"></canvas> - </div> - <div style="float:left;height:${c.canvasheight}px"> - <ul id="graphnodes"></ul> + +<div id="graph"> + ##<div id="graph_nodes" style="height:1000px"> + ## <canvas id="graph" width="160"></canvas> + ##</div> + <div id="graph_content"> + <div class="container_header"> + ${h.form(h.url.current(),method='get')} + ${_('Show')}: ${h.text('size',size=5,value=c.size)} ${_('revisions')} + ${h.submit('','set')} + ${h.end_form()} + </div> + %for cnt,cs in enumerate(c.pagination): + <div class="container"> + <div class="left"> + <div class="date">${_('commit')} ${cs.revision}: ${cs.raw_id}@${cs.date}</div> + <div class="author">${cs.author}</div> + <div id="chg_${cnt}" class="message"> + ${h.link_to(cs.message, + h.url('changeset_home',repo_name=c.repo_name,revision=cs._short), + title=cs.message)} + </div> + <span class="logtags"> + <span class="branchtag">${cs.branch}</span> + %for tag in cs.tags: + <span class="tagtag">${tag}</span> + %endfor + </span> + </div> + <div class="right"> + <span class="removed" title="${_('removed')}">${len(cs.removed)}</span> + <span class="changed" title="${_('changed')}">${len(cs.changed)}</span> + <span class="added" title="${_('added')}">${len(cs.added)}</span> + </div> + </div> + + %endfor </div> </div> -<script type="text/javascript" src="/js/graph.js"></script> -<script> -<!-- hide script content - -var data = ${c.jsdata|n}; -var graph = new Graph(); -graph.scale(39); - -graph.edge = function(x0, y0, x1, y1, color) { - - this.setColor(color, 0.0, 0.65); - this.ctx.beginPath(); - this.ctx.moveTo(x0, y0); - this.ctx.lineTo(x1, y1); - this.ctx.stroke(); - -} - -var revlink = '<li style="_STYLE"><span class="desc">'; -revlink += '<a class="list" href="/${c.repo_name}/changeset/_NODEID" title="_NODEID"><b>_DESC</b></a>'; -revlink += '</span> _TAGS'; -revlink += '<span class="info">_DATE, by _USER</span></li>'; +##<script type="text/javascript" src="/js/graph2.js"></script> +##<script type="text/javascript" src="http://bitbucket-assets.s3.amazonaws.com/js/lib/bundle.160310Mar.js"></script> +## +##<script> +##<!-- hide script content +## +##var jsdata = ${c.jsdata|n}; +##var r = new BranchRenderer(); +##r.render(jsdata); -graph.vertex = function(x, y, color, parity, cur) { - - this.ctx.beginPath(); - color = this.setColor(color, 0.25, 0.75); - this.ctx.arc(x, y, radius, 0, Math.PI * 2, true); - this.ctx.fill(); - - var bg = '<li class="bg parity' + parity + '"></li>'; - var left = (this.columns + 1) * this.bg_height; - var nstyle = 'padding-left: ' + left + 'px;'; - var item = revlink.replace(/_STYLE/, nstyle); - item = item.replace(/_PARITY/, 'parity' + parity); - item = item.replace(/_NODEID/, cur[0]); - item = item.replace(/_NODEID/, cur[0]); - item = item.replace(/_DESC/, cur[3]); - item = item.replace(/_USER/, cur[4]); - item = item.replace(/_DATE/, cur[5]); - - var tagspan = ''; - if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) { - tagspan = '<span class="logtags">'; - if (cur[6][1]) { - tagspan += '<span class="branchtag" title="' + cur[6][0] + '">'; - tagspan += cur[6][0] + '</span> '; - } else if (!cur[6][1] && cur[6][0] != 'default') { - tagspan += '<span class="inbranchtag" title="' + cur[6][0] + '">'; - tagspan += cur[6][0] + '</span> '; - } - if (cur[7].length) { - for (var t in cur[7]) { - var tag = cur[7][t]; - tagspan += '<span class="tagtag">' + tag + '</span> '; - } - } - tagspan += '</span>'; - } - - item = item.replace(/_TAGS/, tagspan); - return [bg, item]; - -} +##// stop hiding script --> +##</script> -graph.render(data); - -// stop hiding script --> -</script> <div> <h2>${c.pagination.pager('$link_previous ~2~ $link_next')}</h2> </div>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pylons_app/templates/changeset/changeset.html Sat May 22 02:00:39 2010 +0200 @@ -0,0 +1,33 @@ +<%! +from pylons_app.lib import filters +%> +<%inherit file="/base/base.html"/> + +<%def name="title()"> + ${_('Changeset')} +</%def> +<%def name="breadcrumbs()"> + ${h.link_to(u'Home',h.url('/'))} + / + ${h.link_to(c.repo_name,h.url('changeset_home',repo_name=c.repo_name))} + / + ${_('changeset')} +</%def> +<%def name="page_nav()"> + ${self.menu('changelog')} +</%def> + +<%def name="main()"> + <h2 class="no-link no-border">${_('Changeset')}</h2> + <div class="cs_files"> + %for filenode in c.changeset.added: + <p class="cs_added">${filenode}</p> + %endfor + %for filenode in c.changeset.changed: + <p class="cs_changed">${filenode}</p> + %endfor + %for filenode in c.changeset.removed: + <p class="cs_removed">${filenode}</p> + %endfor + </div> +</%def> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pylons_app/templates/files/files_annotate.html Sat May 22 02:00:39 2010 +0200 @@ -0,0 +1,44 @@ +<%inherit file="/base/base.html"/> + +<%def name="title()"> + ${_('File annotate')} +</%def> +<%def name="breadcrumbs()"> + ${h.link_to(u'Home',h.url('/'))} + / + ${h.link_to(c.repo_name,h.url('files_home',repo_name=c.repo_name))} + / + ${_('files')} +</%def> +<%def name="page_nav()"> + ${self.menu('files')} +</%def> +<%def name="css()"> + <link rel="stylesheet" href="/css/monoblue_custom.css" type="text/css" /> + <link rel="stylesheet" href="/css/pygments.css" type="text/css" /> +</%def> +<%def name="main()"> + <h2 class="no-link no-border">${_('Annotate')}</h2> + <div id="files_data"> + <h2>${_('Location')}: ${h.files_breadcrumbs(c.repo_name,c.cur_rev,c.file.path)}</h2> + <dl class="overview"> + <dt>${_('Revision')}</dt> + <dd>r${c.file.last_changeset.revision}:${c.file.last_changeset._short}</dd> + <dt>${_('Size')}</dt> + <dd>${h.format_byte_size(c.file.size,binary=True)}</dd> + <dt>${_('Options')}</dt> + <dd>${h.link_to(_('source'), + h.url('files_home',repo_name=c.repo_name,revision=c.cur_rev,f_path=c.f_path))} / ${h.link_to(_('raw'), + h.url('files_raw_home',repo_name=c.repo_name,revision=c.cur_rev,f_path=c.f_path))}</dd> + </dl> + <div id="body" class="codeblock"> + <div class="code-header"> + <div class="revision">${c.file.name}@r${c.file.last_changeset.revision}:${c.file.last_changeset._short}</div> + <div class="commit" style="font-size:70%">"${c.file_msg}"</div> + </div> + <div class="code-body"> + ${h.pygmentize_annotation(c.annotate,c.repo_name)} + </div> + </div> + </div> +</%def> \ No newline at end of file