| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- // 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
- }
|