plot charts for all statistical tables

#466
This commit is contained in:
Hamid Reza Mohammadi 2025-01-31 18:06:46 +03:30
parent fd39f8b7d5
commit a51fbedded
16 changed files with 135 additions and 14 deletions

View File

@ -150,7 +150,7 @@
</p>
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/js/bk.js?version=69"></script>
<script src="~/js/bk.js?version=70"></script>
<script src="~/js/jplayersupport.js"></script>
<script src="~/js/vaabd.js?version=10"></script>
<script src="~/dist/jplayer/jquery.jplayer.min.js"></script>

View File

@ -16,7 +16,7 @@
<link rel="shortcut icon" href="/favicon.ico?version=1" type="image/x-icon" />
<link rel="search" type="application/opensearchdescription+xml" title="گنجور" href="https://ganjoor.net/search.xml" />
<script src="/lib/jquery/dist/jquery.min.js"></script>
<script src="/js/bk.js?version=69"></script>
<script src="/js/bk.js?version=70"></script>
<script>
var cookieValue = getCookie("playerScrollLock");
var playerScrollLock = cookieValue === "true";

View File

@ -16,7 +16,7 @@
<link rel="shortcut icon" href="/favicon.ico?version=1" type="image/x-icon" />
<link rel="search" type="application/opensearchdescription+xml" title="گنجور" href="https://ganjoor.net/search.xml" />
<script src="/lib/jquery/dist/jquery.min.js"></script>
<script src="/js/bk.js?version=69"></script>
<script src="/js/bk.js?version=70"></script>
<script>
var cookieValue = getCookie("playerScrollLock");
var playerScrollLock = cookieValue === "true";

View File

@ -18,7 +18,7 @@
<link rel="shortcut icon" href="/favicon.ico?version=1" type="image/x-icon" />
<link rel="search" type="application/opensearchdescription+xml" title="گنجور" href="https://ganjoor.net/search.xml" />
<script src="/lib/jquery/dist/jquery.min.js"></script>
<script src="/js/bk.js?version=69"></script>
<script src="/js/bk.js?version=70"></script>
<script>
var cookieValue = getCookie("playerScrollLock");
var playerScrollLock = cookieValue === "true";

View File

@ -16,7 +16,8 @@
<link rel="shortcut icon" href="/favicon.ico?version=1" type="image/x-icon">
<link rel="search" type="application/opensearchdescription+xml" title="گنجور" href="https://ganjoor.net/search.xml">
<script src="/lib/jquery/dist/jquery.min.js"></script>
<script src="/js/bk.js?version=69"></script>
<script src="/js/chart.js"></script>
<script src="/js/bk.js?version=70"></script>
<script src="/js/jquery.mark.min.js"></script>
<script>
var cookieValue = getCookie("playerScrollLock");
@ -98,6 +99,7 @@
<script src="~/js/leaflet.js"></script>
<script src="~/js/leaflet-providers.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/OverlappingMarkerSpiderfier-Leaflet/0.2.6/oms.min.js"></script>
}
</head>

View File

@ -23,7 +23,7 @@
font-family: 'Vazir'
}
</style>
<script src="/js/bk.js?version=69"></script>
<script src="/js/bk.js?version=70"></script>
<script src="https://code.jquery.com/jquery-1.10.2.min.js"></script>
<script src="~/js/leaflet.js"></script>
<script src="~/js/leaflet-providers.js"></script>

View File

@ -15,7 +15,7 @@
<link rel="shortcut icon" href="/favicon.ico?version=1" type="image/x-icon" />
<link rel="search" type="application/opensearchdescription+xml" title="گنجور" href="https://ganjoor.net/search.xml" />
<script src="/lib/jquery/dist/jquery.min.js"></script>
<script src="/js/bk.js?version=69"></script>
<script src="/js/bk.js?version=70"></script>
<script>
var cookieValue = getCookie("playerScrollLock");
var playerScrollLock = cookieValue === "true";

View File

@ -16,7 +16,7 @@
<link rel="shortcut icon" href="/favicon.ico?version=1" type="image/x-icon" />
<link rel="search" type="application/opensearchdescription+xml" title="گنجور" href="https://ganjoor.net/search.xml" />
<script src="/lib/jquery/dist/jquery.min.js"></script>
<script src="/js/bk.js?version=69"></script>
<script src="/js/bk.js?version=70"></script>
<script>
var cookieValue = getCookie("playerScrollLock");
var playerScrollLock = cookieValue === "true";

View File

@ -238,7 +238,7 @@
<script src="~/js/bk.js?version=69"></script>
<script src="~/js/bk.js?version=70"></script>
<script src="~/js/jplayersupport.js"></script>
<script src="~/js/vaabd.js?version=10"></script>
<script src="~/dist/jplayer/jquery.jplayer.min.js"></script>

View File

@ -21,7 +21,7 @@
<link rel="shortcut icon" href="/favicon.ico?version=1" type="image/x-icon" />
<link rel="search" type="application/opensearchdescription+xml" title="گنجور" href="https://ganjoor.net/search.xml" />
<script src="/lib/jquery/dist/jquery.min.js"></script>
<script src="/js/bk.js?version=69"></script>
<script src="/js/bk.js?version=70"></script>
<script>
var cookieValue = getCookie("playerScrollLock");
var playerScrollLock = cookieValue === "true";

View File

@ -35,7 +35,7 @@
});
</script>
<script src="/js/bk.js?version=69"></script>
<script src="/js/bk.js?version=70"></script>
<script>
function editBanner(bannerId) {
var url = '?handler=Edit';

View File

@ -32,7 +32,7 @@
});
</script>
<script src="/lib/diff.js"></script>
<script src="/js/bk.js?version=69"></script>
<script src="/js/bk.js?version=70"></script>
<script>
function compareCorrectionBlocks(originalElemenyId, editedElementId, resultElementId) {
var a = document.getElementById(originalElemenyId);

View File

@ -18,7 +18,7 @@
<link rel="shortcut icon" href="/favicon.ico?version=1" type="image/x-icon" />
<link rel="search" type="application/opensearchdescription+xml" title="گنجور" href="https://ganjoor.net/search.xml" />
<script src="/lib/jquery/dist/jquery.min.js"></script>
<script src="/js/bk.js?version=69"></script>
<script src="/js/bk.js?version=70"></script>
<script>
var cookieValue = getCookie("playerScrollLock");
var playerScrollLock = cookieValue === "true";

View File

@ -18,7 +18,7 @@
<link rel="shortcut icon" href="/favicon.ico?version=1" type="image/x-icon" />
<link rel="search" type="application/opensearchdescription+xml" title="گنجور" href="https://ganjoor.net/search.xml" />
<script src="/lib/jquery/dist/jquery.min.js"></script>
<script src="/js/bk.js?version=69"></script>
<script src="/js/bk.js?version=70"></script>
<script>
var cookieValue = getCookie("playerScrollLock");
var playerScrollLock = cookieValue === "true";

View File

@ -1646,6 +1646,7 @@ function loadWordCounts(catId, poetId, remStopWords) {
document.getElementById("percent-button").style.display = 'inline-block';
}
$(data).appendTo(divParent);
plotChart('words-stats');
},
});
}
@ -1696,6 +1697,7 @@ function countPoemWords(poemId) {
document.getElementById("remove-this-wordcounts").remove();
divParent.innerHTML = '<div id="wordcounts-placeholder"><div>'
$(data).appendTo(divParent);
plotChart('words-stats');
},
});
}
@ -1725,5 +1727,102 @@ function switchTab(evt, tabId) {
evt.currentTarget.className += " active";
}
function persianToEnglishNumber(str) {
str = str.replace('٬', '');
const persianDigits = '۰۱۲۳۴۵۶۷۸۹';
return str.replace(/[۰-۹]/g, d => persianDigits.indexOf(d));
}
function plotChart(tableId) {
let table = document.getElementById(tableId);
if (!table) return;
let labels = [];
let values = [];
let headerCols = table.querySelector("thead tr").children;
let xTitle = headerCols[1].innerText.trim();
let yTitle = headerCols[2].innerText.trim();
table.querySelectorAll("tbody tr").forEach(row => {
let cols = row.querySelectorAll("td");
if (cols.length >= 3) {
if (values.length > 9) return;
let rowNumber = persianToEnglishNumber(cols[0].innerText.trim());
if (rowNumber === "0") return; // Ignore rows with row number ۰
let xValue = persianToEnglishNumber(cols[1].innerText.trim());
let yValue = persianToEnglishNumber(cols[2].innerText.trim());
labels.push(xValue);
values.push(parseInt(yValue));
}
});
let existingCanvas = document.getElementById(`chart-${tableId}`);
if (existingCanvas) {
existingCanvas.remove();
}
let canvas = document.createElement("canvas");
canvas.id = `chart-${tableId}`;
table.parentNode.insertBefore(canvas, table.nextSibling);
new Chart(canvas, {
type: 'bar',
data: {
labels: labels,
datasets: [{
label: yTitle,
data: values,
backgroundColor: 'rgba(54, 162, 235, 0.5)',
borderColor: 'rgba(54, 162, 235, 1)',
borderWidth: 1
}]
},
options: {
responsive: true,
scales: {
x: {
title: {
display: true,
text: xTitle,
font: { family: 'Vazir', size: 14 }
},
ticks: {
font: { family: 'Vazir', size: 12 }
}
},
y: {
title: {
display: true,
text: yTitle,
font: { family: 'Vazir', size: 14 }
},
ticks: {
font: { family: 'Vazir', size: 12 }
},
beginAtZero: true,
}
},
plugins: {
legend: {
labels: {
font: { family: 'Vazir', size: 12 }
}
},
tooltip: {
bodyFont: { family: 'Vazir', size: 12 },
titleFont: { family: 'Vazir', size: 14 }
}
},
layout: {
padding: 10
}
}
});
}

File diff suppressed because one or more lines are too long