mirror of
https://github.com/go-gitea/gitea.git
synced 2024-12-21 17:23:55 +08:00
43 lines
1.2 KiB
Go
43 lines
1.2 KiB
Go
|
// Copyright 2024 The Gitea Authors. All rights reserved.
|
||
|
// SPDX-License-Identifier: MIT
|
||
|
|
||
|
package markup
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"strings"
|
||
|
|
||
|
"code.gitea.io/gitea/modules/httplib"
|
||
|
"code.gitea.io/gitea/modules/setting"
|
||
|
"code.gitea.io/gitea/modules/util"
|
||
|
)
|
||
|
|
||
|
func resolveLinkRelative(ctx context.Context, base, cur, link string, absolute bool) (finalLink string) {
|
||
|
if IsFullURLString(link) {
|
||
|
return link
|
||
|
}
|
||
|
if strings.HasPrefix(link, "/") {
|
||
|
if strings.HasPrefix(link, base) && strings.Count(base, "/") >= 4 {
|
||
|
// a trick to tolerate that some users were using absolut paths (the old gitea's behavior)
|
||
|
finalLink = link
|
||
|
} else {
|
||
|
finalLink = util.URLJoin(base, "./", link)
|
||
|
}
|
||
|
} else {
|
||
|
finalLink = util.URLJoin(base, "./", cur, link)
|
||
|
}
|
||
|
finalLink = strings.TrimSuffix(finalLink, "/")
|
||
|
if absolute {
|
||
|
finalLink = httplib.MakeAbsoluteURL(ctx, finalLink)
|
||
|
}
|
||
|
return finalLink
|
||
|
}
|
||
|
|
||
|
func (ctx *RenderContext) ResolveLinkRelative(base, cur, link string) (finalLink string) {
|
||
|
return resolveLinkRelative(ctx, base, cur, link, ctx.RenderOptions.UseAbsoluteLink)
|
||
|
}
|
||
|
|
||
|
func (ctx *RenderContext) ResolveLinkApp(link string) string {
|
||
|
return ctx.ResolveLinkRelative(setting.AppSubURL+"/", "", link)
|
||
|
}
|