wiki: finish pages

This commit is contained in:
Unknwon 2015-11-27 02:16:12 -05:00
parent e42fcb033d
commit 5d1f5f32d0
4 changed files with 86 additions and 9 deletions

View File

@ -548,6 +548,8 @@ wiki.last_commit_info = %s edited this page %s
wiki.edit_page_button = Edit wiki.edit_page_button = Edit
wiki.new_page_button = New Page wiki.new_page_button = New Page
wiki.page_already_exists = Wiki page with same name already exists. wiki.page_already_exists = Wiki page with same name already exists.
wiki.pages = Pages
wiki.last_updated = Last updated %s
settings = Settings settings = Settings
settings.options = Options settings.options = Options

File diff suppressed because one or more lines are too long

View File

@ -7,6 +7,7 @@ package repo
import ( import (
"io/ioutil" "io/ioutil"
"strings" "strings"
"time"
"github.com/gogits/git-shell" "github.com/gogits/git-shell"
@ -20,11 +21,13 @@ const (
WIKI_START base.TplName = "repo/wiki/start" WIKI_START base.TplName = "repo/wiki/start"
WIKI_VIEW base.TplName = "repo/wiki/view" WIKI_VIEW base.TplName = "repo/wiki/view"
WIKI_NEW base.TplName = "repo/wiki/new" WIKI_NEW base.TplName = "repo/wiki/new"
WIKI_PAGES base.TplName = "repo/wiki/pages"
) )
type PageMeta struct { type PageMeta struct {
Name string Name string
URL string URL string
Updated time.Time
} }
func renderWikiPage(ctx *middleware.Context, isViewPage bool) (*git.Repository, string) { func renderWikiPage(ctx *middleware.Context, isViewPage bool) (*git.Repository, string) {
@ -46,12 +49,14 @@ func renderWikiPage(ctx *middleware.Context, isViewPage bool) (*git.Repository,
ctx.Handle(500, "ListEntries", err) ctx.Handle(500, "ListEntries", err)
return nil, "" return nil, ""
} }
pages := make([]PageMeta, len(entries)) pages := make([]PageMeta, 0, len(entries))
for i := range entries { for i := range entries {
if entries[i].Type == git.OBJECT_BLOB {
name := strings.TrimSuffix(entries[i].Name(), ".md") name := strings.TrimSuffix(entries[i].Name(), ".md")
pages[i] = PageMeta{ pages = append(pages, PageMeta{
Name: name, Name: name,
URL: models.ToWikiPageURL(name), URL: models.ToWikiPageURL(name),
})
} }
} }
ctx.Data["Pages"] = pages ctx.Data["Pages"] = pages
@ -123,7 +128,49 @@ func Wiki(ctx *middleware.Context) {
} }
func WikiPages(ctx *middleware.Context) { func WikiPages(ctx *middleware.Context) {
ctx.Data["Title"] = ctx.Tr("repo.wiki.pages")
ctx.Data["PageIsWiki"] = true
if !ctx.Repo.Repository.HasWiki() {
ctx.Redirect(ctx.Repo.RepoLink + "/wiki")
return
}
wikiRepo, err := git.OpenRepository(ctx.Repo.Repository.WikiPath())
if err != nil {
ctx.Handle(500, "OpenRepository", err)
return
}
commit, err := wikiRepo.GetCommitOfBranch("master")
if err != nil {
ctx.Handle(500, "GetCommitOfBranch", err)
return
}
entries, err := commit.ListEntries()
if err != nil {
ctx.Handle(500, "ListEntries", err)
return
}
pages := make([]PageMeta, 0, len(entries))
for i := range entries {
if entries[i].Type == git.OBJECT_BLOB {
c, err := wikiRepo.GetCommitByPath(entries[i].Name())
if err != nil {
ctx.Handle(500, "GetCommit", err)
return
}
name := strings.TrimSuffix(entries[i].Name(), ".md")
pages = append(pages, PageMeta{
Name: name,
URL: models.ToWikiPageURL(name),
Updated: c.Author.When,
})
}
}
ctx.Data["Pages"] = pages
ctx.HTML(200, WIKI_PAGES)
} }
func NewWiki(ctx *middleware.Context) { func NewWiki(ctx *middleware.Context) {

View File

@ -0,0 +1,28 @@
{{template "base/head" .}}
<div class="repository wiki pages">
{{template "repo/header" .}}
<div class="ui container">
{{template "repo/sidebar" .}}
<div class="ui header">
{{.i18n.Tr "repo.wiki.pages"}}
<div class="ui right">
<a class="ui green small button" href="{{.RepoLink}}/wiki/_new">{{.i18n.Tr "repo.wiki.new_page_button"}}</a>
</div>
</div>
<table class="ui table">
<tbody>
{{range .Pages}}
<tr>
<td>
<i class="icon octicon octicon-file-text"></i>
<a href="{{$.RepoLink}}/wiki/{{.URL}}">{{.Name}}</a>
</td>
{{$timeSince := TimeSince .Updated $.Lang}}
<td class="text right grey">{{$.i18n.Tr "repo.wiki.last_updated" $timeSince | Safe}}</td>
</tr>
{{end}}
</tbody>
</table>
</div>
</div>
{{template "base/footer" .}}