mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-06-19 15:40:50 +00:00
Improve Wiki TOC (#24137)
The old code has a lot of technical debts, eg: `repo/wiki/view.tmpl` / `Iterate` This PR improves the Wiki TOC display and improves the code. --------- Co-authored-by: delvh <dev.lh@web.de>
This commit is contained in:
parent
f045e58cc7
commit
1ab16e48cc
12 changed files with 129 additions and 118 deletions
|
@ -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"`
|
||||
}
|
||||
var complex complexGiteaConfig
|
||||
if err := value.Decode(&complex); err != nil {
|
||||
return fmt.Errorf("unable to decode into complexRenderConfig %w", err)
|
||||
type yamlRenderConfigWrapper struct {
|
||||
Gitea *yamlRenderConfig `yaml:"gitea"`
|
||||
}
|
||||
|
||||
if complex.Gitea == nil {
|
||||
var cfg yamlRenderConfigWrapper
|
||||
if err := value.Decode(&cfg); err != nil {
|
||||
return fmt.Errorf("unable to decode into yamlRenderConfigWrapper %w", err)
|
||||
}
|
||||
|
||||
if cfg.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 complex.Gitea.Icon != nil {
|
||||
rc.Icon = strings.TrimSpace(strings.ToLower(*complex.Gitea.Icon))
|
||||
if cfg.Gitea.Icon != nil {
|
||||
rc.Icon = strings.TrimSpace(strings.ToLower(*cfg.Gitea.Icon))
|
||||
}
|
||||
|
||||
if complex.Gitea.Lang != nil && *complex.Gitea.Lang != "" {
|
||||
rc.Lang = *complex.Gitea.Lang
|
||||
if cfg.Gitea.Lang != nil && *cfg.Gitea.Lang != "" {
|
||||
rc.Lang = *cfg.Gitea.Lang
|
||||
}
|
||||
|
||||
if complex.Gitea.TOC != nil {
|
||||
rc.TOC = *complex.Gitea.TOC
|
||||
if cfg.Gitea.TOC != nil {
|
||||
rc.TOC = *cfg.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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue