mirror of https://github.com/go-gitea/gitea.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.4 KiB
74 lines
2.4 KiB
// Copyright 2024 The Gitea Authors. All rights reserved. |
|
// SPDX-License-Identifier: MIT |
|
|
|
package renderhelper |
|
|
|
import ( |
|
"context" |
|
"fmt" |
|
|
|
repo_model "code.gitea.io/gitea/models/repo" |
|
"code.gitea.io/gitea/modules/markup" |
|
"code.gitea.io/gitea/modules/util" |
|
) |
|
|
|
type RepoComment struct { |
|
ctx *markup.RenderContext |
|
opts RepoCommentOptions |
|
|
|
commitChecker *commitChecker |
|
repoLink string |
|
} |
|
|
|
func (r *RepoComment) CleanUp() { |
|
_ = r.commitChecker.Close() |
|
} |
|
|
|
func (r *RepoComment) IsCommitIDExisting(commitID string) bool { |
|
return r.commitChecker.IsCommitIDExisting(commitID) |
|
} |
|
|
|
func (r *RepoComment) ResolveLink(link, preferLinkType string) string { |
|
linkType, link := markup.ParseRenderedLink(link, preferLinkType) |
|
switch linkType { |
|
case markup.LinkTypeRoot: |
|
return r.ctx.ResolveLinkRoot(link) |
|
default: |
|
return r.ctx.ResolveLinkRelative(r.repoLink, r.opts.CurrentRefPath, link) |
|
} |
|
} |
|
|
|
var _ markup.RenderHelper = (*RepoComment)(nil) |
|
|
|
type RepoCommentOptions struct { |
|
DeprecatedRepoName string // it is only a patch for the non-standard "markup" api |
|
DeprecatedOwnerName string // it is only a patch for the non-standard "markup" api |
|
CurrentRefPath string // eg: "branch/main" or "commit/11223344" |
|
FootnoteContextID string // the extra context ID for footnotes, used to avoid conflicts with other footnotes in the same page |
|
} |
|
|
|
func NewRenderContextRepoComment(ctx context.Context, repo *repo_model.Repository, opts ...RepoCommentOptions) *markup.RenderContext { |
|
helper := &RepoComment{opts: util.OptionalArg(opts)} |
|
rctx := markup.NewRenderContext(ctx) |
|
helper.ctx = rctx |
|
var metas map[string]string |
|
if repo != nil { |
|
helper.repoLink = repo.Link() |
|
helper.commitChecker = newCommitChecker(ctx, repo) |
|
metas = repo.ComposeCommentMetas(ctx) |
|
} else { |
|
// repo can be nil when rendering a commit message in user's dashboard feedback whose repository has been deleted |
|
metas = map[string]string{} |
|
if helper.opts.DeprecatedOwnerName != "" { |
|
// this is almost dead code, only to pass the incorrect tests |
|
helper.repoLink = fmt.Sprintf("%s/%s", helper.opts.DeprecatedOwnerName, helper.opts.DeprecatedRepoName) |
|
metas["user"] = helper.opts.DeprecatedOwnerName |
|
metas["repo"] = helper.opts.DeprecatedRepoName |
|
} |
|
metas["markdownNewLineHardBreak"] = "true" |
|
metas["markupAllowShortIssuePattern"] = "true" |
|
} |
|
metas["footnoteContextId"] = helper.opts.FootnoteContextID |
|
rctx = rctx.WithMetas(metas).WithHelper(helper) |
|
return rctx |
|
}
|
|
|