changelog.html
362 lines
| 19.5 KiB
| text/html
|
HtmlLexer
r547 | ## -*- coding: utf-8 -*- | |||
<%inherit file="/base/base.html"/> | ||||
<%def name="title()"> | ||||
|
r2417 | ${_('%s Changelog') % c.repo_name} - ${c.rhodecode_name} | ||
r547 | </%def> | |||
<%def name="breadcrumbs_links()"> | ||||
|
r2312 | <% size = c.size if c.size <= c.total_cs else c.total_cs %> | ||
|
r3532 | ${_('Changelog')} - ${ungettext('showing %d out of %d revision', 'showing %d out of %d revisions', size) % (size, c.total_cs)} | ||
r547 | </%def> | |||
<%def name="page_nav()"> | ||||
|
r3197 | ${self.menu('changelog')} | ||
r547 | </%def> | |||
<%def name="main()"> | ||||
|
r3536 | ${self.context_bar('changelog')} | ||
r547 | <div class="box"> | |||
<!-- box / title --> | ||||
<div class="title"> | ||||
${self.breadcrumbs()} | ||||
</div> | ||||
<div class="table"> | ||||
|
r3197 | % if c.pagination: | ||
<div id="graph"> | ||||
|
r3536 | <div class="info_box" style="clear: both;padding: 10px 6px;text-align: right;"> | ||
r2885 | <a href="#" class="ui-btn small" id="rev_range_container" style="display:none"></a> | |||
r2927 | <a href="#" class="ui-btn small" id="rev_range_clear" style="display:none">${_('Clear selection')}</a> | |||
r2973 | ||||
r2363 | %if c.rhodecode_db_repo.fork: | |||
|
r3445 | <a title="${_('Compare fork with %s' % c.rhodecode_db_repo.fork.repo_name)}" href="${h.url('compare_url',repo_name=c.rhodecode_db_repo.fork.repo_name,org_ref_type='branch',org_ref='default',other_repo=c.repo_name,other_ref_type='branch',other_ref=request.GET.get('branch') or 'default')}" class="ui-btn small">${_('Compare fork with parent')}</a> | ||
r2363 | %endif | |||
r2773 | %if h.is_hg(c.rhodecode_repo): | |||
|
r3445 | <a id="open_new_pr" href="${h.url('pullrequest_form',repo_name=c.repo_name)}" class="ui-btn small">${_('Open new pull request')}</a> | ||
r2773 | %endif | |||
|
r3536 | </div> | ||
<div class="container_header"> | ||||
${h.form(h.url.current(),method='get')} | ||||
<div style="float:left"> | ||||
${h.submit('set',_('Show'),class_="ui-btn")} | ||||
${h.text('size',size=1,value=c.size)} | ||||
${_('revisions')} | ||||
r2363 | </div> | |||
|
r3536 | ${h.end_form()} | ||
r1656 | <div style="float:right">${h.select('branch_filter',c.branch_name,c.branch_filters)}</div> | |||
|
r3536 | </div> | ||
<div id="graph_nodes"> | ||||
<canvas id="graph_canvas"></canvas> | ||||
</div> | ||||
<div id="graph_content"> | ||||
r1888 | ||||
|
r3536 | <table id="changesets"> | ||
<tbody> | ||||
|
r3197 | %for cnt,cs in enumerate(c.pagination): | ||
|
r3536 | <tr id="chg_${cnt+1}" class="container ${'tablerow%s' % (cnt%2)}"> | ||
<td class="checkbox"> | ||||
|
r3197 | ${h.checkbox(cs.raw_id,class_="changeset_range")} | ||
|
r3536 | </td> | ||
<td class="author"> | ||||
<img alt="gravatar" src="${h.gravatar_url(h.email_or_none(cs.author),16)}"/> | ||||
<span title="${cs.author}" class="user">${h.shorter(h.person(cs.author),22)}</span> | ||||
</td> | ||||
<td class="hash"> | ||||
<span class="tooltip" title="${h.tooltip(h.age(cs.date))}"> | ||||
<a href="${h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id)}"> | ||||
<span class="changeset_id">${cs.revision} :</span> | ||||
<span class="changeset_hash">${h.short_id(cs.raw_id)}</span> | ||||
</a> | ||||
</span> | ||||
</td> | ||||
<td class="date"> | ||||
<div class="date">${h.age(cs.date,True)}</div> | ||||
</td> | ||||
<td class="mid"> | ||||
|
r3537 | <div class="log-container"> | ||
<div class="message">${h.urlify_commit(cs.message, c.repo_name,h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}</div> | ||||
<div class="expand"><span class="expandtext">↓ ${_('Show more')} ↓</span></div> | ||||
<div class="extra-container"> | ||||
%if (not c.branch_name) and cs.branch: | ||||
<div class="branchtag" title="${'%s %s' % (_('branch'),cs.branch)}"> | ||||
${h.link_to(h.shorter(cs.branch),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))} | ||||
</div> | ||||
%endif | ||||
%for book in cs.bookmarks: | ||||
<div class="bookbook" title="${'%s %s' % (_('bookmark'),book)}"> | ||||
${h.link_to(h.shorter(book),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))} | ||||
</div> | ||||
%endfor | ||||
%for tag in cs.tags: | ||||
<div class="tagtag" title="${'%s %s' % (_('tag'),tag)}"> | ||||
${h.link_to(h.shorter(tag),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))} | ||||
</div> | ||||
%endfor | ||||
%if len(c.comments.get(cs.raw_id,[])) > 0: | ||||
<div class="comments-container"> | ||||
<div class="comments-cnt" title="${('comments')}"> | ||||
<a href="${h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id,anchor='comment-%s' % c.comments[cs.raw_id][0].comment_id)}"> | ||||
${len(c.comments[cs.raw_id])} | ||||
</a> | ||||
</div> | ||||
</div> | ||||
%endif | ||||
<%doc> | ||||
%if (h.is_hg(c.rhodecode_repo) and cs.bookmarks) or cs.tags: | ||||
<div class="tagcontainer"> | ||||
%if h.is_hg(c.rhodecode_repo): | ||||
<ul class="logtags"> | ||||
##%if len(cs.parents)>1: | ||||
## <span class="merge">${_('merge')}</span> | ||||
##%endif | ||||
%for book in cs.bookmarks: | ||||
<li class="bookbook" title="${'%s %s' % (_('bookmark'),book)}"> | ||||
${h.link_to(h.shorter(book),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))} | ||||
</li> | ||||
%endfor | ||||
</ul> | ||||
%endif | ||||
<ul class="logtags tags"> | ||||
%for tag in cs.tags: | ||||
<li class="tagtag" title="${'%s %s' % (_('tag'),tag)}"> | ||||
${h.link_to(h.shorter(tag),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))} | ||||
</li> | ||||
%endfor | ||||
</ul> | ||||
</div> | ||||
%endif | ||||
</%doc> | ||||
|
r3536 | </div> | ||
|
r3537 | </div> | ||
|
r3536 | </td> | ||
|
r3537 | <%doc> | ||
|
r3536 | <td class="right"> | ||
<div class="changes"> | ||||
<div id="changed_total_${cs.raw_id}" style="float:right;" class="changed_total tooltip" title="${h.tooltip(_('Affected number of files, click to show more details'))}"> | ||||
${len(cs.affected_files)} | ||||
</div> | ||||
<div class="changeset-status-container"> | ||||
%if c.statuses.get(cs.raw_id): | ||||
<div title="${_('Changeset status')}" class="changeset-status-lbl">${c.statuses.get(cs.raw_id)[1]}</div> | ||||
<div class="changeset-status-ico"> | ||||
%if c.statuses.get(cs.raw_id)[2]: | ||||
<a class="tooltip" title="${_('Click to open associated pull request #%s' % c.statuses.get(cs.raw_id)[2])}" href="${h.url('pullrequest_show',repo_name=c.statuses.get(cs.raw_id)[3],pull_request_id=c.statuses.get(cs.raw_id)[2])}"><img src="${h.url('/images/icons/flag_status_%s.png' % c.statuses.get(cs.raw_id)[0])}" /></a> | ||||
%else: | ||||
<img src="${h.url('/images/icons/flag_status_%s.png' % c.statuses.get(cs.raw_id)[0])}" /> | ||||
r1888 | %endif | |||
|
r3536 | </div> | ||
%endif | ||||
</div> | ||||
</div> | ||||
%if cs.parents: | ||||
%for p_cs in reversed(cs.parents): | ||||
<div class="parent">${_('Parent')} | ||||
<span class="changeset_id">${p_cs.revision}:<span class="changeset_hash">${h.link_to(h.short_id(p_cs.raw_id), | ||||
h.url('changeset_home',repo_name=c.repo_name,revision=p_cs.raw_id),title=p_cs.message)}</span></span> | ||||
|
r3197 | </div> | ||
|
r3536 | %endfor | ||
%else: | ||||
<div class="parent">${_('No parents')}</div> | ||||
%endif | ||||
|
r3537 | %if len(c.comments.get(cs.raw_id,[])) > 0: | ||
<div class="comments-container"> | ||||
|
r3536 | <div class="comments-cnt" title="${('comments')}"> | ||
<a href="${h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id,anchor='comment-%s' % c.comments[cs.raw_id][0].comment_id)}"> | ||||
${len(c.comments[cs.raw_id])} | ||||
</a> | ||||
</div> | ||||
|
r3537 | </div> | ||
%endif | ||||
%if (h.is_hg(c.rhodecode_repo) and cs.bookmarks) or cs.tags: | ||||
<div class="tagcontainer"> | ||||
%if h.is_hg(c.rhodecode_repo): | ||||
<ul class="logtags"> | ||||
##%if len(cs.parents)>1: | ||||
## <span class="merge">${_('merge')}</span> | ||||
##%endif | ||||
%for book in cs.bookmarks: | ||||
<li class="bookbook" title="${'%s %s' % (_('bookmark'),book)}"> | ||||
${h.link_to(h.shorter(book),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))} | ||||
</li> | ||||
%endfor | ||||
</ul> | ||||
%endif | ||||
<ul class="logtags tags"> | ||||
%for tag in cs.tags: | ||||
<li class="tagtag" title="${'%s %s' % (_('tag'),tag)}"> | ||||
${h.link_to(h.shorter(tag),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))} | ||||
</li> | ||||
%endfor | ||||
</ul> | ||||
</div> | ||||
%endif | ||||
|
r3536 | </td> | ||
|
r3537 | </%doc> | ||
|
r3536 | </tr> | ||
|
r3197 | %endfor | ||
|
r3536 | </tbody> | ||
</table> | ||||
|
r3197 | <div class="pagination-wh pagination-left"> | ||
${c.pagination.pager('$link_previous ~2~ $link_next')} | ||||
</div> | ||||
</div> | ||||
|
r3536 | </div> | ||
r1888 | ||||
|
r3536 | <script type="text/javascript" src="${h.url('/js/graph.js')}"></script> | ||
<script type="text/javascript"> | ||||
YAHOO.util.Event.onDOMReady(function(){ | ||||
r1888 | ||||
|
r3536 | //Monitor range checkboxes and build a link to changesets | ||
//ranges | ||||
var checkboxes = YUD.getElementsByClassName('changeset_range'); | ||||
var url_tmpl = "${h.url('changeset_home',repo_name=c.repo_name,revision='__REVRANGE__')}"; | ||||
var pr_tmpl = "${h.url('pullrequest_home',repo_name=c.repo_name)}"; | ||||
var checkbox_checker = function(e){ | ||||
var clicked_cb = e.currentTarget; | ||||
var checked_checkboxes = []; | ||||
for (pos in checkboxes){ | ||||
if(checkboxes[pos].checked){ | ||||
checked_checkboxes.push(checkboxes[pos]); | ||||
r977 | } | |||
|
r3536 | } | ||
if(YUD.get('open_new_pr')){ | ||||
if(checked_checkboxes.length>0){ | ||||
r2996 | // modify open pull request to show we have selected cs | |||
YUD.get('open_new_pr').innerHTML = _TM['Open new pull request for selected changesets']; | ||||
|
r3536 | }else{ | ||
r2996 | YUD.get('open_new_pr').innerHTML = _TM['Open new pull request']; | |||
|
r2924 | } | ||
|
r3197 | } | ||
|
r3536 | |||
if(checked_checkboxes.length>0){ | ||||
var rev_end = checked_checkboxes[0].name; | ||||
var rev_start = checked_checkboxes[checked_checkboxes.length-1].name; | ||||
var url = url_tmpl.replace('__REVRANGE__', | ||||
rev_start+'...'+rev_end); | ||||
var link = (rev_start == rev_end) | ||||
? _TM['Show selected change __S'] | ||||
: _TM['Show selected changes __S -> __E']; | ||||
link = link.replace('__S',rev_start.substr(0,6)); | ||||
link = link.replace('__E',rev_end.substr(0,6)); | ||||
YUD.get('rev_range_container').href = url; | ||||
YUD.get('rev_range_container').innerHTML = link; | ||||
YUD.setStyle('rev_range_container','display',''); | ||||
YUD.setStyle('rev_range_clear','display',''); | ||||
YUD.get('open_new_pr').href = pr_tmpl + '?rev_start={0}&rev_end={1}'.format(rev_start,rev_end); | ||||
} else{ | ||||
YUD.setStyle('rev_range_container','display','none'); | ||||
YUD.setStyle('rev_range_clear','display','none'); | ||||
} | ||||
}; | ||||
YUE.onDOMReady(checkbox_checker); | ||||
YUE.on(checkboxes,'click', checkbox_checker); | ||||
YUE.on('rev_range_clear','click',function(e){ | ||||
for (var i=0; i<checkboxes.length; i++){ | ||||
var cb = checkboxes[i]; | ||||
cb.checked = false; | ||||
} | ||||
YUE.preventDefault(e); | ||||
}); | ||||
var msgs = YUQ('.message'); | ||||
// get first element height | ||||
var el = YUQ('#graph_content .container')[0]; | ||||
var row_h = el.clientHeight; | ||||
for(var i=0;i<msgs.length;i++){ | ||||
var m = msgs[i]; | ||||
var h = m.clientHeight; | ||||
var pad = YUD.getStyle(m,'padding'); | ||||
if(h > row_h){ | ||||
var offset = row_h - (h+12); | ||||
YUD.setStyle(m.nextElementSibling,'display','block'); | ||||
YUD.setStyle(m.nextElementSibling,'margin-top',offset+'px'); | ||||
}; | ||||
} | ||||
YUE.on(YUQ('.expand'),'click',function(e){ | ||||
var elem = e.currentTarget.parentNode.parentNode; | ||||
YUD.setStyle(e.currentTarget,'display','none'); | ||||
YUD.setStyle(elem,'height','auto'); | ||||
//redraw the graph, line_count and jsdata are global vars | ||||
|
r3197 | set_canvas(100); | ||
r1888 | ||||
|
r3197 | var r = new BranchRenderer(); | ||
r.render(jsdata,100,line_count); | ||||
r1888 | ||||
|
r3197 | }); | ||
|
r3536 | |||
// Fetch changeset details | ||||
YUE.on(YUD.getElementsByClassName('changed_total'),'click',function(e){ | ||||
var id = e.currentTarget.id; | ||||
var url = "${h.url('changelog_details',repo_name=c.repo_name,cs='__CS__')}"; | ||||
var url = url.replace('__CS__',id.replace('changed_total_','')); | ||||
ypjax(url,id,function(){tooltip_activate()}); | ||||
}); | ||||
// change branch filter | ||||
YUE.on(YUD.get('branch_filter'),'change',function(e){ | ||||
var selected_branch = e.currentTarget.options[e.currentTarget.selectedIndex].value; | ||||
var url_main = "${h.url('changelog_home',repo_name=c.repo_name)}"; | ||||
var url = "${h.url('changelog_home',repo_name=c.repo_name,branch='__BRANCH__')}"; | ||||
var url = url.replace('__BRANCH__',selected_branch); | ||||
if(selected_branch != ''){ | ||||
window.location = url; | ||||
}else{ | ||||
window.location = url_main; | ||||
} | ||||
}); | ||||
function set_canvas(width) { | ||||
var c = document.getElementById('graph_nodes'); | ||||
var t = document.getElementById('graph_content'); | ||||
canvas = document.getElementById('graph_canvas'); | ||||
var div_h = t.clientHeight; | ||||
//c.style.height=div_h+'px'; | ||||
canvas.setAttribute('height',div_h); | ||||
//c.style.height=width+'px'; | ||||
canvas.setAttribute('width',width); | ||||
}; | ||||
var heads = 1; | ||||
var line_count = 0; | ||||
var jsdata = ${c.jsdata|n}; | ||||
for (var i=0;i<jsdata.length;i++) { | ||||
var in_l = jsdata[i][2]; | ||||
for (var j in in_l) { | ||||
var m = in_l[j][1]; | ||||
if (m > line_count) | ||||
line_count = m; | ||||
} | ||||
} | ||||
set_canvas(100); | ||||
var r = new BranchRenderer(); | ||||
r.render(jsdata,100,line_count); | ||||
}); | ||||
</script> | ||||
|
r3197 | %else: | ||
${_('There are no changes yet')} | ||||
%endif | ||||
r547 | </div> | |||
r1888 | </div> | |||
r1865 | </%def> | |||