<%inherit file="/base/base.html"/>
<%def name="title()">
${c.repo_name} ${_('Summary')} - ${c.rhodecode_name}
</%def>
<%def name="breadcrumbs_links()">
${h.link_to(u'Home',h.url('/'))}
»
${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
${_('summary')}
<%def name="page_nav()">
${self.menu('summary')}
<%def name="main()">
<div class="box box-left">
<!-- box / title -->
<div class="title">
${self.breadcrumbs()}
</div>
<!-- end box / title -->
<div class="form">
<div class="fields">
<div class="field">
<div class="label">
<label>${_('Name')}:</label>
<div class="input-short">
%if c.repo_info.dbrepo.repo_type =='hg':
<img style="margin-bottom:2px" class="icon" title="${_('Mercurial repository')}" alt="${_('Mercurial repository')}" src="${h.url("/images/icons/hgicon.png")}"/>
%endif
%if c.repo_info.dbrepo.repo_type =='git':
<img style="margin-bottom:2px" class="icon" title="${_('Git repository')}" alt="${_('Git repository')}" src="${h.url("/images/icons/giticon.png")}"/>
%if c.repo_info.dbrepo.private:
<img style="margin-bottom:2px" class="icon" title="${_('private repository')}" alt="${_('private repository')}" src="${h.url("/images/icons/lock.png")}"/>
%else:
<img style="margin-bottom:2px" class="icon" title="${_('public repository')}" alt="${_('public repository')}" src="${h.url("/images/icons/lock_open.png")}"/>
<span style="font-size: 1.6em;font-weight: bold;vertical-align: baseline;">${c.repo_info.name}</span>
%if c.rhodecode_user.username != 'default':
%if c.following:
<span id="follow_toggle" class="following" title="${_('Stop following this repository')}"
onclick="javascript:toggleFollowingRepo(this,${c.repo_info.dbrepo.repo_id},'${str(h.get_token())}')">
</span>
<span id="follow_toggle" class="follow" title="${_('Start following this repository')}"
%endif:
<br/>
%if c.repo_info.dbrepo.fork:
<span style="margin-top:5px">
<a href="${h.url('summary_home',repo_name=c.repo_info.dbrepo.fork.repo_name)}">
<img class="icon" alt="${_('public')}"
title="${_('Fork of')} ${c.repo_info.dbrepo.fork.repo_name}"
src="${h.url("/images/icons/arrow_divide.png")}"/>
${_('Fork of')} ${c.repo_info.dbrepo.fork.repo_name}
</a>
<label>${_('Description')}:</label>
${c.repo_info.dbrepo.description}
<label>${_('Contact')}:</label>
<div class="gravatar">
<img alt="gravatar" src="${h.gravatar_url(c.repo_info.dbrepo.user.email)}"/>
${_('Username')}: ${c.repo_info.dbrepo.user.username}<br/>
${_('Name')}: ${c.repo_info.dbrepo.user.name} ${c.repo_info.dbrepo.user.lastname}<br/>
${_('Email')}: <a href="mailto:${c.repo_info.dbrepo.user.email}">${c.repo_info.dbrepo.user.email}</a>
<label>${_('Last change')}:</label>
${h.age(c.repo_info.last_change)} - ${c.repo_info.last_change}
${_('by')} ${h.get_changeset_safe(c.repo_info,'tip').author}
<label>${_('Clone url')}:</label>
<input type="text" id="clone_url" readonly="readonly" value="hg clone ${c.clone_repo_url}" size="70"/>
<label>${_('Trending source files')}:</label>
<div id="lang_stats">
<script type="text/javascript">
YUE.onDOMReady(function(e){
id = 'clone_url';
YUE.on(id,'click',function(e){
YUD.get('clone_url').select();
})
var data = ${c.trending_languages|n};
var total = 0;
var no_data = true;
for (k in data){
total += data[k];
no_data = false;
}
var tbl = document.createElement('table');
tbl.setAttribute('class','trending_language_tbl');
var cnt =0;
cnt+=1;
var hide = cnt>2;
var tr = document.createElement('tr');
if (hide){
tr.setAttribute('style','display:none');
tr.setAttribute('class','stats_hidden');
var percentage = Math.round((data[k]/total*100),2);
var value = data[k];
var td1 = document.createElement('td');
td1.width=150;
var trending_language_label = document.createElement('div');
trending_language_label.innerHTML = k;
td1.appendChild(trending_language_label);
var td2 = document.createElement('td');
td2.setAttribute('style','padding-right:14px !important');
var trending_language = document.createElement('div');
var nr_files = value+" ${_('files')}";
trending_language.title = k+" "+nr_files;
if (percentage>20){
trending_language.innerHTML = "<b style='font-size:0.8em'>"+percentage+"% "+nr_files+ "</b>";
else{
trending_language.innerHTML = "<b style='font-size:0.8em'>"+percentage+"%</b>";
trending_language.setAttribute("class", 'trending_language top-right-rounded-corner bottom-right-rounded-corner');
trending_language.style.width=percentage+"%";
td2.appendChild(trending_language);
tr.appendChild(td1);
tr.appendChild(td2);
tbl.appendChild(tr);
if(cnt == 2){
if(cnt == 3){
var show_more = document.createElement('tr');
var td=document.createElement('td');
lnk = document.createElement('a');
lnk.href='#';
lnk.innerHTML = "${_("show more")}";
lnk.id='code_stats_show_more';
td.appendChild(lnk);
show_more.appendChild(td);
show_more.appendChild(document.createElement('td'));
tbl.appendChild(show_more);
if(no_data){
td1.innerHTML = "${c.no_data_msg}";
YUD.get('lang_stats').appendChild(tbl);
YUE.on('code_stats_show_more','click',function(){
l = YUD.getElementsByClassName('stats_hidden')
for (e in l){
YUD.setStyle(l[e],'display','');
};
YUD.setStyle(YUD.get('code_stats_show_more'),
'display','none');
</script>
<label>${_('Download')}:</label>
%for cnt,archive in enumerate(c.repo_info._get_archives()):
%if cnt >=1:
|
${h.link_to(archive['type'],
h.url('files_archive_home',repo_name=c.repo_info.name,
revision='tip',fileformat=archive['extension']),class_="archive_icon")}
%endfor
<label>${_('Feeds')}:</label>
${h.link_to(_('RSS'),h.url('rss_feed_home',repo_name=c.repo_info.name),class_='rss_icon')}
${h.link_to(_('Atom'),h.url('atom_feed_home',repo_name=c.repo_info.name),class_='atom_icon')}
<div class="box box-right" style="min-height:455px">
<h5>${_('Commit activity by day / author')}</h5>
<div class="graph">
%if c.no_data:
<div style="padding:0 10px 10px 15px;font-size: 1.2em;">${c.no_data_msg}</div>
<div id="commit_history" style="width:450px;height:300px;float:left"></div>
<div style="clear: both;height: 10px"></div>
<div id="overview" style="width:450px;height:100px;float:left"></div>
<div id="legend_data" style="clear:both;margin-top:10px;">
<div id="legend_container"></div>
<div id="legend_choices">
<table id="legend_choices_tables" style="font-size:smaller;color:#545454"></table>
/**
* Plots summary graph
*
* @class SummaryPlot
* @param {from} initial from for detailed graph
* @param {to} initial to for detailed graph
* @param {dataset}
* @param {overview_dataset}
*/
function SummaryPlot(from,to,dataset,overview_dataset) {
var initial_ranges = {
"xaxis":{
"from":from,
"to":to,
},
var dataset = dataset;
var overview_dataset = [overview_dataset];
var choiceContainer = YUD.get("legend_choices");
var choiceContainerTable = YUD.get("legend_choices_tables");
var plotContainer = YUD.get('commit_history');
var overviewContainer = YUD.get('overview');
var plot_options = {
bars: {show:true,align:'center',lineWidth:4},
legend: {show:true, container:"legend_container"},
points: {show:true,radius:0,fill:false},
yaxis: {tickDecimals:0,},
xaxis: {
mode: "time",
timeformat: "%d/%m",
min:from,
max:to,
grid: {
hoverable: true,
clickable: true,
autoHighlight:true,
color: "#999"
//selection: {mode: "x"}
var overview_options = {
legend:{show:false},
bars: {show:true,barWidth: 2,},
shadowSize: 0,
xaxis: {mode: "time", timeformat: "%d/%m/%y",},
yaxis: {ticks: 3, min: 0,tickDecimals:0,},
grid: {color: "#999",},
selection: {mode: "x"}
*get dummy data needed in few places
function getDummyData(label){
return {"label":label,
"data":[{"time":0,
"commits":0,
"added":0,
"changed":0,
"removed":0,
}],
"schema":["commits"],
"color":'#ffffff',
* generate checkboxes accordindly to data
* @param keys
* @returns
function generateCheckboxes(data) {
//append checkboxes
var i = 0;
choiceContainerTable.innerHTML = '';
for(var pos in data) {
data[pos].color = i;
i++;
if(data[pos].label != ''){
choiceContainerTable.innerHTML += '<tr><td>'+
'<input type="checkbox" name="' + data[pos].label +'" checked="checked" />'
+data[pos].label+
'</td></tr>';
* ToolTip show
function showTooltip(x, y, contents) {
var div=document.getElementById('tooltip');
if(!div) {
div = document.createElement('div');
div.id="tooltip";
div.style.position="absolute";
div.style.border='1px solid #fdd';
div.style.padding='2px';
div.style.backgroundColor='#fee';
document.body.appendChild(div);
YUD.setStyle(div, 'opacity', 0);
div.innerHTML = contents;
Status change: