]> source.dussan.org Git - gitea.git/commitdiff
show readme.md
authorslene <vslene@gmail.com>
Mon, 17 Mar 2014 10:46:54 +0000 (18:46 +0800)
committerslene <vslene@gmail.com>
Mon, 17 Mar 2014 10:46:54 +0000 (18:46 +0800)
models/repo2.go
modules/base/markdown.go [new file with mode: 0644]
routers/repo/single.go
templates/repo/single.tmpl

index 0c17a58335edb8e10627aafa7660732c7d6d5575..b31244b41476d6c37dba7dae40f1aad25bb11782 100644 (file)
@@ -5,6 +5,7 @@
 package models
 
 import (
+       "fmt"
        "path"
        "strings"
        "time"
@@ -22,12 +23,25 @@ type Commit struct {
        Message string
 }
 
+var (
+       ErrRepoFileNotLoaded = fmt.Errorf("repo file not loaded")
+)
+
 type RepoFile struct {
        *git.TreeEntry
        Path    string
        Message string
        Created time.Time
        Size    int64
+       Repo    *git.Repository
+}
+
+func (file *RepoFile) LookupBlob() (*git.Blob, error) {
+       if file.Repo == nil {
+               return nil, ErrRepoFileNotLoaded
+       }
+
+       return file.Repo.LookupBlob(file.Id)
 }
 
 func GetBranches(userName, reposName string) ([]string, error) {
@@ -80,6 +94,7 @@ func GetReposFiles(userName, reposName, branchName, rpath string) ([]*RepoFile,
                                        lastCommit.Message(),
                                        lastCommit.Committer.When,
                                        size,
+                                       repo,
                                })
                        case git.FileModeTree:
                                repodirs = append(repodirs, &RepoFile{
@@ -88,6 +103,7 @@ func GetReposFiles(userName, reposName, branchName, rpath string) ([]*RepoFile,
                                        lastCommit.Message(),
                                        lastCommit.Committer.When,
                                        size,
+                                       repo,
                                })
                        }
                }
diff --git a/modules/base/markdown.go b/modules/base/markdown.go
new file mode 100644 (file)
index 0000000..d170abe
--- /dev/null
@@ -0,0 +1,39 @@
+// Copyright 2014 The Gogs Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package base
+
+import (
+       "github.com/slene/blackfriday"
+)
+
+func RenderMarkdown(rawBytes []byte) []byte {
+       htmlFlags := 0
+       htmlFlags |= blackfriday.HTML_USE_XHTML
+       // htmlFlags |= blackfriday.HTML_USE_SMARTYPANTS
+       // htmlFlags |= blackfriday.HTML_SMARTYPANTS_FRACTIONS
+       // htmlFlags |= blackfriday.HTML_SMARTYPANTS_LATEX_DASHES
+       htmlFlags |= blackfriday.HTML_SKIP_HTML
+       htmlFlags |= blackfriday.HTML_SKIP_STYLE
+       htmlFlags |= blackfriday.HTML_SKIP_SCRIPT
+       htmlFlags |= blackfriday.HTML_GITHUB_BLOCKCODE
+       htmlFlags |= blackfriday.HTML_OMIT_CONTENTS
+       htmlFlags |= blackfriday.HTML_COMPLETE_PAGE
+       renderer := blackfriday.HtmlRenderer(htmlFlags, "", "")
+
+       // set up the parser
+       extensions := 0
+       extensions |= blackfriday.EXTENSION_NO_INTRA_EMPHASIS
+       extensions |= blackfriday.EXTENSION_TABLES
+       extensions |= blackfriday.EXTENSION_FENCED_CODE
+       extensions |= blackfriday.EXTENSION_AUTOLINK
+       extensions |= blackfriday.EXTENSION_STRIKETHROUGH
+       extensions |= blackfriday.EXTENSION_HARD_LINE_BREAK
+       extensions |= blackfriday.EXTENSION_SPACE_HEADERS
+       extensions |= blackfriday.EXTENSION_NO_EMPTY_LINE_BEFORE_BLOCK
+
+       body := blackfriday.Markdown(rawBytes, renderer, extensions)
+
+       return body
+}
index c144106cb876512f218d502dc925e629904e6e65..f47a2f7bfcad9aa820a21bd09eb09b214100e8bc 100644 (file)
@@ -8,9 +8,11 @@ import (
        "strings"
 
        "github.com/codegangsta/martini"
-       // "github.com/slene/blackfriday"
+
+       "github.com/gogits/git"
 
        "github.com/gogits/gogs/models"
+       "github.com/gogits/gogs/modules/base"
        "github.com/gogits/gogs/modules/middleware"
 )
 
@@ -43,12 +45,14 @@ func Single(ctx *middleware.Context, params martini.Params) {
                params["branchname"] = "master"
        }
 
-       // Directory and file list.
+       // Get tree path
        treename := params["_1"]
+
+       // Directory and file list.
        files, err := models.GetReposFiles(params["username"], params["reponame"],
                params["branchname"], treename)
        if err != nil {
-               ctx.Handle(200, "repo.Single", err)
+               ctx.Render.Error(404)
                return
        }
        ctx.Data["Username"] = params["username"]
@@ -58,7 +62,7 @@ func Single(ctx *middleware.Context, params martini.Params) {
        // Branches.
        brs, err := models.GetBranches(params["username"], params["reponame"])
        if err != nil {
-               ctx.Handle(200, "repo.Single", err)
+               ctx.Render.Error(404)
                return
        }
        ctx.Data["Branches"] = brs
@@ -73,22 +77,41 @@ func Single(ctx *middleware.Context, params martini.Params) {
                }
        }
 
-       // Latest commit.
+       // Get latest commit according username and repo name
        commit, err := models.GetLastestCommit(params["username"], params["reponame"])
        if err != nil {
-               ctx.Handle(200, "repo.Single", err)
+               ctx.Render.Error(404)
                return
        }
        ctx.Data["LatestCommit"] = commit
 
-       // README.
-       // for _, f := range files {
-       //      if f.Name == "README.md" {
-       // ctx.Data["ReadmeName"] = "README.md"
-       // ctx.Data["ReadmeContent"] =
-       //              break
-       //      }
-       // }
+       var readmeFile *models.RepoFile
+
+       for _, f := range files {
+               if !f.IsFile() {
+                       continue
+               }
+
+               if len(f.Name) < 6 {
+                       continue
+               }
+
+               if strings.ToLower(f.Name[:6]) == "readme" {
+                       readmeFile = f
+                       break
+               }
+       }
+
+       if readmeFile != nil {
+               // if file large than 1M not show it
+               if readmeFile.Size > 1024*1024 || readmeFile.Filemode != git.FileModeBlob {
+                       ctx.Data["FileIsLarge"] = true
+               } else if blob, err := readmeFile.LookupBlob(); err != nil {
+                       ctx.Data["FileIsLarge"] = true
+               } else {
+                       ctx.Data["ReadmeContent"] = string(base.RenderMarkdown(blob.Contents()))
+               }
+       }
 
        ctx.Data["Paths"] = Paths
        ctx.Data["Treenames"] = treenames
index 153910f78a76d828775de7f61d0ece2a0c9fa93f..c22f129fb72b60f1202dc20ec4be52bdf29776a7 100644 (file)
             <div class="panel-heading file-head">
                 <i class="icon fa fa-book"></i> README.md
             </div>
-            <div class="panel-body file-body markdown">
-                markdown content
-            </div>
+            {{if .FileIsLarge}}
+                <div class="panel-footer">
+                    Large file size 1000kb
+                </div>
+            {{else}}
+                <div class="panel-body file-body markdown">
+                    {{.ReadmeContent|str2html}}
+                </div>
+            {{end}}
         </div>
     </div>
 </div>