Topdata wiki alignment links
This commit is contained in:
@@ -121,6 +121,7 @@ type wikiContext struct {
|
||||
namespaceTitles map[string]string
|
||||
namespacePaths map[string]string
|
||||
alignmentLinkPattern string
|
||||
alignmentLinkFormat string
|
||||
}
|
||||
|
||||
func buildWiki(p *project.Project, nativeResult BuildResult, force bool, progress func(string)) (wikiResult, error) {
|
||||
@@ -155,6 +156,7 @@ func buildWiki(p *project.Project, nativeResult BuildResult, force bool, progres
|
||||
ctx.manualSections = manualSections
|
||||
ctx.templateDir = p.TopDataWikiPageTemplatesDir()
|
||||
ctx.alignmentLinkPattern = p.EffectiveConfig().TopData.Wiki.AlignmentLinks.TargetPattern
|
||||
ctx.alignmentLinkFormat = p.EffectiveConfig().TopData.Wiki.AlignmentLinks.LinkFormat
|
||||
ctx.wikiTablesPath = filepath.Join(p.TopDataWikiSourceDir(), filepath.FromSlash(p.EffectiveConfig().TopData.Wiki.TablesFile))
|
||||
tableDefinitions, err := loadWikiTableDefinitions(ctx.wikiTablesPath)
|
||||
if err != nil {
|
||||
|
||||
@@ -1312,6 +1312,31 @@ func TestWikiTemplateFormatsPreferredAlignmentsWithConfiguredLinks(t *testing.T)
|
||||
}
|
||||
}
|
||||
|
||||
func TestWikiTemplateFormatsPreferredAlignmentsWithConfiguredRootAnchors(t *testing.T) {
|
||||
ctx := &wikiContext{
|
||||
alignmentLinkPattern: "/wiki/Guides/Alignment/{alignment}",
|
||||
alignmentLinkFormat: "html_anchor",
|
||||
}
|
||||
page := wikiTemplatePage{
|
||||
PageID: "racialtypes:tiefling",
|
||||
Category: "racialtypes",
|
||||
Key: "racialtypes:tiefling",
|
||||
Title: "Tiefling",
|
||||
Row: map[string]any{
|
||||
"PreferredAlignments": map[string]any{"list": []any{"le"}},
|
||||
},
|
||||
}
|
||||
|
||||
got, err := ctx.renderWikiTemplateString("racialtypes.html", `{{alignments(PreferredAlignments)}}`, page)
|
||||
if err != nil {
|
||||
t.Fatalf("render template: %v", err)
|
||||
}
|
||||
want := `<a class="wiki-internal-link" href="/wiki/Guides/Alignment/Lawful_Evil">Lawful Evil</a>`
|
||||
if got != want {
|
||||
t.Fatalf("expected %q, got %q", want, got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestWikiTemplateDescriptionFiltersExtractParagraphsAndSections(t *testing.T) {
|
||||
ctx := &wikiContext{}
|
||||
page := wikiTemplatePage{
|
||||
|
||||
@@ -367,7 +367,7 @@ func joinWikiTemplateValue(value any, sep string) string {
|
||||
}
|
||||
}
|
||||
|
||||
func (ctx *wikiContext) formatWikiTemplateAlignments(value any) (string, error) {
|
||||
func (ctx *wikiContext) formatWikiTemplateAlignments(value any) (any, error) {
|
||||
values, err := wikiTemplateAlignmentValues(value)
|
||||
if err != nil {
|
||||
return "", err
|
||||
@@ -389,13 +389,21 @@ func (ctx *wikiContext) formatWikiTemplateAlignments(value any) (string, error)
|
||||
if len(labels) == 0 {
|
||||
return "Any", nil
|
||||
}
|
||||
return strings.Join(labels, ", "), nil
|
||||
rendered := strings.Join(labels, ", ")
|
||||
if ctx != nil && strings.TrimSpace(ctx.alignmentLinkFormat) == "html_anchor" {
|
||||
return wikiTemplateHTML(rendered), nil
|
||||
}
|
||||
return rendered, nil
|
||||
}
|
||||
|
||||
func (ctx *wikiContext) renderWikiTemplateAlignmentLabel(label string) string {
|
||||
pattern := ""
|
||||
format := "wiki_markup"
|
||||
if ctx != nil {
|
||||
pattern = strings.TrimSpace(ctx.alignmentLinkPattern)
|
||||
if strings.TrimSpace(ctx.alignmentLinkFormat) != "" {
|
||||
format = strings.TrimSpace(ctx.alignmentLinkFormat)
|
||||
}
|
||||
}
|
||||
if pattern == "" {
|
||||
return label
|
||||
@@ -405,6 +413,9 @@ func (ctx *wikiContext) renderWikiTemplateAlignmentLabel(label string) string {
|
||||
if strings.TrimSpace(target) == "" {
|
||||
return label
|
||||
}
|
||||
if format == "html_anchor" {
|
||||
return `<a class="wiki-internal-link" href="` + html.EscapeString(target) + `">` + html.EscapeString(label) + `</a>`
|
||||
}
|
||||
return "[[" + target + "|" + label + "]]"
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user