summaryrefslogtreecommitdiffstats
path: root/modules/templates
diff options
context:
space:
mode:
Diffstat (limited to 'modules/templates')
-rw-r--r--modules/templates/helper.go67
1 files changed, 60 insertions, 7 deletions
diff --git a/modules/templates/helper.go b/modules/templates/helper.go
index 8b96397529..5af1addb60 100644
--- a/modules/templates/helper.go
+++ b/modules/templates/helper.go
@@ -88,7 +88,6 @@ func NewFuncMap() []template.FuncMap {
"AllowedReactions": func() []string {
return setting.UI.Reactions
},
- "AvatarLink": models.AvatarLink,
"Safe": Safe,
"SafeJS": SafeJS,
"Str2html": Str2html,
@@ -339,7 +338,9 @@ func NewFuncMap() []template.FuncMap {
}
return false
},
- "svg": SVG,
+ "svg": SVG,
+ "avatar": Avatar,
+ "avatarByEmail": AvatarByEmail,
"SortArrow": func(normSort, revSort, urlSort string, isDefault bool) template.HTML {
// if needed
if len(normSort) == 0 || len(urlSort) == 0 {
@@ -499,18 +500,38 @@ func NewTextFuncMap() []texttmpl.FuncMap {
var widthRe = regexp.MustCompile(`width="[0-9]+?"`)
var heightRe = regexp.MustCompile(`height="[0-9]+?"`)
-// SVG render icons - arguments icon name (string), size (int), class (string)
-func SVG(icon string, others ...interface{}) template.HTML {
- size := 16
+func parseOthers(defaultSize int, defaultClass string, others ...interface{}) (int, string) {
+ size := defaultSize
if len(others) > 0 && others[0].(int) != 0 {
size = others[0].(int)
}
- class := ""
+ class := defaultClass
if len(others) > 1 && others[1].(string) != "" {
- class = others[1].(string)
+ if defaultClass == "" {
+ class = others[1].(string)
+ } else {
+ class = defaultClass + " " + others[1].(string)
+ }
+ }
+
+ return size, class
+}
+
+func avatarHTML(src string, size int, class string, 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 + `"/>`)
+}
+
+// SVG render icons - arguments icon name (string), size (int), class (string)
+func SVG(icon string, others ...interface{}) template.HTML {
+ size, class := parseOthers(16, "", others...)
+
if svgStr, ok := svg.SVGs[icon]; ok {
if size != 16 {
svgStr = widthRe.ReplaceAllString(svgStr, fmt.Sprintf(`width="%d"`, size))
@@ -524,6 +545,38 @@ func SVG(icon string, others ...interface{}) template.HTML {
return template.HTML("")
}
+// Avatar renders user and repo avatars. args: user/repo, size (int), class (string)
+func Avatar(item interface{}, others ...interface{}) template.HTML {
+ size, class := parseOthers(28, "ui avatar image", others...)
+ if user, ok := item.(*models.User); ok {
+ src := user.RealSizedAvatarLink(size * 2) // request double size for finer rendering
+ if src != "" {
+ return avatarHTML(src, size, class, user.DisplayName())
+ }
+ }
+
+ if repo, ok := item.(*models.Repository); ok {
+ src := repo.RelAvatarLink()
+ if src != "" {
+ return avatarHTML(src, size, class, repo.FullName())
+ }
+ }
+
+ return template.HTML("")
+}
+
+// AvatarByEmail renders avatars by email address. args: email, name, size (int), class (string)
+func AvatarByEmail(email string, name string, others ...interface{}) template.HTML {
+ size, class := parseOthers(28, "ui avatar image", others...)
+ src := models.SizedAvatarLink(email, size*2) // request double size for finer rendering
+
+ if src != "" {
+ return avatarHTML(src, size, class, name)
+ }
+
+ return template.HTML("")
+}
+
// Safe render raw as HTML
func Safe(raw string) template.HTML {
return template.HTML(raw)