changelog.html
296 lines
| 15.1 KiB
| text/html
|
HtmlLexer
r547 | ## -*- coding: utf-8 -*- | |||
<%inherit file="/base/base.html"/> | ||||
<%def name="title()"> | ||||
r3761 | ${_('%s Changelog') % c.repo_name} · | |||
%if c.changelog_for_path: | ||||
/${c.changelog_for_path} · | ||||
%endif | ||||
${c.rhodecode_name} | ||||
r547 | </%def> | |||
<%def name="breadcrumbs_links()"> | ||||
|
r2312 | <% size = c.size if c.size <= c.total_cs else c.total_cs %> | ||
r3761 | ${_('Changelog')} | |||
%if c.changelog_for_path: | ||||
- /${c.changelog_for_path} | ||||
%endif | ||||
- ${ungettext('showing %d out of %d revision', 'showing %d out of %d revisions', size) % (size, c.total_cs)} | ||||
r547 | </%def> | |||
<%def name="page_nav()"> | ||||
|
r3603 | ${self.menu('repositories')} | ||
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"> | ||||
r3760 | <div style="display:${'none' if c.changelog_for_path else ''}"> | |||
<div class="info_box" style="clear: both;padding: 10px 6px;min-height: 12px;text-align: right;"> | ||||
<a href="#" class="ui-btn small" id="rev_range_container" style="display:none"></a> | ||||
<a href="#" class="ui-btn small" id="rev_range_clear" style="display:none">${_('Clear selection')}</a> | ||||
r2973 | ||||
r3760 | %if c.rhodecode_db_repo.fork: | |||
<a id="compare_fork" 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',merge=1)}" class="ui-btn small">${_('Compare fork with parent')}</a> | ||||
%endif | ||||
%if h.is_hg(c.rhodecode_repo): | ||||
<a id="open_new_pr" href="${h.url('pullrequest_home',repo_name=c.repo_name)}" class="ui-btn small">${_('Open new pull request')}</a> | ||||
%endif | ||||
r2363 | </div> | |||
r3760 | <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')} | ||||
</div> | ||||
${h.end_form()} | ||||
<div style="float:right">${h.select('branch_filter',c.branch_name,c.branch_filters)}</div> | ||||
</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"> | ||||
r3760 | %if c.changelog_for_path: | |||
${h.checkbox(cs.raw_id,class_="changeset_range", disabled="disabled")} | ||||
%else: | ||||
${h.checkbox(cs.raw_id,class_="changeset_range")} | ||||
%endif | ||||
r3688 | <td class="status"> | |||
%if c.statuses.get(cs.raw_id): | ||||
<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])}" /> | ||||
%endif | ||||
</div> | ||||
%endif | ||||
|
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> | ||||
r3585 | <td class="hash" style="width:${len(h.show_id(cs))*6.5}px"> | |||
|
r3538 | <a href="${h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id)}"> | ||
r3557 | <span class="changeset_hash">${h.show_id(cs)}</span> | |||
|
r3538 | </a> | ||
|
r3536 | </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"> | ||||
r3765 | %if c.comments.get(cs.raw_id): | |||
r1884 | <div class="comments-container"> | |||
r1885 | <div class="comments-cnt" title="${('comments')}"> | |||
|
r3538 | <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> | ||||
r1885 | </div> | |||
r1884 | </div> | |||
|
r3537 | %endif | ||
r3541 | %if h.is_hg(c.rhodecode_repo): | |||
r3544 | %for book in cs.bookmarks: | |||
r3707 | <div class="booktag" title="${_('Bookmark %s') % book}"> | |||
r3544 | ${h.link_to(h.shorter(book),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))} | |||
</div> | ||||
%endfor | ||||
r3541 | %endif | |||
|
r3537 | %for tag in cs.tags: | ||
|
r3654 | <div class="tagtag" title="${_('Tag %s') % tag}"> | ||
|
r3537 | ${h.link_to(h.shorter(tag),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))} | ||
|
r3197 | </div> | ||
%endfor | ||||
|
r3538 | %if (not c.branch_name) and cs.branch: | ||
|
r3654 | <div class="branchtag" title="${_('Branch %s' % cs.branch)}"> | ||
|
r3538 | ${h.link_to(h.shorter(cs.branch),h.url('changelog_home',repo_name=c.repo_name,branch=cs.branch))} | ||
|
r3537 | </div> | ||
|
r3197 | %endif | ||
|
r3536 | </div> | ||
|
r3537 | </div> | ||
|
r3536 | </td> | ||
</tr> | ||||
|
r3197 | %endfor | ||
|
r3536 | </tbody> | ||
</table> | ||||
r1888 | ||||
|
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'); | ||||
r3979 | // register our routes needed for this view | |||
pyroutes.register('changeset_home', "${h.url('changeset_home', repo_name='%(repo_name)s', revision='%(revision)s')}", ['repo_name', 'revision']); | ||||
pyroutes.register('changelog_home', "${h.url('changelog_home', repo_name='%(repo_name)s')}", ['repo_name']); | ||||
pyroutes.register('pullrequest_home', "${h.url('pullrequest_home', repo_name='%(repo_name)s')}", ['repo_name']); | ||||
|
r3464 | |||
|
r3552 | var checkbox_checker = function(e){ | ||
|
r3536 | var checked_checkboxes = []; | ||
for (pos in checkboxes){ | ||||
if(checkboxes[pos].checked){ | ||||
checked_checkboxes.push(checkboxes[pos]); | ||||
r977 | } | |||
|
r3536 | } | ||
if(YUD.get('open_new_pr')){ | ||||
|
r3552 | if(checked_checkboxes.length>1){ | ||
YUD.setStyle('open_new_pr','display','none'); | ||||
} else { | ||||
YUD.setStyle('open_new_pr','display',''); | ||||
|
r3485 | if(checked_checkboxes.length>0){ | ||
|
r3552 | YUD.get('open_new_pr').innerHTML = _TM['Open new pull request for selected changesets']; | ||
|
r3485 | }else{ | ||
|
r3552 | YUD.get('open_new_pr').innerHTML = _TM['Open new pull request']; | ||
|
r3485 | } | ||
r2927 | } | |||
|
r3552 | } | ||
r2973 | ||||
|
r3536 | if(checked_checkboxes.length>0){ | ||
var rev_end = checked_checkboxes[0].name; | ||||
var rev_start = checked_checkboxes[checked_checkboxes.length-1].name; | ||||
r3979 | var url = pyroutes.url('changeset_home', {'repo_name': '${c.repo_name}', | |||
'revision': rev_start+'...'+rev_end}); | ||||
r1888 | ||||
|
r3536 | var link = (rev_start == rev_end) | ||
|
r3592 | ? _TM['Show selected changeset __S'] | ||
: _TM['Show selected changesets __S -> __E']; | ||||
r3447 | ||||
|
r3536 | 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',''); | ||||
r2973 | ||||
r3979 | YUD.get('open_new_pr').href = pyroutes.url('pullrequest_home', | |||
{'repo_name': '${c.repo_name}', | ||||
'rev_start': rev_start, | ||||
'rev_end': rev_end}) | ||||
|
r3552 | YUD.setStyle('compare_fork','display','none'); | ||
}else{ | ||||
|
r3536 | YUD.setStyle('rev_range_container','display','none'); | ||
YUD.setStyle('rev_range_clear','display','none'); | ||||
|
r3813 | %if c.branch_name: | ||
r3979 | YUD.get('open_new_pr').href = pyroutes.url('pullrequest_home', | |||
{'repo_name': '${c.repo_name}', | ||||
'branch':'${c.branch_name}'}); | ||||
|
r3813 | %else: | ||
r3979 | YUD.get('open_new_pr').href = pyroutes.url('pullrequest_home', | |||
{'repo_name': '${c.repo_name}'}); | ||||
|
r3813 | %endif | ||
|
r3552 | YUD.setStyle('compare_fork','display',''); | ||
} | ||||
}; | ||||
YUE.onDOMReady(checkbox_checker); | ||||
YUE.on(checkboxes,'click', checkbox_checker); | ||||
|
r3464 | |||
|
r3536 | YUE.on('rev_range_clear','click',function(e){ | ||
for (var i=0; i<checkboxes.length; i++){ | ||||
var cb = checkboxes[i]; | ||||
cb.checked = false; | ||||
} | ||||
|
r3552 | checkbox_checker(); | ||
|
r3536 | YUE.preventDefault(e); | ||
}); | ||||
r1888 | ||||
|
r3536 | 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]; | ||||
r1888 | ||||
|
r3536 | 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'); | ||||
|
r3197 | }; | ||
|
r3536 | } | ||
YUE.on(YUQ('.expand'),'click',function(e){ | ||||
var elem = e.currentTarget.parentNode.parentNode; | ||||
YUD.setStyle(e.currentTarget,'display','none'); | ||||
YUD.setStyle(elem,'height','auto'); | ||||
r1888 | ||||
|
r3536 | //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 | |||
// change branch filter | ||||
YUE.on(YUD.get('branch_filter'),'change',function(e){ | ||||
var selected_branch = e.currentTarget.options[e.currentTarget.selectedIndex].value; | ||||
if(selected_branch != ''){ | ||||
r3979 | window.location = pyroutes.url('changelog_home', {'repo_name': '${c.repo_name}', | |||
'branch':encodeURIComponent(selected_branch)}); | ||||
|
r3536 | }else{ | ||
r3979 | window.location = pyroutes.url('changelog_home', {'repo_name': '${c.repo_name}'}); | |||
|
r3536 | } | ||
}); | ||||
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; | ||||
canvas.setAttribute('height',div_h); | ||||
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> | |||