diff --git a/modules/codeimage/image/image.go b/modules/codeimage/image/image.go
index 8140829f6..77648db77 100644
--- a/modules/codeimage/image/image.go
+++ b/modules/codeimage/image/image.go
@@ -2,7 +2,6 @@ package image
import (
"bytes"
- "encoding/base64"
"image/color"
"strings"
@@ -10,7 +9,7 @@ import (
"github.com/jiro4989/textimg/v3/token"
)
-func Draw(tokens token.Tokens) (string, error) {
+func Draw(tokens token.Tokens) ([]byte, error) {
foreground := color.RGBA{205, 214, 244, 255}
background := color.RGBA{30, 30, 46, 255}
@@ -19,7 +18,7 @@ func Draw(tokens token.Tokens) (string, error) {
bgCol := background
dc.SetColor(bgCol)
if err := dc.LoadFontFace("fonts/FiraCode-Regular.ttf", 14); err != nil {
- return "", err
+ return nil, err
}
dc.Clear()
curX, curY := 0.0, 0.0
@@ -57,5 +56,5 @@ func Draw(tokens token.Tokens) (string, error) {
}
buffer := new(bytes.Buffer)
dc.EncodePNG(buffer)
- return "data:image/png;base64," + base64.StdEncoding.EncodeToString(buffer.Bytes()), nil
+ return buffer.Bytes(), nil
}
diff --git a/routers/web/repo/view.go b/routers/web/repo/view.go
index 39347545d..8172b5188 100644
--- a/routers/web/repo/view.go
+++ b/routers/web/repo/view.go
@@ -518,15 +518,11 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry, treeLink, rawLink st
status = status.Or(statuses[i])
}
- ansiContent, _, _ := highlight.AnsiFile(blob.Name(), language, buf)
- log.Info("%s", ansiContent[0])
- tks, _ := parser.Parse(strings.Join(ansiContent, ""))
- imgStr, err := image.Draw(tks)
- if err != nil {
- log.Error("Drawing image failed: %v", err)
+ ogImg := ctx.Repo.Repository.HTMLURL() + "/src/og/" + ctx.Repo.BranchName
+ if len(ctx.Repo.TreePath) > 0 {
+ ogImg += "/" + util.PathEscapeSegments(ctx.Repo.TreePath)
}
-
- ctx.Data["OgImage"] = imgStr
+ ctx.Data["OgImage"] = ogImg
ctx.Data["EscapeStatus"] = status
ctx.Data["FileContent"] = fileContent
ctx.Data["LineEscapeStatus"] = statuses
@@ -717,6 +713,55 @@ func checkCitationFile(ctx *context.Context, entry *git.TreeEntry) {
}
}
+func OgImage(ctx *context.Context) {
+ entry, err := ctx.Repo.Commit.GetTreeEntryByPath(ctx.Repo.TreePath)
+ if err != nil {
+ log.Error("%v", err)
+ return
+ }
+ blob := entry.Blob()
+ buf, dataRc, _, err := getFileReader(ctx.Repo.Repository.ID, blob)
+ if err != nil {
+ ctx.ServerError("getFileReader", err)
+ return
+ }
+ defer dataRc.Close()
+
+ language := ""
+ indexFilename, worktree, deleteTemporaryFile, err := ctx.Repo.GitRepo.ReadTreeToTemporaryIndex(ctx.Repo.CommitID)
+ if err == nil {
+ defer deleteTemporaryFile()
+ filename2attribute2info, err := ctx.Repo.GitRepo.CheckAttribute(git.CheckAttributeOpts{
+ CachedOnly: true,
+ Attributes: []string{"linguist-language", "gitlab-language"},
+ Filenames: []string{ctx.Repo.TreePath},
+ IndexFile: indexFilename,
+ WorkTree: worktree,
+ })
+ if err != nil {
+ log.Error("Unable to load attributes for %-v:%s. Error: %v", ctx.Repo.Repository, ctx.Repo.TreePath, err)
+ }
+
+ language = filename2attribute2info[ctx.Repo.TreePath]["linguist-language"]
+ if language == "" || language == "unspecified" {
+ language = filename2attribute2info[ctx.Repo.TreePath]["gitlab-language"]
+ }
+ if language == "unspecified" {
+ language = ""
+ }
+ }
+
+ ansiContent, _, _ := highlight.AnsiFile(blob.Name(), language, buf)
+ log.Info("%s", ansiContent[0])
+ tks, _ := parser.Parse(strings.Join(ansiContent, ""))
+ img, err := image.Draw(tks)
+ if err != nil {
+ log.Error("Drawing image failed: %v", err)
+ }
+
+ ctx.Write(img)
+}
+
// Home render repository home page
func Home(ctx *context.Context) {
if setting.Other.EnableFeed {
diff --git a/routers/web/web.go b/routers/web/web.go
index 5357c5550..c1741dd5a 100644
--- a/routers/web/web.go
+++ b/routers/web/web.go
@@ -1324,6 +1324,7 @@ func registerRoutes(m *web.Route) {
m.Get("/branch/*", context.RepoRefByType(context.RepoRefBranch), repo.Home)
m.Get("/tag/*", context.RepoRefByType(context.RepoRefTag), repo.Home)
m.Get("/commit/*", context.RepoRefByType(context.RepoRefCommit), repo.Home)
+ m.Get("/og/*", context.RepoRefByType(context.RepoRefBranch), repo.OgImage)
// "/*" route is deprecated, and kept for backward compatibility
m.Get("/*", context.RepoRefByType(context.RepoRefLegacy), repo.Home)
}, repo.SetEditorconfigIfExists)
diff --git a/templates/base/head.tmpl b/templates/base/head.tmpl
index 33064780b..ff4e84e5b 100644
--- a/templates/base/head.tmpl
+++ b/templates/base/head.tmpl
@@ -38,14 +38,18 @@
{{end}}
{{else if .PageIsViewCode }}
-
-
-
- {{if .Repository.Description}}
-
- {{end}}
+
+
+
+
+
+
+
+
+
+
{{else if .Repository}}
{{if .Issue}}