From 54ca0b2f0923b01ba152a3e2a9efdb6256d95571 Mon Sep 17 00:00:00 2001 From: Unknwon Date: Fri, 6 Nov 2015 11:10:27 -0500 Subject: #1433 images with links in Markdown - #1904 minor fix on image link --- modules/base/markdown.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'modules/base/markdown.go') diff --git a/modules/base/markdown.go b/modules/base/markdown.go index 540ee58f..e59a6273 100644 --- a/modules/base/markdown.go +++ b/modules/base/markdown.go @@ -100,11 +100,20 @@ func (options *CustomRender) Link(out *bytes.Buffer, link []byte, title []byte, } func (options *CustomRender) Image(out *bytes.Buffer, link []byte, title []byte, alt []byte) { + prefix := strings.Replace(options.urlPrefix, "/src/", "/raw/", 1) if len(link) > 0 && !isLink(link) { - link = []byte(path.Join(strings.Replace(options.urlPrefix, "/src/", "/raw/", 1), string(link))) + if link[0] != '/' { + prefix += "/" + } + link = []byte(prefix + string(link)) } + fmt.Println(2, string(link)) + out.WriteString(``) options.Renderer.Image(out, link, title, alt) + out.WriteString("") } var ( -- cgit v1.2.3 From 3b62a0fe0edad32c201ca0fce9b39bc540f6d5f4 Mon Sep 17 00:00:00 2001 From: Unknwon Date: Tue, 10 Nov 2015 16:46:17 -0500 Subject: fix #1572 fix file histrory paging issue --- README.md | 2 +- gogs.go | 2 +- modules/base/markdown.go | 1 - routers/repo/commit.go | 83 +++++++++------------------------------ templates/.VERSION | 2 +- templates/repo/commits_table.tmpl | 2 +- 6 files changed, 23 insertions(+), 69 deletions(-) (limited to 'modules/base/markdown.go') diff --git a/README.md b/README.md index 567777b4..25b84d8e 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Gogs - Go Git Service [![Build Status](https://travis-ci.org/gogits/gogs.svg?bra ![](public/img/gogs-large-resize.png) -##### Current version: 0.7.2 Beta +##### Current version: 0.7.4 Beta diff --git a/gogs.go b/gogs.go index 74e5bd64..d56dd2c4 100644 --- a/gogs.go +++ b/gogs.go @@ -17,7 +17,7 @@ import ( "github.com/gogits/gogs/modules/setting" ) -const APP_VER = "0.7.2.1109 Beta" +const APP_VER = "0.7.4.1110 Beta" func init() { runtime.GOMAXPROCS(runtime.NumCPU()) diff --git a/modules/base/markdown.go b/modules/base/markdown.go index e59a6273..8f3d6bef 100644 --- a/modules/base/markdown.go +++ b/modules/base/markdown.go @@ -107,7 +107,6 @@ func (options *CustomRender) Image(out *bytes.Buffer, link []byte, title []byte, } link = []byte(prefix + string(link)) } - fmt.Println(2, string(link)) out.WriteString(` commitsCount { - nextPage = 0 - } + ctx.Data["Page"] = paginater.New(commitsCount, git.CommitsRangeSize, page, 5) - commits, err := ctx.Repo.GitRepo.CommitsByFileAndRange( - branchName, fileName, page) + commits, err := ctx.Repo.GitRepo.CommitsByFileAndRange(branchName, fileName, page) if err != nil { - ctx.Handle(500, "repo.FileHistory(CommitsByRange)", err) + ctx.Handle(500, "CommitsByFileAndRange", err) return } commits = RenderIssueLinks(commits, ctx.Repo.RepoLink) commits = models.ValidateCommitsWithEmails(commits) - ctx.Data["Commits"] = commits - ctx.Data["Username"] = userName - ctx.Data["Reponame"] = repoName + + ctx.Data["Username"] = ctx.Repo.Owner.Name + ctx.Data["Reponame"] = ctx.Repo.Repository.Name ctx.Data["FileName"] = fileName ctx.Data["CommitCount"] = commitsCount - ctx.Data["LastPageNum"] = lastPage - ctx.Data["NextPageNum"] = nextPage + ctx.Data["Branch"] = branchName ctx.HTML(200, COMMITS) } diff --git a/templates/.VERSION b/templates/.VERSION index c5c0c2ee..ba0a4803 100644 --- a/templates/.VERSION +++ b/templates/.VERSION @@ -1 +1 @@ -0.7.2.1109 Beta \ No newline at end of file +0.7.4.1110 Beta \ No newline at end of file diff --git a/templates/repo/commits_table.tmpl b/templates/repo/commits_table.tmpl index 6fc17508..58ab1ebb 100644 --- a/templates/repo/commits_table.tmpl +++ b/templates/repo/commits_table.tmpl @@ -1,5 +1,5 @@

- {{.CommitCount}} {{.i18n.Tr "repo.commits.commits"}} + {{.CommitCount}} {{.i18n.Tr "repo.commits.commits"}} {{if .Branch}}({{.Branch}}){{end}} {{if .PageIsCommits}}
-- cgit v1.2.3 From 85c58eba902b554822666acec78046379a17b598 Mon Sep 17 00:00:00 2001 From: Howl Date: Sun, 15 Nov 2015 12:04:43 +0100 Subject: Fix bad issue links in non-readme markdown files --- modules/base/markdown.go | 3 +++ 1 file changed, 3 insertions(+) (limited to 'modules/base/markdown.go') diff --git a/modules/base/markdown.go b/modules/base/markdown.go index 8f3d6bef..70c2918a 100644 --- a/modules/base/markdown.go +++ b/modules/base/markdown.go @@ -168,6 +168,9 @@ func RenderSha1CurrentPattern(rawBytes []byte, urlPrefix string) []byte { } func RenderIssueIndexPattern(rawBytes []byte, urlPrefix string) []byte { + // Remove unnecessary things after username and reponame in prefix + // (otherwise stuff like /:user/:repo/src/master/issues/1 would happen) + urlPrefix = strings.Join(strings.Split(urlPrefix, "/")[:3], "/") ms := issueIndexPattern.FindAll(rawBytes, -1) for _, m := range ms { var space string -- cgit v1.2.3 From ca5678da3268706b8516a52ef945742792c297a0 Mon Sep 17 00:00:00 2001 From: Howl Date: Sun, 15 Nov 2015 22:22:25 +0100 Subject: Safely detect urlPrefix in the format /:owner/:repo --- modules/base/markdown.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'modules/base/markdown.go') diff --git a/modules/base/markdown.go b/modules/base/markdown.go index 70c2918a..9d297f0c 100644 --- a/modules/base/markdown.go +++ b/modules/base/markdown.go @@ -168,9 +168,9 @@ func RenderSha1CurrentPattern(rawBytes []byte, urlPrefix string) []byte { } func RenderIssueIndexPattern(rawBytes []byte, urlPrefix string) []byte { - // Remove unnecessary things after username and reponame in prefix - // (otherwise stuff like /:user/:repo/src/master/issues/1 would happen) - urlPrefix = strings.Join(strings.Split(urlPrefix, "/")[:3], "/") + if i := strings.Index(urlPrefix, "/src"); i != -1 { + urlPrefix = urlPrefix[:i] + } ms := issueIndexPattern.FindAll(rawBytes, -1) for _, m := range ms { var space string -- cgit v1.2.3 From 1a901433e2a27e5bcd29216fdb57082be620b745 Mon Sep 17 00:00:00 2001 From: Unknwon Date: Sun, 15 Nov 2015 17:37:26 -0500 Subject: minor fix for #1949 --- modules/base/markdown.go | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'modules/base/markdown.go') diff --git a/modules/base/markdown.go b/modules/base/markdown.go index 9d297f0c..1f48b88d 100644 --- a/modules/base/markdown.go +++ b/modules/base/markdown.go @@ -167,10 +167,21 @@ func RenderSha1CurrentPattern(rawBytes []byte, urlPrefix string) []byte { return rawBytes } -func RenderIssueIndexPattern(rawBytes []byte, urlPrefix string) []byte { - if i := strings.Index(urlPrefix, "/src"); i != -1 { - urlPrefix = urlPrefix[:i] +func cutoutVerbosePrefix(prefix string) string { + count := 0 + for i := 0; i < len(prefix); i++ { + if prefix[i] == '/' { + count++ + } + if count >= 3 { + return prefix[:i] + } } + return prefix +} + +func RenderIssueIndexPattern(rawBytes []byte, urlPrefix string) []byte { + urlPrefix = cutoutVerbosePrefix(urlPrefix) ms := issueIndexPattern.FindAll(rawBytes, -1) for _, m := range ms { var space string -- cgit v1.2.3 From 9b6c835715ab27aa7a008a51415f38ca2a856cd0 Mon Sep 17 00:00:00 2001 From: Unknwon Date: Fri, 20 Nov 2015 01:52:11 -0500 Subject: fix #1873 --- modules/base/markdown.go | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'modules/base/markdown.go') diff --git a/modules/base/markdown.go b/modules/base/markdown.go index 1f48b88d..d55e98dd 100644 --- a/modules/base/markdown.go +++ b/modules/base/markdown.go @@ -231,9 +231,15 @@ func RenderRawMarkdown(body []byte, urlPrefix string) []byte { return body } +var ( + leftAngleBracket = []byte("") +) + // PostProcessMarkdown treats different types of HTML differently, // and only renders special links for plain text blocks. func PostProcessMarkdown(rawHtml []byte, urlPrefix string) []byte { + var startTag string var buf bytes.Buffer tokenizer := html.NewTokenizer(bytes.NewReader(rawHtml)) for html.ErrorToken != tokenizer.Next() { @@ -243,6 +249,7 @@ func PostProcessMarkdown(rawHtml []byte, urlPrefix string) []byte { buf.Write(RenderSpecialLink([]byte(token.String()), urlPrefix)) case html.StartTagToken: + startTag = token.Data buf.WriteString(token.String()) tagName := token.Data // If this is an excluded tag, we skip processing all output until a close tag is encountered. @@ -258,6 +265,10 @@ func PostProcessMarkdown(rawHtml []byte, urlPrefix string) []byte { } } + case html.EndTagToken: + buf.Write(leftAngleBracket) + buf.WriteString(startTag) + buf.Write(rightAngleBracket) default: buf.WriteString(token.String()) } -- cgit v1.2.3 From 126228d14621d21c7f7f86f009511b007b336f6e Mon Sep 17 00:00:00 2001 From: Unknwon Date: Fri, 20 Nov 2015 05:37:51 -0500 Subject: HTML render fix --- modules/base/markdown.go | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) (limited to 'modules/base/markdown.go') diff --git a/modules/base/markdown.go b/modules/base/markdown.go index d55e98dd..53eee4b3 100644 --- a/modules/base/markdown.go +++ b/modules/base/markdown.go @@ -14,6 +14,7 @@ import ( "regexp" "strings" + "github.com/Unknwon/com" "github.com/russross/blackfriday" "golang.org/x/net/html" @@ -99,13 +100,26 @@ func (options *CustomRender) Link(out *bytes.Buffer, link []byte, title []byte, options.Renderer.Link(out, link, title, content) } +var ( + svgSuffix = []byte(".svg") + svgSuffixWithMark = []byte(".svg?") +) + func (options *CustomRender) Image(out *bytes.Buffer, link []byte, title []byte, alt []byte) { prefix := strings.Replace(options.urlPrefix, "/src/", "/raw/", 1) - if len(link) > 0 && !isLink(link) { - if link[0] != '/' { - prefix += "/" + if len(link) > 0 { + if isLink(link) { + // External link with .svg suffix usually means CI status. + if bytes.HasSuffix(link, svgSuffix) || bytes.Contains(link, svgSuffixWithMark) { + options.Renderer.Image(out, link, title, alt) + return + } + } else { + if link[0] != '/' { + prefix += "/" + } + link = []byte(prefix + string(link)) } - link = []byte(prefix + string(link)) } out.WriteString(`
") ) +var noEndTags = []string{"img", "input", "br", "hr"} + // PostProcessMarkdown treats different types of HTML differently, // and only renders special links for plain text blocks. func PostProcessMarkdown(rawHtml []byte, urlPrefix string) []byte { - var startTag string + startTags := make([]string, 0, 5) var buf bytes.Buffer tokenizer := html.NewTokenizer(bytes.NewReader(rawHtml)) + +OUTER_LOOP: for html.ErrorToken != tokenizer.Next() { token := tokenizer.Token() switch token.Type { @@ -249,26 +267,32 @@ func PostProcessMarkdown(rawHtml []byte, urlPrefix string) []byte { buf.Write(RenderSpecialLink([]byte(token.String()), urlPrefix)) case html.StartTagToken: - startTag = token.Data buf.WriteString(token.String()) tagName := token.Data // If this is an excluded tag, we skip processing all output until a close tag is encountered. if strings.EqualFold("a", tagName) || strings.EqualFold("code", tagName) || strings.EqualFold("pre", tagName) { for html.ErrorToken != tokenizer.Next() { token = tokenizer.Token() + // Copy the token to the output verbatim buf.WriteString(token.String()) // If this is the close tag, we are done - if html.EndTagToken == token.Type && strings.EqualFold(tagName, token.Data) { + if token.Type == html.EndTagToken && strings.EqualFold(tagName, token.Data) { break } } + continue OUTER_LOOP + } + + if !com.IsSliceContainsStr(noEndTags, token.Data) { + startTags = append(startTags, token.Data) } case html.EndTagToken: buf.Write(leftAngleBracket) - buf.WriteString(startTag) + buf.WriteString(startTags[len(startTags)-1]) buf.Write(rightAngleBracket) + startTags = startTags[:len(startTags)-1] default: buf.WriteString(token.String()) } -- cgit v1.2.3 From f12832c61e95a9eff1195f543fc11d1113dae4fc Mon Sep 17 00:00:00 2001 From: Unknwon Date: Sat, 21 Nov 2015 21:06:11 -0500 Subject: fix possible panic --- modules/base/markdown.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'modules/base/markdown.go') diff --git a/modules/base/markdown.go b/modules/base/markdown.go index 53eee4b3..cf7a3193 100644 --- a/modules/base/markdown.go +++ b/modules/base/markdown.go @@ -271,14 +271,24 @@ OUTER_LOOP: tagName := token.Data // If this is an excluded tag, we skip processing all output until a close tag is encountered. if strings.EqualFold("a", tagName) || strings.EqualFold("code", tagName) || strings.EqualFold("pre", tagName) { + stackNum := 1 for html.ErrorToken != tokenizer.Next() { token = tokenizer.Token() // Copy the token to the output verbatim buf.WriteString(token.String()) - // If this is the close tag, we are done + + if token.Type == html.StartTagToken { + stackNum++ + } + + // If this is the close tag to the outer-most, we are done if token.Type == html.EndTagToken && strings.EqualFold(tagName, token.Data) { - break + stackNum-- + + if stackNum == 0 { + break + } } } continue OUTER_LOOP -- cgit v1.2.3