blog.notmyidea.org/mnmlist/templates/worklog-en.html

101 lines
2.5 KiB
HTML

{% extends "page.html" %} {% block extra_head %}
<script src="https://cdn.jsdelivr.net/npm/vega@5"></script>
<script src="https://cdn.jsdelivr.net/npm/vega-lite@5"></script>
<script src="https://cdn.jsdelivr.net/npm/vega-embed@6"></script>
{% endblock extra_head %} {% block content %}
<header>
<figure>
<h1 class="post-title">{{ page.title }}</h1>
<figcaption>Work journal</figcaption>
</figure>
<details>
<summary>Stats</summary>
<table>
<thead>
<tr>
<td>Month</td>
<td>Hours</td>
</tr>
</thead>
<tbody>
{% for month, hours in page.metadata.worklog.monthly_hours.items() %}
<tr>
<td>{{ month }}</td>
<td>{{ hours['payed'] }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</details>
</header>
<article>
<div id="vis"></div>
{{ page.content }}
</article>
<script>
const spec = {
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"width": 500,
"height": 200,
"data":
{
"name": "table",
"values": [
{% for date, item in page.metadata.worklog.data.items() %}
{"date": "{{ date }}", "series": "Worked", "count": {{ item['payed_hours'] }}, "happiness": {{ item['happiness'] }}},
{% endfor %}
]
}
,
"layer": [
{
"mark": "bar",
"encoding": {
"x": {
"timeUnit": {"unit": "", "utc": true},
"field": "date",
"axis": {"format": "%d/%m"},
"title": "Date"
},
"y": {
"aggregate": "sum",
"field": "count",
"title": "Hours"
},
"color": {
"field": "series",
"scale": {
"domain": ["Worked"],
"range": ["purple"]
}
}
}
},
{
"mark": "circle",
"encoding": {
"x": {
"timeUnit": {"unit": "", "utc": true},
"field": "date"
},
"y": {
"field": "happiness",
"title": "Happiness",
"scale": {"reverse": true} // Reverse only the y-axis for happiness
},
"color": {
"value": "black"
}
}
}
]
};
vegaEmbed("#vis", spec)
// result.view provides access to the Vega View API
.then(result => console.log(result))
.catch(console.warn);
</script>
{% endblock content %}