aboutsummaryrefslogtreecommitdiffstats
path: root/routers/repo/view.go
diff options
context:
space:
mode:
authorKN4CK3R <KN4CK3R@users.noreply.github.com>2021-06-05 14:32:19 +0200
committerGitHub <noreply@github.com>2021-06-05 15:32:19 +0300
commit8e262104c25d1c2578f683109e1b373aade3a17c (patch)
tree04b8fda8516498b74350bb695f230e0e1089a48d /routers/repo/view.go
parent7979c3654eb91adce4fd9717d9ff891496a56ff3 (diff)
downloadgitea-8e262104c25d1c2578f683109e1b373aade3a17c.tar.gz
gitea-8e262104c25d1c2578f683109e1b373aade3a17c.zip
Add Image Diff for SVG files (#14867)
* Added type sniffer. * Switched content detection from base to typesniffer. * Added GuessContentType to Blob. * Moved image info logic to client. Added support for SVG images in diff. * Restore old blocked svg behaviour. * Added missing image formats. * Execute image diff only when container is visible. * add margin to spinner * improve BIN tag on image diffs * Default to render view. * Show image diff on incomplete diff. Co-authored-by: silverwind <me@silverwind.io> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: Lauris BH <lauris@nix.lv>
Diffstat (limited to 'routers/repo/view.go')
-rw-r--r--routers/repo/view.go29
1 files changed, 18 insertions, 11 deletions
diff --git a/routers/repo/view.go b/routers/repo/view.go
index 285cacc2df..30d7de4078 100644
--- a/routers/repo/view.go
+++ b/routers/repo/view.go
@@ -29,6 +29,7 @@ import (
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/markup"
"code.gitea.io/gitea/modules/setting"
+ "code.gitea.io/gitea/modules/typesniffer"
)
const (
@@ -265,7 +266,9 @@ func renderDirectory(ctx *context.Context, treeLink string) {
n, _ := dataRc.Read(buf)
buf = buf[:n]
- isTextFile := base.IsTextFile(buf)
+ st := typesniffer.DetectContentType(buf)
+ isTextFile := st.IsText()
+
ctx.Data["FileIsText"] = isTextFile
ctx.Data["FileName"] = readmeFile.name
fileSize := int64(0)
@@ -302,7 +305,8 @@ func renderDirectory(ctx *context.Context, treeLink string) {
}
buf = buf[:n]
- isTextFile = base.IsTextFile(buf)
+ st = typesniffer.DetectContentType(buf)
+ isTextFile = st.IsText()
ctx.Data["IsTextFile"] = isTextFile
fileSize = meta.Size
@@ -405,7 +409,9 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry, treeLink, rawLink st
n, _ := dataRc.Read(buf)
buf = buf[:n]
- isTextFile := base.IsTextFile(buf)
+ st := typesniffer.DetectContentType(buf)
+ isTextFile := st.IsText()
+
isLFSFile := false
isDisplayingSource := ctx.Query("display") == "source"
isDisplayingRendered := !isDisplayingSource
@@ -441,14 +447,16 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry, treeLink, rawLink st
}
buf = buf[:n]
- isTextFile = base.IsTextFile(buf)
+ st = typesniffer.DetectContentType(buf)
+ isTextFile = st.IsText()
+
fileSize = meta.Size
ctx.Data["RawFileLink"] = fmt.Sprintf("%s/media/%s/%s", ctx.Repo.RepoLink, ctx.Repo.BranchNameSubURL(), ctx.Repo.TreePath)
}
}
}
- isRepresentableAsText := base.IsRepresentableAsText(buf)
+ isRepresentableAsText := st.IsRepresentableAsText()
if !isRepresentableAsText {
// If we can't show plain text, always try to render.
isDisplayingSource = false
@@ -483,8 +491,7 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry, treeLink, rawLink st
switch {
case isRepresentableAsText:
- // This will be true for SVGs.
- if base.IsImageFile(buf) {
+ if st.IsSvgImage() {
ctx.Data["IsImageFile"] = true
ctx.Data["HasSourceRenderedToggle"] = true
}
@@ -540,13 +547,13 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry, treeLink, rawLink st
}
}
- case base.IsPDFFile(buf):
+ case st.IsPDF():
ctx.Data["IsPDFFile"] = true
- case base.IsVideoFile(buf):
+ case st.IsVideo():
ctx.Data["IsVideoFile"] = true
- case base.IsAudioFile(buf):
+ case st.IsAudio():
ctx.Data["IsAudioFile"] = true
- case base.IsImageFile(buf):
+ case st.IsImage() && (setting.UI.SVG.Enabled || !st.IsSvgImage()):
ctx.Data["IsImageFile"] = true
default:
if fileSize >= setting.UI.MaxDisplayFileSize {