mirror of
https://gitea.com/gitea/tea.git
synced 2024-12-21 00:25:06 +01:00
d2295828d0
Path-only URLs need an absolute reference to be resolved against for printing in markdown Previously we resolved against the URL to the resource we were operating on (eg comment or issue URL). The markdown renderer in the web UI resolves all such URLs relative to the repo base URL. This PR adopts this behaviour in tea, by trimming the URL to a repo base URL via regex. This makes a custom patch to our markdown renderer `glamour` obsolete, which turned out to be an incorrect patch, meaning we can make use of upstream glamour again. Co-authored-by: Norwin <git@nroo.de> Reviewed-on: https://gitea.com/gitea/tea/pulls/401 Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com> Reviewed-by: 6543 <6543@obermui.de> Co-authored-by: Norwin <noerw@noreply.gitea.io> Co-committed-by: Norwin <noerw@noreply.gitea.io>
79 lines
1.5 KiB
Go
79 lines
1.5 KiB
Go
package ansi
|
|
|
|
import (
|
|
"io"
|
|
"net/url"
|
|
)
|
|
|
|
// A LinkElement is used to render hyperlinks.
|
|
type LinkElement struct {
|
|
Text string
|
|
BaseURL string
|
|
URL string
|
|
Child ElementRenderer // FIXME
|
|
}
|
|
|
|
func (e *LinkElement) Render(w io.Writer, ctx RenderContext) error {
|
|
var textRendered bool
|
|
if len(e.Text) > 0 && e.Text != e.URL {
|
|
textRendered = true
|
|
|
|
el := &BaseElement{
|
|
Token: e.Text,
|
|
Style: ctx.options.Styles.LinkText,
|
|
}
|
|
err := el.Render(w, ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
/*
|
|
if node.LastChild != nil {
|
|
if node.LastChild.Type == bf.Image {
|
|
el := tr.NewElement(node.LastChild)
|
|
err := el.Renderer.Render(w, node.LastChild, tr)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if len(node.LastChild.Literal) > 0 &&
|
|
string(node.LastChild.Literal) != string(node.LinkData.Destination) {
|
|
textRendered = true
|
|
el := &BaseElement{
|
|
Token: string(node.LastChild.Literal),
|
|
Style: ctx.style[LinkText],
|
|
}
|
|
err := el.Render(w, node.LastChild, tr)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
*/
|
|
|
|
u, err := url.Parse(e.URL)
|
|
if err == nil &&
|
|
"#"+u.Fragment != e.URL { // if the URL only consists of an anchor, ignore it
|
|
pre := " "
|
|
style := ctx.options.Styles.Link
|
|
if !textRendered {
|
|
pre = ""
|
|
style.BlockPrefix = ""
|
|
style.BlockSuffix = ""
|
|
}
|
|
|
|
el := &BaseElement{
|
|
Token: resolveRelativeURL(e.BaseURL, e.URL),
|
|
Prefix: pre,
|
|
Style: style,
|
|
}
|
|
err := el.Render(w, ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|