252 lines
7.7 KiB
JavaScript
252 lines
7.7 KiB
JavaScript
let charts = {};
|
|
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
const overviewTabButton = document.querySelector('[data-tab="overview"]');
|
|
const statisticsTabButton = document.querySelector('[data-tab="statistics"]');
|
|
|
|
overviewTabButton.addEventListener('click', function() {
|
|
setTimeout(() => {
|
|
initializeOverviewCharts();
|
|
}, 100);
|
|
});
|
|
|
|
statisticsTabButton.addEventListener('click', function() {
|
|
setTimeout(() => {
|
|
initializeStatisticsCharts();
|
|
}, 100);
|
|
});
|
|
|
|
if (window.appData.charts) {
|
|
initializeOverviewCharts();
|
|
initializeStatisticsCharts();
|
|
initializeDetailedStats();
|
|
}
|
|
});
|
|
|
|
function initializeOverviewCharts() {
|
|
const chartData = window.appData.charts;
|
|
|
|
if (!chartData) return;
|
|
|
|
destroyChart('priority-chart');
|
|
destroyChart('constraint-chart');
|
|
|
|
const priorityCtx = document.getElementById('priority-chart');
|
|
const constraintCtx = document.getElementById('constraint-chart');
|
|
|
|
if (priorityCtx && chartData.priority_distribution) {
|
|
charts['priority-chart'] = new Chart(priorityCtx, {
|
|
type: 'pie',
|
|
data: {
|
|
labels: chartData.priority_distribution.labels,
|
|
datasets: [{
|
|
data: chartData.priority_distribution.data,
|
|
backgroundColor: [
|
|
'#ef4444',
|
|
'#f59e0b',
|
|
'#10b981',
|
|
'#3b82f6'
|
|
],
|
|
borderWidth: 0
|
|
}]
|
|
},
|
|
options: {
|
|
responsive: true,
|
|
maintainAspectRatio: true,
|
|
plugins: {
|
|
legend: {
|
|
position: 'bottom',
|
|
labels: {
|
|
color: '#e0e0e0',
|
|
padding: 15
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
if (constraintCtx && chartData.constraint_distribution) {
|
|
charts['constraint-chart'] = new Chart(constraintCtx, {
|
|
type: 'doughnut',
|
|
data: {
|
|
labels: chartData.constraint_distribution.labels,
|
|
datasets: [{
|
|
data: chartData.constraint_distribution.data,
|
|
backgroundColor: [
|
|
'#ef4444',
|
|
'#10b981'
|
|
],
|
|
borderWidth: 0
|
|
}]
|
|
},
|
|
options: {
|
|
responsive: true,
|
|
maintainAspectRatio: true,
|
|
plugins: {
|
|
legend: {
|
|
position: 'bottom',
|
|
labels: {
|
|
color: '#e0e0e0',
|
|
padding: 15
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
function initializeStatisticsCharts() {
|
|
const chartData = window.appData.charts;
|
|
|
|
if (!chartData) return;
|
|
|
|
destroyChart('categories-chart');
|
|
destroyChart('sentence-chart');
|
|
|
|
const categoriesCtx = document.getElementById('categories-chart');
|
|
const sentenceCtx = document.getElementById('sentence-chart');
|
|
|
|
if (categoriesCtx && chartData.variable_categories && chartData.variable_categories.labels.length > 0) {
|
|
charts['categories-chart'] = new Chart(categoriesCtx, {
|
|
type: 'bar',
|
|
data: {
|
|
labels: chartData.variable_categories.labels,
|
|
datasets: [{
|
|
label: 'Variables by Category',
|
|
data: chartData.variable_categories.data,
|
|
backgroundColor: [
|
|
'#3b82f6',
|
|
'#10b981',
|
|
'#f59e0b',
|
|
'#ef4444',
|
|
'#8b5cf6',
|
|
'#ec4899'
|
|
],
|
|
borderWidth: 0
|
|
}]
|
|
},
|
|
options: {
|
|
responsive: true,
|
|
maintainAspectRatio: true,
|
|
indexAxis: 'y',
|
|
scales: {
|
|
x: {
|
|
beginAtZero: true,
|
|
ticks: {
|
|
color: '#a0a0a0'
|
|
},
|
|
grid: {
|
|
color: '#333333'
|
|
}
|
|
},
|
|
y: {
|
|
ticks: {
|
|
color: '#a0a0a0'
|
|
},
|
|
grid: {
|
|
color: '#333333'
|
|
}
|
|
}
|
|
},
|
|
plugins: {
|
|
legend: {
|
|
display: false
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
if (sentenceCtx && chartData.sentence_length_distribution) {
|
|
const sentenceData = chartData.sentence_length_distribution;
|
|
|
|
charts['sentence-chart'] = new Chart(sentenceCtx, {
|
|
type: 'bar',
|
|
data: {
|
|
labels: ['Min', 'Mean', 'Median', 'Max'],
|
|
datasets: [{
|
|
label: 'Sentence Length',
|
|
data: [
|
|
sentenceData.min,
|
|
sentenceData.mean,
|
|
sentenceData.median,
|
|
sentenceData.max
|
|
],
|
|
backgroundColor: '#3b82f6',
|
|
borderWidth: 0
|
|
}]
|
|
},
|
|
options: {
|
|
responsive: true,
|
|
maintainAspectRatio: true,
|
|
scales: {
|
|
x: {
|
|
ticks: {
|
|
color: '#a0a0a0'
|
|
},
|
|
grid: {
|
|
color: '#333333'
|
|
}
|
|
},
|
|
y: {
|
|
beginAtZero: true,
|
|
ticks: {
|
|
color: '#a0a0a0'
|
|
},
|
|
grid: {
|
|
color: '#333333'
|
|
}
|
|
}
|
|
},
|
|
plugins: {
|
|
legend: {
|
|
display: false
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
function initializeDetailedStats() {
|
|
const chartData = window.appData.charts;
|
|
const container = document.getElementById('detailed-stats');
|
|
|
|
if (!chartData || !chartData.sentence_length_distribution) {
|
|
return;
|
|
}
|
|
|
|
const sentenceStats = chartData.sentence_length_distribution;
|
|
|
|
const statsData = [
|
|
{ label: 'Min Sentence Length', value: sentenceStats.min },
|
|
{ label: 'Max Sentence Length', value: sentenceStats.max },
|
|
{ label: 'Mean Sentence Length', value: sentenceStats.mean.toFixed(1) },
|
|
{ label: 'Median Sentence Length', value: sentenceStats.median.toFixed(1) }
|
|
];
|
|
|
|
container.innerHTML = statsData.map(stat => `
|
|
<div class="stat-card">
|
|
<div class="value">${stat.value}</div>
|
|
<div class="label">${stat.label}</div>
|
|
</div>
|
|
`).join('');
|
|
}
|
|
|
|
function destroyChart(chartId) {
|
|
if (charts[chartId]) {
|
|
charts[chartId].destroy();
|
|
delete charts[chartId];
|
|
}
|
|
}
|
|
|
|
window.addEventListener('resize', function() {
|
|
if (currentTab === 'overview') {
|
|
initializeOverviewCharts();
|
|
} else if (currentTab === 'statistics') {
|
|
initializeStatisticsCharts();
|
|
}
|
|
});
|