@ -7,32 +7,42 @@ import (
"fmt"
"strings"
"code.gitea.io/gitea/modules/markup"
"github.com/yuin/goldmark/ast"
"gopkg.in/yaml.v3"
)
// RenderConfig represents rendering configuration for this file
type RenderConfig struct {
Meta string
Meta markup . RenderMetaMode
Icon string
TOC bool
TOC string // "false": hide, "side"/empty: in sidebar, "main"/"true": in main view
Lang string
yamlNode * yaml . Node
}
func renderMetaModeFromString ( s string ) markup . RenderMetaMode {
switch strings . TrimSpace ( strings . ToLower ( s ) ) {
case "none" :
return markup . RenderMetaAsNone
case "table" :
return markup . RenderMetaAsTable
default : // "details"
return markup . RenderMetaAsDetails
}
}
// UnmarshalYAML implement yaml.v3 UnmarshalYAML
func ( rc * RenderConfig ) UnmarshalYAML ( value * yaml . Node ) error {
if rc == nil {
rc = & RenderConfig {
Meta : "table" ,
Icon : "table" ,
Lang : "" ,
}
return nil
}
rc . yamlNode = value
type commonRenderConfig struct {
TOC bool ` yaml:"include_toc" `
TOC string ` yaml:"include_toc" `
Lang string ` yaml:"lang" `
}
var basic commonRenderConfig
@ -54,58 +64,45 @@ func (rc *RenderConfig) UnmarshalYAML(value *yaml.Node) error {
if err := value . Decode ( & stringBasic ) ; err == nil {
if stringBasic . Gitea != "" {
switch strings . TrimSpace ( strings . ToLower ( stringBasic . Gitea ) ) {
case "none" :
rc . Meta = "none"
case "table" :
rc . Meta = "table"
default : // "details"
rc . Meta = "details"
}
rc . Meta = renderMetaModeFromString ( stringBasic . Gitea )
}
return nil
}
type giteaControl struct {
type yamlRenderConfig struct {
Meta * string ` yaml:"meta" `
Icon * string ` yaml:"details_icon" `
TOC * bool ` yaml:"include_toc" `
TOC * string ` yaml:"include_toc" `
Lang * string ` yaml:"lang" `
}
type complexGiteaConfig struct {
Gitea * giteaControl ` yaml:"gitea" `
type yamlRenderConfigWrapper struct {
Gitea * yamlRenderConfig ` yaml:"gitea" `
}
var complex complexGiteaConfig
if err := value . Decode ( & complex ) ; err != nil {
return fmt . Errorf ( "unable to decode into complexRenderConfig %w" , err )
var cfg yamlRenderConfigWrapper
if err := value . Decode ( & cfg ) ; err != nil {
return fmt . Errorf ( "unable to decode into yamlRenderConfigWrapper %w" , err )
}
if c omplex . Gitea == nil {
if c fg . Gitea == nil {
return nil
}
if complex . Gitea . Meta != nil {
switch strings . TrimSpace ( strings . ToLower ( * complex . Gitea . Meta ) ) {
case "none" :
rc . Meta = "none"
case "table" :
rc . Meta = "table"
default : // "details"
rc . Meta = "details"
}
if cfg . Gitea . Meta != nil {
rc . Meta = renderMetaModeFromString ( * cfg . Gitea . Meta )
}
if c omplex . Gitea . Icon != nil {
rc . Icon = strings . TrimSpace ( strings . ToLower ( * c omplex . Gitea . Icon ) )
if cfg . Gitea . Icon != nil {
rc . Icon = strings . TrimSpace ( strings . ToLower ( * cfg . Gitea . Icon ) )
}
if c omplex . Gitea . Lang != nil && * c omplex . Gitea . Lang != "" {
rc . Lang = * c omplex . Gitea . Lang
if cfg . Gitea . Lang != nil && * cfg . Gitea . Lang != "" {
rc . Lang = * c fg . Gitea . Lang
}
if c omplex . Gitea . TOC != nil {
rc . TOC = * c omplex . Gitea . TOC
if c fg . Gitea . TOC != nil {
rc . TOC = * c fg . Gitea . TOC
}
return nil
@ -116,9 +113,9 @@ func (rc *RenderConfig) toMetaNode() ast.Node {
return nil
}
switch rc . Meta {
case "table" :
case markup . RenderMetaAsTable :
return nodeToTable ( rc . yamlNode )
case "details" :
case markup . RenderMetaAsDetails :
return nodeToDetails ( rc . yamlNode , rc . Icon )
default :
return nil