mirror of
https://github.com/SqrtMinusOne/sqrtminusone.github.io.git
synced 2025-12-10 15:53:03 +03:00
330 lines
6.3 KiB
JavaScript
330 lines
6.3 KiB
JavaScript
const TODAY = new Date("2023-04-14");
|
|
const TODAY_LOCALE = TODAY.toLocaleDateString("en-GB");
|
|
|
|
const EMACS_ITEM = {
|
|
backgroundColor: "#8261bb",
|
|
borderColor: "black",
|
|
borderWidth: 0,
|
|
borderSkipped: false,
|
|
borderRadius: 0,
|
|
datalabels: {
|
|
color: "white",
|
|
},
|
|
};
|
|
|
|
const COLORS = [
|
|
"#77bceb",
|
|
"#ff6384",
|
|
"#77c0c0",
|
|
"#ff9f40",
|
|
"#ffcd56",
|
|
"#c9cbcf",
|
|
];
|
|
|
|
let i = 0;
|
|
|
|
const EMACS_DATA = {
|
|
labels: [
|
|
"Editor/IDE",
|
|
"File manager",
|
|
"Email",
|
|
"RSS",
|
|
"Passwords",
|
|
"Multimedia",
|
|
"WM",
|
|
],
|
|
datasets: [
|
|
{
|
|
label: "Jupyter",
|
|
data: [
|
|
{
|
|
name: "Editor/IDE",
|
|
span: [new Date("2018-10-24"), new Date("2021-04-01")],
|
|
},
|
|
],
|
|
yAxisID: "yAxis1",
|
|
},
|
|
{
|
|
label: "NeoVim",
|
|
data: [
|
|
{
|
|
name: "Editor/IDE",
|
|
span: [new Date("2019-03-30"), new Date("2020-10-12")],
|
|
},
|
|
],
|
|
yAxisID: "yAxis1",
|
|
},
|
|
{
|
|
label: "DataGrip",
|
|
data: [
|
|
{
|
|
name: "Editor/IDE",
|
|
span: [new Date("2020-02-01"), TODAY],
|
|
},
|
|
],
|
|
yAxisID: "yAxis1",
|
|
},
|
|
{
|
|
label: "Emacs",
|
|
data: [
|
|
{
|
|
name: "Editor/IDE",
|
|
span: [new Date("2020-10-12"), TODAY],
|
|
},
|
|
],
|
|
yAxisID: "yAxis1",
|
|
...EMACS_ITEM,
|
|
},
|
|
{
|
|
label: "vifm",
|
|
data: [
|
|
{
|
|
name: "File manager",
|
|
span: [new Date("2020-02-17"), new Date("2020-11-11")],
|
|
},
|
|
],
|
|
yAxisID: "yAxis2",
|
|
},
|
|
{
|
|
label: "Dired",
|
|
data: [
|
|
{
|
|
name: "File manager",
|
|
span: [new Date("2020-11-11"), TODAY],
|
|
},
|
|
],
|
|
yAxisID: "yAxis2",
|
|
...EMACS_ITEM,
|
|
},
|
|
{
|
|
label: "Mailspring",
|
|
data: [
|
|
{
|
|
name: "Email",
|
|
span: [new Date("2019-01-28"), new Date("2021-01-29")],
|
|
},
|
|
],
|
|
yAxisID: "yAxis3",
|
|
},
|
|
{
|
|
label: "notmuch",
|
|
data: [
|
|
{
|
|
name: "Email",
|
|
span: [new Date("2021-01-29"), TODAY],
|
|
},
|
|
],
|
|
yAxisID: "yAxis3",
|
|
...EMACS_ITEM,
|
|
},
|
|
{
|
|
label: "newsboat",
|
|
data: [
|
|
{
|
|
name: "RSS",
|
|
span: [new Date("2021-01-22"), new Date("2021-05-24")],
|
|
},
|
|
],
|
|
yAxisID: "yAxis4",
|
|
},
|
|
{
|
|
label: "elfeed",
|
|
data: [
|
|
{
|
|
name: "RSS",
|
|
span: [new Date("2021-05-24"), TODAY],
|
|
},
|
|
],
|
|
yAxisID: "yAxis4",
|
|
...EMACS_ITEM,
|
|
},
|
|
{
|
|
label: "Tiny Tiny RSS",
|
|
data: [
|
|
{
|
|
name: "RSS",
|
|
span: [new Date("2022-05-28"), TODAY],
|
|
hint: "Sync with elfeed",
|
|
},
|
|
],
|
|
yAxisID: "yAxis4",
|
|
},
|
|
{
|
|
label: "KeePassXC",
|
|
data: [
|
|
{
|
|
name: "Passwords",
|
|
span: [new Date("2019-01-31"), new Date("2021-07-26")],
|
|
},
|
|
],
|
|
yAxisID: "yAxis5",
|
|
},
|
|
{
|
|
label: "password-store & pass.el",
|
|
data: [
|
|
{
|
|
name: "Passwords",
|
|
span: [new Date("2021-07-26"), TODAY],
|
|
},
|
|
],
|
|
yAxisID: "yAxis5",
|
|
},
|
|
{
|
|
label: "MPD",
|
|
data: [
|
|
{
|
|
name: "Multimedia",
|
|
span: [new Date("2020-07-26"), TODAY],
|
|
},
|
|
],
|
|
yAxisID: "yAxis6",
|
|
},
|
|
{
|
|
label: "ncmpcpp",
|
|
data: [
|
|
{
|
|
name: "Multimedia",
|
|
span: [new Date("2020-07-26"), new Date("2021-07-31")],
|
|
},
|
|
],
|
|
yAxisID: "yAxis6",
|
|
},
|
|
{
|
|
label: "EMMS",
|
|
data: [
|
|
{
|
|
name: "Multimedia",
|
|
span: [new Date("2021-07-31"), TODAY],
|
|
},
|
|
],
|
|
yAxisID: "yAxis6",
|
|
...EMACS_ITEM,
|
|
},
|
|
{
|
|
label: "MPV",
|
|
data: [
|
|
{
|
|
name: "Multimedia",
|
|
span: [new Date("2021-09-07"), TODAY],
|
|
},
|
|
],
|
|
yAxisID: "yAxis6",
|
|
},
|
|
{
|
|
label: "Cinnamon",
|
|
data: [
|
|
{
|
|
name: "WM",
|
|
span: [new Date("2018-08-01"), new Date("2020-05-08")],
|
|
},
|
|
],
|
|
yAxisID: "yAxis7",
|
|
},
|
|
{
|
|
label: "i3(-gaps)",
|
|
data: [
|
|
{
|
|
name: "WM",
|
|
span: [new Date("2020-05-08"), new Date("2021-11-14")],
|
|
},
|
|
],
|
|
yAxisID: "yAxis7",
|
|
},
|
|
{
|
|
label: "EXWM",
|
|
data: [
|
|
{
|
|
name: "WM",
|
|
span: [new Date("2021-11-14"), TODAY],
|
|
},
|
|
],
|
|
yAxisID: "yAxis7",
|
|
...EMACS_ITEM,
|
|
},
|
|
].map((d) => {
|
|
if (!d.backgroundColor) {
|
|
d.backgroundColor = COLORS[i];
|
|
}
|
|
i = (i + 1) % COLORS.length;
|
|
return d;
|
|
}),
|
|
};
|
|
|
|
function emacsChart() {
|
|
const ctx = document.getElementById("chart-emacs-history");
|
|
new Chart(ctx, {
|
|
type: "bar",
|
|
data: EMACS_DATA,
|
|
plugins: [ChartDataLabels],
|
|
options: {
|
|
indexAxis: "y",
|
|
grouped: true,
|
|
aspectRatio: 1.2,
|
|
parsing: {
|
|
yAxisKey: "name",
|
|
xAxisKey: "span",
|
|
},
|
|
layout: {
|
|
padding: 1,
|
|
},
|
|
scales: {
|
|
x: {
|
|
type: "time",
|
|
min: new Date("2018-09"),
|
|
},
|
|
...Object.fromEntries(
|
|
[1, 2, 3, 4, 5, 6].map((i) => [
|
|
`yAxis${i}`,
|
|
{
|
|
display: false,
|
|
},
|
|
])
|
|
),
|
|
},
|
|
plugins: {
|
|
legend: {
|
|
display: false,
|
|
},
|
|
title: {
|
|
display: true,
|
|
text: "Everything goes into Emacs",
|
|
color: "black",
|
|
font: {
|
|
size: 15
|
|
}
|
|
},
|
|
datalabels: {
|
|
formatter: function (value, context) {
|
|
return context.dataset.label;
|
|
},
|
|
color: "black",
|
|
},
|
|
tooltip: {
|
|
callbacks: {
|
|
label: function (context) {
|
|
const startDate = new Date(
|
|
context.parsed._custom.start
|
|
).toLocaleDateString("en-GB");
|
|
let endDate = new Date(
|
|
context.parsed._custom.end
|
|
).toLocaleDateString("en-GB");
|
|
if (endDate === TODAY_LOCALE) {
|
|
endDate = "Today";
|
|
}
|
|
const label = context.dataset.label;
|
|
return `${label}: ${startDate} - ${endDate}`;
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|
|
}
|
|
|
|
document.addEventListener(
|
|
"DOMContentLoaded",
|
|
function () {
|
|
emacsChart();
|
|
},
|
|
false
|
|
);
|