mirror of
https://github.com/go-gitea/gitea.git
synced 2026-10-30 18:04:00 +00:00
Fixes markdown rendering details where Gitea deviated from GitHub unintentionally, and adds a `/devtest/markdown` page to review markdown rendering. - Paragraphs get the intended 1.5 line height - Blockquotes, alerts and definition lists no longer inherit browser default margins - Loose task lists keep their spacing, the checkbox renders inside the paragraph like on GitHub - Footnote references render as `[1]` so adjacent ones stay apart without CSS - Code in headings, headings in summaries, nested ordered lists, tables, `<mark>`, alert icons and `<hr>` follow GitHub Co-authored-by: bircni <bircni@icloud.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
63 lines
1.7 KiB
Go
63 lines
1.7 KiB
Go
// Copyright 2024 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package markdown
|
|
|
|
import (
|
|
"strconv"
|
|
|
|
"gitea.dev/modules/markup"
|
|
|
|
"github.com/yuin/goldmark/ast"
|
|
east "github.com/yuin/goldmark/extension/ast"
|
|
"github.com/yuin/goldmark/renderer/html"
|
|
"github.com/yuin/goldmark/util"
|
|
)
|
|
|
|
func (r *HTMLRenderer) renderTaskCheckBox(w util.BufWriter, source []byte, node ast.Node, entering bool) (ast.WalkStatus, error) {
|
|
checkBox, ok := node.(*east.TaskCheckBox)
|
|
if !entering || !ok {
|
|
return ast.WalkContinue, nil
|
|
}
|
|
_, _ = w.WriteString(`<input type="checkbox" disabled=""`)
|
|
html.RenderAttributes(w, checkBox, nil)
|
|
if checkBox.IsChecked {
|
|
_, _ = w.WriteString(` checked=""`)
|
|
}
|
|
if r.XHTML {
|
|
_, _ = w.WriteString(` />`)
|
|
} else {
|
|
_ = w.WriteByte('>')
|
|
}
|
|
return ast.WalkContinue, nil
|
|
}
|
|
|
|
func (g *ASTTransformer) transformList(_ *markup.RenderContext, v *ast.List, rc *RenderConfig) {
|
|
for listItem := v.FirstChild(); listItem != nil; listItem = listItem.NextSibling() {
|
|
block := listItem.FirstChild()
|
|
if block == nil {
|
|
continue
|
|
}
|
|
checkBox, ok := block.FirstChild().(*east.TaskCheckBox)
|
|
if !ok {
|
|
continue
|
|
}
|
|
listItem.SetAttributeString(g.renderInternal.SafeAttr("class"), []byte(g.renderInternal.SafeValue("task-list-item")))
|
|
if lines := block.Lines(); lines.Len() > 0 {
|
|
checkBox.SetAttributeString("data-source-position", []byte(strconv.Itoa(rc.metaLength+lines.At(0).Start)))
|
|
}
|
|
}
|
|
|
|
nestedList := false
|
|
for p := v.Parent(); p != nil; p = p.Parent() {
|
|
if _, ok := p.(*ast.List); ok {
|
|
nestedList = true
|
|
break
|
|
}
|
|
}
|
|
if !nestedList {
|
|
// "dir=auto" should be only added to top-level "ul". https://github.com/go-gitea/gitea/issues/35058
|
|
g.applyElementDir(v)
|
|
}
|
|
}
|