debian-mirror-gitlab/app/assets/javascripts/pages/projects/graphs/charts/index.js

83 lines
2.3 KiB
JavaScript
Raw Normal View History

2018-05-09 12:01:36 +05:30
import $ from 'jquery';
2018-03-27 19:54:05 +05:30
import Chart from 'chart.js';
2017-09-10 17:25:29 +05:30
import _ from 'underscore';
document.addEventListener('DOMContentLoaded', () => {
const projectChartData = JSON.parse(document.getElementById('projectChartData').innerHTML);
2019-05-30 16:15:17 +05:30
const responsiveChart = (selector, data) => {
const options = {
scaleOverlay: true,
responsive: true,
pointHitDetectionRadius: 2,
maintainAspectRatio: false,
};
2017-09-10 17:25:29 +05:30
// get selector by context
const ctx = selector.get(0).getContext('2d');
// pointing parent container to make chart.js inherit its width
const container = $(selector).parent();
2019-05-30 16:15:17 +05:30
const generateChart = () => {
selector.attr('width', $(container).width());
if (window.innerWidth < 768) {
// Scale fonts if window width lower than 768px (iPad portrait)
options.scaleFontSize = 8;
}
return new Chart(ctx).Bar(data, options);
};
// enabling auto-resizing
$(window).resize(generateChart);
return generateChart();
2017-09-10 17:25:29 +05:30
};
const chartData = data => ({
labels: Object.keys(data),
2018-12-13 13:39:08 +05:30
datasets: [
{
2019-05-30 16:15:17 +05:30
fillColor: 'rgba(220,220,220,0.5)',
strokeColor: 'rgba(220,220,220,1)',
barStrokeWidth: 1,
barValueSpacing: 1,
barDatasetSpacing: 1,
2018-12-13 13:39:08 +05:30
data: _.values(data),
},
],
2017-09-10 17:25:29 +05:30
});
2019-03-02 22:35:43 +05:30
const reorderWeekDays = (weekDays, firstDayOfWeek = 0) => {
if (firstDayOfWeek === 0) {
return weekDays;
}
return Object.keys(weekDays).reduce((acc, dayName, idx, arr) => {
const reorderedDayName = arr[(idx + firstDayOfWeek) % arr.length];
return {
...acc,
[reorderedDayName]: weekDays[reorderedDayName],
};
}, {});
};
2017-09-10 17:25:29 +05:30
const hourData = chartData(projectChartData.hour);
2019-05-30 16:15:17 +05:30
responsiveChart($('#hour-chart'), hourData);
2017-09-10 17:25:29 +05:30
2019-03-02 22:35:43 +05:30
const weekDays = reorderWeekDays(projectChartData.weekDays, gon.first_day_of_week);
const dayData = chartData(weekDays);
2019-05-30 16:15:17 +05:30
responsiveChart($('#weekday-chart'), dayData);
2017-09-10 17:25:29 +05:30
const monthData = chartData(projectChartData.month);
2019-05-30 16:15:17 +05:30
responsiveChart($('#month-chart'), monthData);
2017-09-10 17:25:29 +05:30
2019-05-30 16:15:17 +05:30
const data = projectChartData.languages;
2018-12-13 13:39:08 +05:30
const ctx = $('#languages-chart')
.get(0)
.getContext('2d');
2019-05-30 16:15:17 +05:30
const options = {
scaleOverlay: true,
responsive: true,
maintainAspectRatio: false,
};
new Chart(ctx).Pie(data, options);
2017-09-10 17:25:29 +05:30
});