changed to generate commit-per-month graph using chart.js
This commit is contained in:
parent
c9cb19ae17
commit
596a641fcf
@ -107,5 +107,6 @@ LICENSE
|
|||||||
jQuery UI 1.8 MIT or GPL
|
jQuery UI 1.8 MIT or GPL
|
||||||
PHPGraphLib MIT
|
PHPGraphLib MIT
|
||||||
CLOC 1.62 GPL
|
CLOC 1.62 GPL
|
||||||
|
Chart.js MIT
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -677,6 +677,41 @@ class Code extends Controller
|
|||||||
return $path;
|
return $path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function history_json ($projectid = '', $path = '', $rev = SVN_REVISION_HEAD)
|
||||||
|
{
|
||||||
|
$this->load->model ('ProjectModel', 'projects');
|
||||||
|
|
||||||
|
$login = $this->login->getUser ();
|
||||||
|
if (CODEPOT_SIGNIN_COMPULSORY && $login['id'] == '')
|
||||||
|
{
|
||||||
|
header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$project = $this->projects->get ($projectid);
|
||||||
|
if ($project === FALSE || ($project->public !== 'Y' && $login['id'] == ''))
|
||||||
|
{
|
||||||
|
header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->load->model ('SubversionModel', 'subversion');
|
||||||
|
|
||||||
|
$path = $this->converter->HexToAscii ($path);
|
||||||
|
if ($path == '.') $path = ''; /* treat a period specially */
|
||||||
|
$path = $this->_normalize_path ($path);
|
||||||
|
|
||||||
|
$file = $this->subversion->getHistory ($projectid, $path, SVN_REVISION_HEAD);
|
||||||
|
if ($file === FALSE)
|
||||||
|
{
|
||||||
|
header($_SERVER['SERVER_PROTOCOL'].' 500 Internal Server Error');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$history = $file['history'];
|
||||||
|
print codepot_json_encode ($history);
|
||||||
|
}
|
||||||
|
|
||||||
function graph ($type = '', $projectid = '', $path = '', $rev = SVN_REVISION_HEAD)
|
function graph ($type = '', $projectid = '', $path = '', $rev = SVN_REVISION_HEAD)
|
||||||
{
|
{
|
||||||
$this->load->model ('ProjectModel', 'projects');
|
$this->load->model ('ProjectModel', 'projects');
|
||||||
|
@ -19,7 +19,115 @@
|
|||||||
<script type="text/javascript" src="<?=base_url_make('/js/prettify/lang-sql.js')?>"></script>
|
<script type="text/javascript" src="<?=base_url_make('/js/prettify/lang-sql.js')?>"></script>
|
||||||
<script type="text/javascript" src="<?=base_url_make('/js/prettify/lang-vb.js')?>"></script>
|
<script type="text/javascript" src="<?=base_url_make('/js/prettify/lang-vb.js')?>"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="<?=base_url_make('/js/jquery.min.js')?>"></script>
|
||||||
|
<script type="text/javascript" src="<?=base_url_make('/js/jquery-ui.min.js')?>"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="<?=base_url_make('/js/Chart.min.js')?>"></script>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
function show_commits_per_month_graph(response)
|
||||||
|
{
|
||||||
|
var log = $.parseJSON(response);
|
||||||
|
if (log == null)
|
||||||
|
{
|
||||||
|
alert ('Invalid data ...');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var min_date = '9999-99', max_date = '0000-00';
|
||||||
|
var stats = [], stat_keys = [], stat_values = [];
|
||||||
|
for (var i = 0; i < log.length; i++)
|
||||||
|
{
|
||||||
|
var date = log[i].date;
|
||||||
|
if (date)
|
||||||
|
{
|
||||||
|
date = date.substring (0, 7);
|
||||||
|
if (date in stats) stats[date]++;
|
||||||
|
else stats[date] = 1;
|
||||||
|
|
||||||
|
if (date < min_date) min_date = date;
|
||||||
|
if (date > max_date) max_date = date;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var year, month, min_year, max_year, min_month, max_month;
|
||||||
|
|
||||||
|
min_year = parseInt(min_date.substring (0, 4));
|
||||||
|
min_month = parseInt(min_date.substring (5));
|
||||||
|
max_year = parseInt(max_date.substring (0, 4));
|
||||||
|
max_month = parseInt(max_date.substring (5));
|
||||||
|
|
||||||
|
for (year = min_year; year <= max_year; year++)
|
||||||
|
{
|
||||||
|
month = (year == min_year)? min_month: 1;
|
||||||
|
month_end = (year == max_year)? max_month: 12;
|
||||||
|
|
||||||
|
while (month <= month_end)
|
||||||
|
{
|
||||||
|
var m = month.toString();
|
||||||
|
while (m.length < 2) m = '0' + m;
|
||||||
|
|
||||||
|
var y = year.toString();
|
||||||
|
while (y.length < 4) y = '0' + y;
|
||||||
|
|
||||||
|
date = y + '-' + m;
|
||||||
|
|
||||||
|
if (!(date in stats))
|
||||||
|
{
|
||||||
|
// fill the holes
|
||||||
|
stats[date] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
month++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var key in stats)
|
||||||
|
{
|
||||||
|
stat_keys.push (key);
|
||||||
|
//stat_values.push (stats[key]);
|
||||||
|
}
|
||||||
|
|
||||||
|
stat_keys = stat_keys.sort();
|
||||||
|
for (i = 0; i < stat_keys.length; i++)
|
||||||
|
{
|
||||||
|
stat_values.push (stats[stat_keys[i]]);
|
||||||
|
}
|
||||||
|
|
||||||
|
var commits_per_month_data = {
|
||||||
|
labels : stat_keys,
|
||||||
|
|
||||||
|
datasets : [
|
||||||
|
{
|
||||||
|
label: 'Commits per month',
|
||||||
|
fillColor : 'rgba(151,187,205,0.2)',
|
||||||
|
strokeColor: "rgba(151,187,205,0.8)",
|
||||||
|
data : stat_values
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#commits-per-month-canvas').each (function() {
|
||||||
|
var canvas = $(this)[0];
|
||||||
|
var ctx = canvas.getContext('2d');
|
||||||
|
var commits_per_month_chart = new Chart(ctx).Line(commits_per_month_data, {
|
||||||
|
responsive : true,
|
||||||
|
pointDot: false,
|
||||||
|
scaleShowGridLines: true,
|
||||||
|
scaleShowHorizontalLines: true,
|
||||||
|
scaleShowVerticalLines: false,
|
||||||
|
datasetFill: true,
|
||||||
|
datasetStroke: true,
|
||||||
|
bezierCurve: true,
|
||||||
|
legendTemplate : "<ul class=\"<%=name.toLowerCase()%>-legend\"><% for (var i=0; i<datasets.length; i++){%><li><span style=\"background-color:<%=datasets[i].strokeColor%>\"><%if(datasets[i].label){%><%=datasets[i].label%><%}%></span></li><%}%></ul>"
|
||||||
|
});
|
||||||
|
|
||||||
|
var legend = commits_per_month_chart.generateLegend();
|
||||||
|
$('#commits-per-month-legend').html(legend);
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
function render_wiki()
|
function render_wiki()
|
||||||
{
|
{
|
||||||
creole_render_wiki (
|
creole_render_wiki (
|
||||||
@ -30,6 +138,12 @@ function render_wiki()
|
|||||||
);
|
);
|
||||||
|
|
||||||
prettyPrint ();
|
prettyPrint ();
|
||||||
|
|
||||||
|
var ajax_req = $.ajax ({
|
||||||
|
url: '<?=site_url()?>/code/history_json/<?=$project->id?>/',
|
||||||
|
context: document.body,
|
||||||
|
success: show_commits_per_month_graph
|
||||||
|
});
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@ -280,9 +394,13 @@ foreach ($urls as $url)
|
|||||||
|
|
||||||
<div id="project_home_mainarea_stat">
|
<div id="project_home_mainarea_stat">
|
||||||
<?php
|
<?php
|
||||||
$graph_url = codepot_merge_path (site_url(), "/code/graph/commits-per-month/{$project->id}");
|
//$graph_url = codepot_merge_path (site_url(), "/code/graph/commits-per-month/{$project->id}");
|
||||||
print "<img src='{$graph_url}' id='project_home_commits_per_month_graph' />";
|
//print "<img src='{$graph_url}' id='project_home_commits_per_month_graph' />";
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
<div id='commits-per-month-legend'></div>
|
||||||
|
<canvas id='commits-per-month-canvas'></canvas>
|
||||||
|
|
||||||
</div> <!-- project_home_mainarea_stat -->
|
</div> <!-- project_home_mainarea_stat -->
|
||||||
|
|
||||||
</div> <!-- project_home_mainarea -->
|
</div> <!-- project_home_mainarea -->
|
||||||
|
11
codepot/src/js/Chart.min.js
vendored
Normal file
11
codepot/src/js/Chart.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -4,7 +4,8 @@ wwwdir=$(WWWDIR)/js
|
|||||||
www_DATA = \
|
www_DATA = \
|
||||||
creole.js \
|
creole.js \
|
||||||
jquery.min.js \
|
jquery.min.js \
|
||||||
jquery-ui.min.js
|
jquery-ui.min.js \
|
||||||
|
Chart.min.js
|
||||||
|
|
||||||
EXTRA_DIST = $(www_DATA)
|
EXTRA_DIST = $(www_DATA)
|
||||||
|
|
||||||
|
@ -152,7 +152,8 @@ SUBDIRS = prettify
|
|||||||
www_DATA = \
|
www_DATA = \
|
||||||
creole.js \
|
creole.js \
|
||||||
jquery.min.js \
|
jquery.min.js \
|
||||||
jquery-ui.min.js
|
jquery-ui.min.js \
|
||||||
|
Chart.min.js
|
||||||
|
|
||||||
EXTRA_DIST = $(www_DATA)
|
EXTRA_DIST = $(www_DATA)
|
||||||
all: all-recursive
|
all: all-recursive
|
||||||
|
Loading…
Reference in New Issue
Block a user