feat: Add kanken completion percentage (kinda wip)

This commit is contained in:
Dendy 2025-09-21 07:03:02 +02:00
parent 1f40c781cd
commit 8f24f23130
3 changed files with 20 additions and 1 deletions

View File

@ -61,7 +61,7 @@ class KanjiController extends AbstractController
if (!$force and file_exists($cacheFile)) return require $cacheFile;
$ret = [];
$ret = ['lists' => []];
$lists = [
'sn' => $this->anki->getKnownSnKanjiCounts(),
@ -70,6 +70,8 @@ class KanjiController extends AbstractController
'ignored' => $this->getIgnoredList(),
];
$ret['lists'] = $lists;
// @formatter:off
$storedLists = [
'taiwan', 'bushu', 'kyoyou', 'kyuujitai', 'kanken', 'hsk', 'zhcn',
@ -77,13 +79,19 @@ class KanjiController extends AbstractController
];
// @formatter:on
foreach ($storedLists as $storedName) {
$ret['lists'][$storedName] = [];
$storedList = $this->charList->getList($storedName);
// Simple list
if (key_exists('chars', $storedList)) {
$ret['lists'][$storedName] = $storedList['chars'];
$lists[$storedName] = $storedList['chars'];
} else {
foreach ($storedList['sublists'] as $subname => $sublist) {
$ret['lists'][$storedName] = array_merge(
$ret['lists'][$storedName],
$sublist['chars'],
);
$lists["$storedName-$subname"] = $sublist['chars'];
}
}
@ -134,6 +142,7 @@ class KanjiController extends AbstractController
}
return $this->render(self::tmpl('grid'), [
'char_info' => $charInfo,
'characters' => $chars,
'completed' => $completedRows,
]);

View File

@ -18,6 +18,7 @@ class AppExtension extends AbstractExtension
// Reference: https://twig.symfony.com/doc/3.x/advanced.html#automatic-escaping
new TwigFilter('basename', basename(...)),
new TwigFilter('ruby', self::ankiRubyToHtml(...)),
new TwigFilter('intersect_key', array_intersect_key(...))
];
}

View File

@ -141,5 +141,14 @@
{% endif %}
{% endfor %}
</div>
<div class="bg-body border-top p-2 sticky-bottom">
{% set learnt_kanken = char_info.lists.unicode|intersect_key(char_info.lists.kanken)|length %}
{% set total_kanken = char_info.lists.kanken|length %}
Kanken {{ learnt_kanken }}/{{ total_kanken }} ({{ ((learnt_kanken/total_kanken) * 100)|number_format(2) }}%)
|
{% set sn_kanken = char_info.lists.sn|intersect_key(char_info.lists.kanken)|length %}
{{ sn_kanken }}/{{ total_kanken }} ({{ ((sn_kanken/total_kanken) * 100)|number_format(2) }}%)
</div>
</div>
{% endblock %}