2023-04-29 15:02:29 +03:00
// Copyright 2023 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package templates
import (
"context"
"fmt"
"html"
"html/template"
activities_model "code.gitea.io/gitea/models/activities"
"code.gitea.io/gitea/models/avatars"
"code.gitea.io/gitea/models/organization"
repo_model "code.gitea.io/gitea/models/repo"
user_model "code.gitea.io/gitea/models/user"
gitea_html "code.gitea.io/gitea/modules/html"
"code.gitea.io/gitea/modules/setting"
)
2023-08-10 06:19:39 +03:00
type AvatarUtils struct {
ctx context . Context
}
func NewAvatarUtils ( ctx context . Context ) * AvatarUtils {
return & AvatarUtils { ctx : ctx }
}
2023-04-29 15:02:29 +03:00
// AvatarHTML creates the HTML for an avatar
func AvatarHTML ( src string , size int , class , name string ) template . HTML {
sizeStr := fmt . Sprintf ( ` %d ` , size )
if name == "" {
name = "avatar"
}
return template . HTML ( ` <img class=" ` + class + ` " src=" ` + src + ` " title=" ` + html . EscapeString ( name ) + ` " width=" ` + sizeStr + ` " height=" ` + sizeStr + ` "/> ` )
}
// Avatar renders user avatars. args: user, size (int), class (string)
2023-08-10 06:19:39 +03:00
func ( au * AvatarUtils ) Avatar ( item any , others ... any ) template . HTML {
2023-04-29 15:02:29 +03:00
size , class := gitea_html . ParseSizeAndClass ( avatars . DefaultAvatarPixelSize , avatars . DefaultAvatarClass , others ... )
switch t := item . ( type ) {
case * user_model . User :
2023-08-10 06:19:39 +03:00
src := t . AvatarLinkWithSize ( au . ctx , size * setting . Avatar . RenderedSizeFactor )
2023-04-29 15:02:29 +03:00
if src != "" {
return AvatarHTML ( src , size , class , t . DisplayName ( ) )
}
case * repo_model . Collaborator :
2023-08-10 06:19:39 +03:00
src := t . AvatarLinkWithSize ( au . ctx , size * setting . Avatar . RenderedSizeFactor )
2023-04-29 15:02:29 +03:00
if src != "" {
return AvatarHTML ( src , size , class , t . DisplayName ( ) )
}
case * organization . Organization :
2023-08-10 06:19:39 +03:00
src := t . AsUser ( ) . AvatarLinkWithSize ( au . ctx , size * setting . Avatar . RenderedSizeFactor )
2023-04-29 15:02:29 +03:00
if src != "" {
return AvatarHTML ( src , size , class , t . AsUser ( ) . DisplayName ( ) )
}
}
2024-02-02 13:01:11 +03:00
return AvatarHTML ( avatars . DefaultAvatarLink ( ) , size , class , "" )
2023-04-29 15:02:29 +03:00
}
// AvatarByAction renders user avatars from action. args: action, size (int), class (string)
2023-08-10 06:19:39 +03:00
func ( au * AvatarUtils ) AvatarByAction ( action * activities_model . Action , others ... any ) template . HTML {
action . LoadActUser ( au . ctx )
return au . Avatar ( action . ActUser , others ... )
2023-04-29 15:02:29 +03:00
}
// AvatarByEmail renders avatars by email address. args: email, name, size (int), class (string)
2023-08-10 06:19:39 +03:00
func ( au * AvatarUtils ) AvatarByEmail ( email , name string , others ... any ) template . HTML {
2023-04-29 15:02:29 +03:00
size , class := gitea_html . ParseSizeAndClass ( avatars . DefaultAvatarPixelSize , avatars . DefaultAvatarClass , others ... )
2023-08-10 06:19:39 +03:00
src := avatars . GenerateEmailAvatarFastLink ( au . ctx , email , size * setting . Avatar . RenderedSizeFactor )
2023-04-29 15:02:29 +03:00
if src != "" {
return AvatarHTML ( src , size , class , name )
}
2023-08-10 06:19:39 +03:00
return ""
2023-04-29 15:02:29 +03:00
}