moved layout html templates to subfolder html

weaponskill should be i list of skills when exported to PDF
This commit is contained in:
2025-12-28 22:28:05 +01:00
parent 0983ca0139
commit 21b6c3e2dc
11 changed files with 152 additions and 6 deletions
+1 -1
View File
@@ -281,7 +281,7 @@ func (p *Paginator) applyFilter(items interface{}, filter string) interface{} {
include := false
switch filter {
case "learned":
include = skill.IsLearned && skill.Category != "Sprache"
include = (skill.IsLearned || skill.Category == "Waffenfertigkeit") && skill.Category != "Sprache"
case "unlearned":
include = !skill.IsLearned && skill.Category != "Sprache"
case "language", "languages":
+1 -1
View File
@@ -92,7 +92,7 @@ func PreparePaginatedPageData(viewModel *CharacterSheetViewModel, templateName s
for _, skill := range viewModel.Skills {
if skill.Category == "Sprache" {
languageSkills = append(languageSkills, skill)
} else if skill.IsLearned {
} else if skill.IsLearned || skill.Category == "Waffenfertigkeit" {
learnedSkills = append(learnedSkills, skill)
}
}
@@ -0,0 +1,146 @@
package pdfrender
import (
"testing"
"bamort/models"
)
func TestWeaponSkillsAppearInSkillsList(t *testing.T) {
char := &models.Char{
BamortBase: models.BamortBase{
ID: 1,
Name: "Test Fighter",
},
Fertigkeiten: []models.SkFertigkeit{
{
BamortCharTrait: models.BamortCharTrait{BamortBase: models.BamortBase{Name: "Klettern"}},
Fertigkeitswert: 10,
Category: "Körper",
},
},
Waffenfertigkeiten: []models.SkWaffenfertigkeit{
{
SkFertigkeit: models.SkFertigkeit{
BamortCharTrait: models.BamortCharTrait{BamortBase: models.BamortBase{Name: "Langschwert"}},
Fertigkeitswert: 12,
},
},
{
SkFertigkeit: models.SkFertigkeit{
BamortCharTrait: models.BamortCharTrait{BamortBase: models.BamortBase{Name: "Dolch"}},
Fertigkeitswert: 8,
},
},
},
}
vm, err := MapCharacterToViewModel(char)
if err != nil {
t.Fatalf("MapCharacterToViewModel failed: %v", err)
}
// Should have 3 skills: 1 regular + 2 weapon skills
expectedSkillCount := 3
if len(vm.Skills) != expectedSkillCount {
t.Errorf("Expected %d skills, got %d", expectedSkillCount, len(vm.Skills))
for i, s := range vm.Skills {
t.Logf(" Skill %d: %s (Category: %s)", i, s.Name, s.Category)
}
}
// Check that weapon skills are present
foundLangschwert := false
foundDolch := false
for _, skill := range vm.Skills {
if skill.Name == "Langschwert" && skill.Category == "Waffenfertigkeit" {
foundLangschwert = true
if skill.Value != 12 {
t.Errorf("Langschwert value: expected 12, got %d", skill.Value)
}
}
if skill.Name == "Dolch" && skill.Category == "Waffenfertigkeit" {
foundDolch = true
if skill.Value != 8 {
t.Errorf("Dolch value: expected 8, got %d", skill.Value)
}
}
}
if !foundLangschwert {
t.Error("Langschwert weapon skill not found in Skills list")
}
if !foundDolch {
t.Error("Dolch weapon skill not found in Skills list")
}
}
func TestWeaponSkillsAppearOnPage2(t *testing.T) {
char := &models.Char{
BamortBase: models.BamortBase{
ID: 1,
Name: "Test Fighter",
},
Fertigkeiten: []models.SkFertigkeit{
{
BamortCharTrait: models.BamortCharTrait{BamortBase: models.BamortBase{Name: "Klettern"}},
Fertigkeitswert: 10,
Category: "Körper",
},
},
Waffenfertigkeiten: []models.SkWaffenfertigkeit{
{
SkFertigkeit: models.SkFertigkeit{
BamortCharTrait: models.BamortCharTrait{BamortBase: models.BamortBase{Name: "Langschwert"}},
Fertigkeitswert: 12,
},
},
{
SkFertigkeit: models.SkFertigkeit{
BamortCharTrait: models.BamortCharTrait{BamortBase: models.BamortBase{Name: "Dolch"}},
Fertigkeitswert: 8,
},
},
},
}
vm, err := MapCharacterToViewModel(char)
if err != nil {
t.Fatalf("MapCharacterToViewModel failed: %v", err)
}
pageData, err := PreparePaginatedPageData(vm, "page_2.html", 2, "2024-01-01")
if err != nil {
t.Fatalf("PreparePaginatedPageData failed: %v", err)
}
// SkillsLearned should contain both regular skills and weapon skills
// Expected: Klettern + Langschwert + Dolch = 3 learned skills
expectedLearnedCount := 3
if len(pageData.SkillsLearned) < expectedLearnedCount {
t.Errorf("Expected at least %d learned skills on page 2, got %d", expectedLearnedCount, len(pageData.SkillsLearned))
t.Log("SkillsLearned contents:")
for i, s := range pageData.SkillsLearned {
t.Logf(" %d: %s (Category: %s, Value: %d)", i, s.Name, s.Category, s.Value)
}
}
// Verify weapon skills are in SkillsLearned
foundLangschwert := false
foundDolch := false
for _, skill := range pageData.SkillsLearned {
if skill.Name == "Langschwert" {
foundLangschwert = true
}
if skill.Name == "Dolch" {
foundDolch = true
}
}
if !foundLangschwert {
t.Error("Langschwert weapon skill not found in page 2 SkillsLearned")
}
if !foundDolch {
t.Error("Dolch weapon skill not found in page 2 SkillsLearned")
}
}
@@ -42,13 +42,13 @@
<!-- Combat stats -->
<div class="combat-stats">
<div><strong>Abwehr + {{.DerivedValues.Abwehr}}+{{.DerivedValues.AbwehrBonus}}</strong></div>
<div><strong>+</strong> <span class="combat-stats-small">mit Vert.<br>waffe</span></div>
<div><strong>+</strong> <span class="combat-stats-small">mit Vert. waffe</span></div>
<div><strong>Resistenz + {{.DerivedValues.ResistenzKoerper}}+{{.DerivedValues.ResistenzBonusKoerper}}/{{.DerivedValues.ResistenzGeist}}+{{.DerivedValues.ResistenzBonusGeist}}</strong></div>
<div><strong>Zaubern + {{.DerivedValues.Zaubern}}+{{.DerivedValues.ZauberBonus}}</strong></div>
</div>
<!-- Skills tables -->
<div class="skills-row">
<!-- BLOCK: skills_learned, TYPE: skills, MAX: 22, FILTER: learned -->
<!-- BLOCK: skills_learned, TYPE: skills, MAX: 19, FILTER: learned -->
<table class="skills-table">
<tr>
<th>Fertigkeit</th>
@@ -78,7 +78,7 @@
<tr><td>Schwimmen+(3)</td> <td>Wahrnehmung+(6)</td></tr>
<tr><td>Seilkunst+(3)</td> <td>&nbsp;</td></tr>
</table>
<!-- BLOCK: skills_languages, TYPE: skills, MAX: 8, FILTER: language -->
<!-- BLOCK: skills_languages, TYPE: skills, MAX: 5, FILTER: language -->
<table class="skills-table" style="width: 100%; height: unset;">
<tr>
<th>Fertigkeit</th>
@@ -140,7 +140,7 @@
<!-- Weapons table -->
<div class="margin-bottom-3">
<!-- BLOCK: weapons_main, TYPE: weapons, MAX: 22 -->
<!-- BLOCK: weapons_main, TYPE: weapons, MAX: 21 -->
<table class="weapons-table">
<tr>
<th>Waffe</th>