feat: programmatic import of lists with sublists, "proper" styling

This commit is contained in:
Dendy 2025-09-03 08:02:08 +02:00
parent 11cae6aad1
commit 0c73ba8263
3 changed files with 54 additions and 5 deletions

View File

@ -32,9 +32,26 @@ class KanjiController extends AbstractController
'sn' => $this->anki->getKnownSnKanjiCounts(),
'sln' => $this->anki->getKnownSlnKanjiCounts(),
'unicode' => $this->anki->getUnicodeKanji(),
'taiwan' => $this->charList->getList('taiwan')['chars'],
];
// @formatter:off
$storedLists = [
'taiwan', 'bushu', 'kyoyou', 'kyuujitai', 'kanken', 'hsk', 'zhcn',
];
// @formatter:on
foreach ($storedLists as $storedName) {
$storedList = $this->charList->getList($storedName);
// Simple list
if (key_exists('chars', $storedList)) {
$lists[$storedName] = $storedList['chars'];
} else {
foreach ($storedList['sublists'] as $subname => $sublist) {
$lists["$storedName-$subname"] = $sublist['chars'];
}
}
}
foreach ($lists as $listName => $list) {
foreach (array_keys($list) as $char) {
$ret[$char] ??= [];

View File

@ -49,10 +49,11 @@ class CharListService
}
// Has children lists
$ret['sublists'] = [];
while (($title = fgets($file)) !== false) {
$title = mb_trim($title);
$code = mb_trim(fgets($file));
$ret[$code] = [
$ret['sublists'][$code] = [
'title' => mb_trim($title),
'full_title' => "{$ret['name']} {$title}",
'chars' => self::getKanjiBlockSet($file)

View File

@ -4,9 +4,40 @@
{% block body %}
<style>
.taiwan > .kanji-card { background-color: var(--bs-success); }
.sn > .kanji-card { background-color: var(--bs-danger); }
.sln > .kanji-card { background-color: var(--bs-warning); }
.sn > .kanji-card { background-color: var(--bs-danger); }
.sln > .kanji-card { background-color: var(--bs-warning); }
.taiwan > .kanji-card { background-color: hsl(300, 100%, 80%); color: black; }
.zhcn-n1 > .kanji-card { background-color: hsl(220, 100%, 90%); color: black; }
.zhcn-n2 > .kanji-card { background-color: hsl(220, 100%, 80%); color: black; }
.zhcn-n3 > .kanji-card { background-color: hsl(220, 100%, 60%); color: black; }
.hsk-n1 > .kanji-card { background-color: hsl(180, 100%, 90%); color: black; }
.hsk-n2 > .kanji-card { background-color: hsl(180, 100%, 85%); color: black; }
.hsk-n3 > .kanji-card { background-color: hsl(180, 100%, 80%); color: black; }
.hsk-n4 > .kanji-card { background-color: hsl(180, 100%, 75%); color: black; }
.hsk-n5 > .kanji-card { background-color: hsl(180, 100%, 70%); color: black; }
.hsk-n6 > .kanji-card { background-color: hsl(180, 100%, 65%); color: black; }
.hsk-n7_9 > .kanji-card { background-color: hsl(180, 100%, 40%); color: black; }
.kanken-n10 > .kanji-card { background-color: hsl( 0, 100%, 90%); color: black; }
.kanken-n9 > .kanji-card { background-color: hsl( 0, 100%, 80%); color: black; }
.kanken-n8 > .kanji-card { background-color: hsl( 0, 100%, 70%); color: black; }
.kanken-n7 > .kanji-card { background-color: hsl( 0, 100%, 60%); color: black; }
.kanken-n6 > .kanji-card { background-color: hsl( 0, 100%, 50%); color: black; }
.kanken-n5 > .kanji-card { background-color: hsl( 0, 100%, 40%); color: black; }
.kanken-n4 > .kanji-card { background-color: hsl( 0, 100%, 30%); color: white; }
.kanken-n3 > .kanji-card { background-color: hsl( 0, 100%, 20%); color: white; }
.kanken-np2 > .kanji-card { background-color: hsl( 85, 100%, 70%); color: black; }
.kanken-n2 > .kanji-card { background-color: hsl( 80, 100%, 50%); color: black; }
.kanken-np1 > .kanji-card { background-color: hsl( 60, 100%, 90%); color: black; }
.kanken-np1n1 > .kanji-card { background-color: hsl( 55, 100%, 70%); color: black; }
.kanken-n1 > .kanji-card { background-color: hsl( 50, 100%, 50%); color: black; }
.bushu > .kanji-card { background-color: hsl( 45, 100%, 0%); color: white; }
.kyuujitai > .kanji-card { background-color: hsl( 45, 100%, 30%); color: white; }
.kyoyou > .kanji-card { background-color: hsl( 45, 0%, 50%); color: white; }
</style>
<div class="example-wrapper">