templates

package
v0.0.0-...-bb05487 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 31, 2026 License: MIT Imports: 54 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var PageRenderer = sync.OnceValue(func() *pageRenderer {
	rendererType := util.Iif(setting.IsProd, "static", "auto-reloading")
	log.Debug("Creating %s HTML Renderer", rendererType)

	assetFS := AssetFS()
	tr := &tmplRender{
		collectTemplateNames: func() ([]string, error) {
			names, err := assetFS.ListAllFiles(".", true)
			if err != nil {
				return nil, err
			}
			names = slices.DeleteFunc(names, func(file string) bool {
				return strings.HasPrefix(file, "mail/") || !strings.HasSuffix(file, ".tmpl")
			})
			for i, file := range names {
				names[i] = strings.TrimSuffix(file, ".tmpl")
			}
			return names, nil
		},
		readTemplateContent: func(name string) ([]byte, error) {
			return assetFS.ReadFile(name + ".tmpl")
		},
	}

	pr := &pageRenderer{tmplRenderer: tr}
	if err := tr.recompileTemplates(pr.funcMapDummy()); err != nil {
		processStartupTemplateError(err)
	}

	if !setting.IsProd {
		go AssetFS().WatchLocalChanges(graceful.GetManager().ShutdownContext(), func() {
			if err := tr.recompileTemplates(pr.funcMapDummy()); err != nil {
				log.Error("Template error: %v\n%s", err, log.Stack(2))
			}
		})
	}
	return pr
})

Functions

func ActionContent2Commits

func ActionContent2Commits(act Actioner) *repository.PushCommits

ActionContent2Commits converts action content to push commits

func AssetFS

func AssetFS() *assetfs.LayeredFS

func AvatarHTML

func AvatarHTML(src string, size int, class, name string) template.HTML

AvatarHTML creates the HTML for an avatar

func BuiltinAssets

func BuiltinAssets() *assetfs.Layer

func CustomAssets

func CustomAssets() *assetfs.Layer

func HandleTemplateRenderingError

func HandleTemplateRenderingError(err error) string

func MailRendererReload

func MailRendererReload() error

func NewFuncMap

func NewFuncMap() template.FuncMap

NewFuncMap returns functions for injecting to templates

func PageRendererReload

func PageRendererReload() error

func QueryBuild

func QueryBuild(a ...any) template.URL

QueryBuild builds a query string from a list of key-value pairs. It omits the nil, false, zero int/int64 and empty string values, because they are default empty values for "ctx.FormXxx" calls. If 0 or false need to be included, use string values: "0" and "false". Build rules: * Even parameters: always build as query string: a=b&c=d * Odd parameters: * * {"/anything", param-pairs...} => "/?param-paris" * * {"anything?old-params", new-param-pairs...} => "anything?old-params&new-param-paris" * * Otherwise: {"old&params", new-param-pairs...} => "old&params&new-param-paris" * * Other behaviors are undefined yet.

func ReloadAllTemplates

func ReloadAllTemplates() error

func SanitizeHTML

func SanitizeHTML(s string) template.HTML

SanitizeHTML sanitizes the input by default sanitization rules.

func TimeSince

func TimeSince(then any) template.HTML

TimeSince renders relative time HTML given a time

Types

type Actioner

type Actioner interface {
	GetOpType() activities_model.ActionType
	GetActUserName(ctx context.Context) string
	GetRepoUserName(ctx context.Context) string
	GetRepoName(ctx context.Context) string
	GetRepoPath(ctx context.Context) string
	GetRepoLink(ctx context.Context) string
	GetBranch() string
	GetContent() string
	GetCreate() time.Time
	GetIssueInfos() []string
}

Actioner describes an action

type AvatarUtils

type AvatarUtils struct {
	// contains filtered or unexported fields
}

func NewAvatarUtils

func NewAvatarUtils(ctx context.Context) *AvatarUtils

func (*AvatarUtils) Avatar

func (au *AvatarUtils) Avatar(item any, others ...any) template.HTML

Avatar renders user avatars. args: user, size (int), class (string)

func (*AvatarUtils) AvatarByAction

func (au *AvatarUtils) AvatarByAction(action *activities_model.Action, others ...any) template.HTML

AvatarByAction renders user avatars from action. args: action, size (int), class (string)

func (*AvatarUtils) AvatarByEmail

func (au *AvatarUtils) AvatarByEmail(email, name string, others ...any) template.HTML

AvatarByEmail renders avatars by email address. args: email, name, size (int), class (string)

type DateUtils

type DateUtils struct{}

func NewDateUtils

func NewDateUtils() *DateUtils

func (*DateUtils) AbsoluteLong

func (du *DateUtils) AbsoluteLong(time any) template.HTML

AbsoluteLong renders in "January 01, 2006" format

func (*DateUtils) AbsoluteShort

func (du *DateUtils) AbsoluteShort(time any) template.HTML

AbsoluteShort renders in "Jan 01, 2006" format

func (*DateUtils) FullTime

func (du *DateUtils) FullTime(time any) template.HTML

FullTime renders in "Jan 01, 2006 20:33:44" format

func (*DateUtils) ParseLegacy

func (du *DateUtils) ParseLegacy(datetime string) time.Time

ParseLegacy parses the datetime in legacy format, eg: "2016-01-02" in server's timezone. It shouldn't be used in new code. New code should use Time or TimeStamp as much as possible.

func (*DateUtils) TimeSince

func (du *DateUtils) TimeSince(time any) template.HTML

type JsonUtils

type JsonUtils struct{} //nolint:revive // variable naming triggers on Json, wants JSON

func NewJsonUtils

func NewJsonUtils() *JsonUtils

func (*JsonUtils) EncodeToString

func (su *JsonUtils) EncodeToString(v any) string

func (*JsonUtils) PrettyIndent

func (su *JsonUtils) PrettyIndent(s string) string

type MailRender

type MailRender struct {
	TemplateNames []string
	BodyTemplates struct {
		HasTemplate     func(name string) bool
		ExecuteTemplate func(w io.Writer, name string, data any) error
	}

	// FIXME: MAIL-TEMPLATE-SUBJECT: only "issue" related messages support using subject from templates
	// It is an incomplete implementation from "Use templates for issue e-mail subject and body" upstream https://github.com/go-gitea/gitea/pull/8329
	SubjectTemplates *texttmpl.Template
	// contains filtered or unexported fields
}

func MailRenderer

func MailRenderer() *MailRender

func (*MailRender) MockTemplate

func (r *MailRender) MockTemplate(name, subject, body string) func()

type MarkdownEditorContext

type MarkdownEditorContext struct {
	PreviewMode    string // "comment", "wiki", or empty for general
	PreviewContext string // the path for resolving the links in the preview (repo preview already has default correct value)
	PreviewLink    string
	MentionsLink   string
}

type MiscUtils

type MiscUtils struct {
	// contains filtered or unexported fields
}

func NewMiscUtils

func NewMiscUtils(ctx context.Context) *MiscUtils

func (*MiscUtils) MarkdownEditorComment

func (m *MiscUtils) MarkdownEditorComment(repo *repo_model.Repository) *MarkdownEditorContext

func (*MiscUtils) MarkdownEditorGeneral

func (m *MiscUtils) MarkdownEditorGeneral(owner *user_model.User) *MarkdownEditorContext

func (*MiscUtils) MarkdownEditorWiki

func (m *MiscUtils) MarkdownEditorWiki(repo *repo_model.Repository) *MarkdownEditorContext

type RenderUtils

type RenderUtils struct {
	// contains filtered or unexported fields
}

func NewRenderUtils

func NewRenderUtils(ctx reqctx.RequestContext) *RenderUtils

func (*RenderUtils) MarkdownToHtml

func (ut *RenderUtils) MarkdownToHtml(input string) template.HTML

func (*RenderUtils) RenderCommitBody

func (ut *RenderUtils) RenderCommitBody(msg string, repo *repo.Repository) template.HTML

RenderCommitBody extracts the body of a commit message without its title.

func (*RenderUtils) RenderCommitMessage

func (ut *RenderUtils) RenderCommitMessage(msg string, repo *repo.Repository) template.HTML

RenderCommitMessage renders commit message with XSS-safe and special links.

func (*RenderUtils) RenderCommitMessageLinkSubject

func (ut *RenderUtils) RenderCommitMessageLinkSubject(msg, urlDefault string, repo *repo.Repository) template.HTML

RenderCommitMessageLinkSubject renders commit message as a XSS-safe link to the provided default url, handling for special links without email to links.

func (*RenderUtils) RenderEmoji

func (ut *RenderUtils) RenderEmoji(text string) template.HTML

RenderEmoji renders html text with emoji post processors

func (*RenderUtils) RenderIssueSimpleTitle

func (ut *RenderUtils) RenderIssueSimpleTitle(text string) template.HTML

RenderIssueSimpleTitle only renders with emoji and inline code block

func (*RenderUtils) RenderIssueTitle

func (ut *RenderUtils) RenderIssueTitle(text string, repo *repo.Repository) template.HTML

RenderIssueTitle renders issue/pull title with defined post processors

func (*RenderUtils) RenderLabel

func (ut *RenderUtils) RenderLabel(label *issues_model.Label) template.HTML
func (ut *RenderUtils) RenderLabelWithLink(label *issues_model.Label, link any) template.HTML

func (*RenderUtils) RenderLabels

func (ut *RenderUtils) RenderLabels(labels []*issues_model.Label, repoLink string, issue *issues_model.Issue) template.HTML

func (*RenderUtils) RenderThemeItem

func (ut *RenderUtils) RenderThemeItem(info *webtheme.ThemeMetaInfo, iconSize int) template.HTML

func (*RenderUtils) RenderTimelineEventBadge

func (ut *RenderUtils) RenderTimelineEventBadge(c *issues_model.Comment) template.HTML

func (*RenderUtils) RenderTimelineEventComment

func (ut *RenderUtils) RenderTimelineEventComment(c *issues_model.Comment, createdStr template.HTML) template.HTML

type SliceUtils

type SliceUtils struct{}

func NewSliceUtils

func NewSliceUtils() *SliceUtils

func (*SliceUtils) Contains

func (su *SliceUtils) Contains(s, v any) bool

type StringUtils

type StringUtils struct{}

func NewStringUtils

func NewStringUtils() *StringUtils

func (*StringUtils) Contains

func (su *StringUtils) Contains(s, substr string) bool

func (*StringUtils) Cut

func (su *StringUtils) Cut(s, sep string) []any

func (*StringUtils) EllipsisString

func (su *StringUtils) EllipsisString(s string, maxLength int) string

func (*StringUtils) HasPrefix

func (su *StringUtils) HasPrefix(s, prefix string) bool

func (*StringUtils) Join

func (su *StringUtils) Join(a []string, sep string) string

func (*StringUtils) Split

func (su *StringUtils) Split(s, sep string) []string

func (*StringUtils) ToString

func (su *StringUtils) ToString(v any) string

func (*StringUtils) ToUpper

func (su *StringUtils) ToUpper(s string) string

func (*StringUtils) TrimPrefix

func (su *StringUtils) TrimPrefix(s, prefix string) string

type TemplateExecutor

type TemplateExecutor scopedtmpl.TemplateExecutor

type TplName

type TplName string

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL