From f9a16ac2c0e0666106cfe032539f14194ae5d6fa Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Fri, 6 Dec 2024 12:05:33 -0800 Subject: [PATCH 1/6] Add directory support for wiki --- routers/web/repo/wiki.go | 58 +++++++++++++++++++++++++--------- services/wiki/wiki_path.go | 18 ++++++++++- templates/repo/wiki/pages.tmpl | 4 +-- 3 files changed, 62 insertions(+), 18 deletions(-) diff --git a/routers/web/repo/wiki.go b/routers/web/repo/wiki.go index 3fca7cebea525..36dbca735f488 100644 --- a/routers/web/repo/wiki.go +++ b/routers/web/repo/wiki.go @@ -11,6 +11,7 @@ import ( "io" "net/http" "net/url" + "path" "path/filepath" "strings" @@ -72,6 +73,7 @@ func MustEnableWiki(ctx *context.Context) { // PageMeta wiki page meta information type PageMeta struct { Name string + IsDir bool SubURL string GitEntryName string UpdatedUnix timeutil.TimeStamp @@ -190,8 +192,23 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) { return nil, nil } + reqPath := util.PathJoinRelX(ctx.PathParamRaw("*")) + p, err := url.PathUnescape(reqPath) + if err != nil { + ctx.ServerError("PathUnescape", err) + return nil, nil + } + dirPath, pageName := path.Split(p) + pageName = strings.TrimSuffix(pageName, ".md") + treePath := wiki_service.WebDirPathToGitPath(wiki_service.WebPath(dirPath)) + tree, err := commit.SubTree(treePath) + if err != nil { + ctx.ServerError("SubTree", err) + return nil, nil + } + // Get page list. - entries, err := commit.ListEntries() + entries, err := tree.ListEntries() if err != nil { if wikiRepo != nil { wikiRepo.Close() @@ -227,13 +244,12 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) { ctx.Data["Pages"] = pages // get requested page name - pageName := wiki_service.WebPathFromRequest(ctx.PathParamRaw("*")) if len(pageName) == 0 { pageName = "Home" } - _, displayName := wiki_service.WebPathToUserTitle(pageName) - ctx.Data["PageURL"] = wiki_service.WebPathToURLPath(pageName) + _, displayName := wiki_service.WebPathToUserTitle(wiki_service.WebPath(pageName)) + ctx.Data["PageURL"] = wiki_service.WebPathToURLPath(wiki_service.WebPath(pageName)) ctx.Data["old_title"] = displayName ctx.Data["Title"] = displayName ctx.Data["title"] = displayName @@ -242,7 +258,7 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) { isFooter := pageName == "_Footer" // lookup filename in wiki - get gitTree entry , real filename - entry, pageFilename, noEntry, isRaw := wikiEntryByName(ctx, commit, pageName) + entry, pageFilename, noEntry, isRaw := wikiEntryByName(ctx, commit, wiki_service.WebPath(p)) if noEntry { ctx.Redirect(ctx.Repo.RepoLink + "/wiki/?action=_pages") } @@ -647,7 +663,8 @@ func WikiPages(ctx *context.Context) { return } - treePath := "" // To support list sub folders' pages in the future + dirPath := util.PathJoinRelX(ctx.PathParamRaw("*")) + treePath := wiki_service.WebDirPathToGitPath(wiki_service.WebPath(dirPath)) tree, err := commit.SubTree(treePath) if err != nil { ctx.ServerError("SubTree", err) @@ -669,22 +686,33 @@ func WikiPages(ctx *context.Context) { pages := make([]PageMeta, 0, len(entries)) for _, entry := range entries { - if !entry.Entry.IsRegular() { + if !entry.Entry.IsRegular() && !entry.Entry.IsDir() { continue } - wikiName, err := wiki_service.GitPathToWebPath(entry.Entry.Name()) - if err != nil { - if repo_model.IsErrWikiInvalidFileName(err) { - continue + var wikiName wiki_service.WebPath + if entry.Entry.IsDir() { + wikiName, err = wiki_service.GitDirPathToWebPath(entry.Entry.Name()) + if err != nil { + ctx.ServerError("GitDirPathToWebPath", err) + return + } + } else { + wikiName, err = wiki_service.GitPathToWebPath(entry.Entry.Name()) + if err != nil { + if repo_model.IsErrWikiInvalidFileName(err) { + continue + } + ctx.ServerError("GitPathToWebPath", err) + return } - ctx.ServerError("WikiFilenameToName", err) - return } _, displayName := wiki_service.WebPathToUserTitle(wikiName) + urlPath := path.Join(string(dirPath), string(wikiName)) pages = append(pages, PageMeta{ Name: displayName, - SubURL: wiki_service.WebPathToURLPath(wikiName), - GitEntryName: entry.Entry.Name(), + IsDir: entry.Entry.IsDir(), + SubURL: wiki_service.WebPathToURLPath(wiki_service.WebPath(urlPath)), + GitEntryName: path.Join(string(dirPath), entry.Entry.Name()), UpdatedUnix: timeutil.TimeStamp(entry.Commit.Author.When.Unix()), }) } diff --git a/services/wiki/wiki_path.go b/services/wiki/wiki_path.go index 212a35ea2551e..73d51bbc2e27d 100644 --- a/services/wiki/wiki_path.go +++ b/services/wiki/wiki_path.go @@ -99,6 +99,10 @@ func WebPathToGitPath(s WebPath) string { return util.PathJoinRelX(ret) } + return WebDirPathToGitPath(s) + ".md" +} + +func WebDirPathToGitPath(s WebPath) string { a := strings.Split(string(s), "/") for i := range a { shouldAddDashMarker := hasDashMarker(a[i]) @@ -107,7 +111,7 @@ func WebPathToGitPath(s WebPath) string { a[i] = strings.ReplaceAll(a[i], "%20", " ") // space is safe to be kept in git path a[i] = strings.ReplaceAll(a[i], "+", " ") } - return strings.Join(a, "/") + ".md" + return strings.Join(a, "/") } func GitPathToWebPath(s string) (wp WebPath, err error) { @@ -126,6 +130,18 @@ func GitPathToWebPath(s string) (wp WebPath, err error) { return WebPath(strings.Join(a, "/")), nil } +func GitDirPathToWebPath(s string) (wp WebPath, err error) { + a := strings.Split(s, "/") + for i := range a { + shouldAddDashMarker := hasDashMarker(a[i]) + if a[i], err = unescapeSegment(a[i]); err != nil { + return "", err + } + a[i] = escapeSegToWeb(a[i], shouldAddDashMarker) + } + return WebPath(strings.Join(a, "/")), nil +} + func WebPathToUserTitle(s WebPath) (dir, display string) { dir = path.Dir(string(s)) display = path.Base(string(s)) diff --git a/templates/repo/wiki/pages.tmpl b/templates/repo/wiki/pages.tmpl index 38d6d6f944642..f362bb5221e1e 100644 --- a/templates/repo/wiki/pages.tmpl +++ b/templates/repo/wiki/pages.tmpl @@ -16,8 +16,8 @@ {{range .Pages}} - {{svg "octicon-file"}} - {{.Name}} + {{if .IsDir}}{{svg "octicon-file-directory"}}{{else}}{{svg "octicon-file"}}{{end}} + {{.Name}} {{svg "octicon-chevron-right"}} {{$timeSince := DateUtils.TimeSince .UpdatedUnix}} From d40ba8d1a31d9fe13b9b1655be5c39e6608552ec Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Thu, 26 Dec 2024 17:28:03 -0800 Subject: [PATCH 2/6] Fix bug --- routers/web/repo/wiki.go | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/routers/web/repo/wiki.go b/routers/web/repo/wiki.go index 36dbca735f488..1db322efe3e94 100644 --- a/routers/web/repo/wiki.go +++ b/routers/web/repo/wiki.go @@ -180,7 +180,7 @@ func wikiContentsByName(ctx *context.Context, commit *git.Commit, wikiName wiki_ return wikiContentsByEntry(ctx, entry), entry, gitFilename, noEntry } -func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) { +func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry, string) { wikiRepo, commit, err := findWikiRepoCommit(ctx) if err != nil { if wikiRepo != nil { @@ -189,14 +189,14 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) { if !git.IsErrNotExist(err) { ctx.ServerError("GetBranchCommit", err) } - return nil, nil + return nil, nil, "" } reqPath := util.PathJoinRelX(ctx.PathParamRaw("*")) p, err := url.PathUnescape(reqPath) if err != nil { ctx.ServerError("PathUnescape", err) - return nil, nil + return nil, nil, "" } dirPath, pageName := path.Split(p) pageName = strings.TrimSuffix(pageName, ".md") @@ -204,7 +204,7 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) { tree, err := commit.SubTree(treePath) if err != nil { ctx.ServerError("SubTree", err) - return nil, nil + return nil, nil, "" } // Get page list. @@ -214,7 +214,7 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) { wikiRepo.Close() } ctx.ServerError("ListEntries", err) - return nil, nil + return nil, nil, "" } pages := make([]PageMeta, 0, len(entries)) for _, entry := range entries { @@ -230,7 +230,7 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) { wikiRepo.Close() } ctx.ServerError("WikiFilenameToName", err) - return nil, nil + return nil, nil, "" } else if wikiName == "_Sidebar" || wikiName == "_Footer" { continue } @@ -246,6 +246,7 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) { // get requested page name if len(pageName) == 0 { pageName = "Home" + p = "Home.md" } _, displayName := wiki_service.WebPathToUserTitle(wiki_service.WebPath(pageName)) @@ -269,7 +270,7 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) { if wikiRepo != nil { wikiRepo.Close() } - return nil, nil + return nil, nil, "" } // get filecontent @@ -278,7 +279,7 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) { if wikiRepo != nil { wikiRepo.Close() } - return nil, nil + return nil, nil, "" } var sidebarContent []byte @@ -288,7 +289,7 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) { if wikiRepo != nil { wikiRepo.Close() } - return nil, nil + return nil, nil, "" } } else { sidebarContent = data @@ -301,7 +302,7 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) { if wikiRepo != nil { wikiRepo.Close() } - return nil, nil + return nil, nil, "" } } else { footerContent = data @@ -334,7 +335,7 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) { wikiRepo.Close() } ctx.ServerError("Render", err) - return nil, nil + return nil, nil, "" } if rctx.SidebarTocNode != nil { @@ -355,7 +356,7 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) { wikiRepo.Close() } ctx.ServerError("Render", err) - return nil, nil + return nil, nil, "" } ctx.Data["sidebarPresent"] = sidebarContent != nil } else { @@ -370,7 +371,7 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) { wikiRepo.Close() } ctx.ServerError("Render", err) - return nil, nil + return nil, nil, "" } ctx.Data["footerPresent"] = footerContent != nil } else { @@ -381,7 +382,7 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) { commitsCount, _ := wikiRepo.FileCommitsCount(ctx.Repo.Repository.DefaultWikiBranch, pageFilename) ctx.Data["CommitCount"] = commitsCount - return wikiRepo, entry + return wikiRepo, entry, p } func renderRevisionPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) { @@ -573,7 +574,7 @@ func Wiki(ctx *context.Context) { return } - wikiRepo, entry := renderViewPage(ctx) + wikiRepo, entry, wikiPath := renderViewPage(ctx) defer func() { if wikiRepo != nil { wikiRepo.Close() @@ -588,7 +589,6 @@ func Wiki(ctx *context.Context) { return } - wikiPath := entry.Name() if markup.DetectMarkupTypeByFileName(wikiPath) != markdown.MarkupName { ext := strings.ToUpper(filepath.Ext(wikiPath)) ctx.Data["FormatWarning"] = fmt.Sprintf("%s rendering is not supported at the moment. Rendered as Markdown.", ext) From 48c75f8580ae2bcbefd0036129316aa4f9577af4 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Thu, 26 Dec 2024 18:42:26 -0800 Subject: [PATCH 3/6] Fix bug --- routers/web/repo/wiki.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/routers/web/repo/wiki.go b/routers/web/repo/wiki.go index 1db322efe3e94..353a10c5c596b 100644 --- a/routers/web/repo/wiki.go +++ b/routers/web/repo/wiki.go @@ -198,6 +198,16 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry, stri ctx.ServerError("PathUnescape", err) return nil, nil, "" } + pTree, err := commit.GetTreeEntryByPath(wiki_service.WebDirPathToGitPath(wiki_service.WebPath(p))) + if err != nil && !git.IsErrNotExist(err) { + ctx.ServerError("SubTree", err) + return nil, nil, "" + } + if pTree != nil && pTree.IsDir() { + ctx.Redirect(ctx.Repo.RepoLink + fmt.Sprintf("/wiki/%s?action=_pages", url.QueryEscape(p))) + return nil, nil, "" + } + dirPath, pageName := path.Split(p) pageName = strings.TrimSuffix(pageName, ".md") treePath := wiki_service.WebDirPathToGitPath(wiki_service.WebPath(dirPath)) @@ -382,7 +392,7 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry, stri commitsCount, _ := wikiRepo.FileCommitsCount(ctx.Repo.Repository.DefaultWikiBranch, pageFilename) ctx.Data["CommitCount"] = commitsCount - return wikiRepo, entry, p + return wikiRepo, entry, pageFilename } func renderRevisionPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) { From 62cef5be3db17538c869860308f67b5a01bfbdd5 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Fri, 27 Dec 2024 00:14:20 -0800 Subject: [PATCH 4/6] Fix paths --- routers/web/repo/wiki.go | 23 ++++++++++++++--------- templates/repo/wiki/new.tmpl | 2 +- templates/repo/wiki/pages.tmpl | 4 ++-- templates/repo/wiki/view.tmpl | 2 +- 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/routers/web/repo/wiki.go b/routers/web/repo/wiki.go index 353a10c5c596b..6adfd2601e781 100644 --- a/routers/web/repo/wiki.go +++ b/routers/web/repo/wiki.go @@ -204,7 +204,7 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry, stri return nil, nil, "" } if pTree != nil && pTree.IsDir() { - ctx.Redirect(ctx.Repo.RepoLink + fmt.Sprintf("/wiki/%s?action=_pages", url.QueryEscape(p))) + ctx.Redirect(ctx.Repo.RepoLink + fmt.Sprintf("/wiki/%s?action=_pages", p)) return nil, nil, "" } @@ -213,9 +213,10 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry, stri treePath := wiki_service.WebDirPathToGitPath(wiki_service.WebPath(dirPath)) tree, err := commit.SubTree(treePath) if err != nil { - ctx.ServerError("SubTree", err) + ctx.NotFoundOrServerError("SubTree", git.IsErrNotExist, err) return nil, nil, "" } + ctx.Data["dirPath"] = dirPath // Get page list. entries, err := tree.ListEntries() @@ -247,11 +248,13 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry, stri _, displayName := wiki_service.WebPathToUserTitle(wikiName) pages = append(pages, PageMeta{ Name: displayName, - SubURL: wiki_service.WebPathToURLPath(wikiName), + SubURL: wiki_service.WebPathToURLPath(wiki_service.WebPath(dirPath) + wikiName), GitEntryName: entry.Name(), }) } ctx.Data["Pages"] = pages + ctx.Data["PageURL"] = wiki_service.WebPathToURLPath(wiki_service.WebPath(p)) + ctx.Data["PageDir"] = wiki_service.WebPathToURLPath(wiki_service.WebPath(dirPath)) // get requested page name if len(pageName) == 0 { @@ -260,7 +263,6 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry, stri } _, displayName := wiki_service.WebPathToUserTitle(wiki_service.WebPath(pageName)) - ctx.Data["PageURL"] = wiki_service.WebPathToURLPath(wiki_service.WebPath(pageName)) ctx.Data["old_title"] = displayName ctx.Data["Title"] = displayName ctx.Data["title"] = displayName @@ -489,13 +491,14 @@ func renderEditPage(ctx *context.Context) { } // get requested pagename - pageName := wiki_service.WebPathFromRequest(ctx.PathParamRaw("*")) + pageName := wiki_service.WebPath(util.PathJoinRelX(ctx.PathParamRaw("*"))) if len(pageName) == 0 { pageName = "Home" } _, displayName := wiki_service.WebPathToUserTitle(pageName) ctx.Data["PageURL"] = wiki_service.WebPathToURLPath(pageName) + ctx.Data["PageDir"] = wiki_service.WebPathToURLPath(wiki_service.WebPath(path.Dir(string(pageName)))) ctx.Data["old_title"] = displayName ctx.Data["Title"] = displayName ctx.Data["title"] = displayName @@ -727,6 +730,7 @@ func WikiPages(ctx *context.Context) { }) } ctx.Data["Pages"] = pages + ctx.Data["PageDir"] = ctx.PathParamRaw("*") ctx.HTML(http.StatusOK, tplWikiPages) } @@ -810,7 +814,7 @@ func NewWikiPost(ctx *context.Context) { return } - wikiName := wiki_service.UserTitleToWebPath("", form.Title) + wikiName := wiki_service.UserTitleToWebPath(ctx.PathParam("*"), form.Title) if len(form.Message) == 0 { form.Message = ctx.Locale.TrString("repo.editor.add", form.Title) @@ -861,8 +865,9 @@ func EditWikiPost(ctx *context.Context) { return } - oldWikiName := wiki_service.WebPathFromRequest(ctx.PathParamRaw("*")) - newWikiName := wiki_service.UserTitleToWebPath("", form.Title) + p := util.PathJoinRelX(ctx.PathParamRaw("*")) + oldWikiName := wiki_service.WebPath(p) + newWikiName := wiki_service.UserTitleToWebPath(path.Dir(p), form.Title) if len(form.Message) == 0 { form.Message = ctx.Locale.TrString("repo.editor.update", form.Title) @@ -880,7 +885,7 @@ func EditWikiPost(ctx *context.Context) { // DeleteWikiPagePost delete wiki page func DeleteWikiPagePost(ctx *context.Context) { - wikiName := wiki_service.WebPathFromRequest(ctx.PathParamRaw("*")) + wikiName := wiki_service.WebPath(util.PathJoinRelX(ctx.PathParamRaw("*"))) if len(wikiName) == 0 { wikiName = "Home" } diff --git a/templates/repo/wiki/new.tmpl b/templates/repo/wiki/new.tmpl index ea2913c0fdcae..8a113e571e282 100644 --- a/templates/repo/wiki/new.tmpl +++ b/templates/repo/wiki/new.tmpl @@ -6,7 +6,7 @@
{{ctx.Locale.Tr "repo.wiki.new_page"}} {{if .PageIsWikiEdit}} - {{ctx.Locale.Tr "repo.wiki.new_page_button"}} + {{ctx.Locale.Tr "repo.wiki.new_page_button"}} {{end}}
diff --git a/templates/repo/wiki/pages.tmpl b/templates/repo/wiki/pages.tmpl index f362bb5221e1e..feff9defb37a6 100644 --- a/templates/repo/wiki/pages.tmpl +++ b/templates/repo/wiki/pages.tmpl @@ -6,7 +6,7 @@ {{ctx.Locale.Tr "repo.wiki.pages"}} {{if and .CanWriteWiki (not .Repository.IsMirror)}} - {{ctx.Locale.Tr "repo.wiki.new_page_button"}} + {{ctx.Locale.Tr "repo.wiki.new_page_button"}} {{end}} @@ -18,7 +18,7 @@ {{if .IsDir}}{{svg "octicon-file-directory"}}{{else}}{{svg "octicon-file"}}{{end}} {{.Name}} - {{svg "octicon-chevron-right"}} + {{svg "octicon-chevron-right"}} {{$timeSince := DateUtils.TimeSince .UpdatedUnix}} {{ctx.Locale.Tr "repo.wiki.last_updated" $timeSince}} diff --git a/templates/repo/wiki/view.tmpl b/templates/repo/wiki/view.tmpl index 843a977e3e57c..4abee3642fb8a 100644 --- a/templates/repo/wiki/view.tmpl +++ b/templates/repo/wiki/view.tmpl @@ -49,7 +49,7 @@ {{end}} {{if and .CanWriteWiki (not .Repository.IsMirror)}} {{ctx.Locale.Tr "repo.wiki.edit_page_button"}} - {{ctx.Locale.Tr "repo.wiki.new_page_button"}} + {{ctx.Locale.Tr "repo.wiki.new_page_button"}} {{ctx.Locale.Tr "repo.wiki.delete_page_button"}} {{end}} From 4f6bdf86d12a589f387d1920ea0dd3b12d474884 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Fri, 27 Dec 2024 00:22:23 -0800 Subject: [PATCH 5/6] Change wiki directory icon color --- templates/repo/wiki/pages.tmpl | 2 +- web_src/css/repo/wiki.css | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/templates/repo/wiki/pages.tmpl b/templates/repo/wiki/pages.tmpl index feff9defb37a6..abbcf2eea6055 100644 --- a/templates/repo/wiki/pages.tmpl +++ b/templates/repo/wiki/pages.tmpl @@ -16,7 +16,7 @@ {{range .Pages}} - {{if .IsDir}}{{svg "octicon-file-directory"}}{{else}}{{svg "octicon-file"}}{{end}} + {{if .IsDir}}{{svg "octicon-file-directory-fill"}}{{else}}{{svg "octicon-file"}}{{end}} {{.Name}} {{svg "octicon-chevron-right"}} diff --git a/web_src/css/repo/wiki.css b/web_src/css/repo/wiki.css index ca59dadb9c806..418216fcfea6f 100644 --- a/web_src/css/repo/wiki.css +++ b/web_src/css/repo/wiki.css @@ -11,6 +11,10 @@ display: inline-block; } +.repository.wiki .wiki-pages-list .svg.octicon-file-directory-fill { + color: var(--color-primary); +} + .repository.wiki .markup { overflow: visible; } From efc5fb91e408cdceea88201a52dfe7db7dede794 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Fri, 27 Dec 2024 00:28:30 -0800 Subject: [PATCH 6/6] Add .. --- routers/web/repo/wiki.go | 1 + templates/repo/wiki/pages.tmpl | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/routers/web/repo/wiki.go b/routers/web/repo/wiki.go index 6adfd2601e781..d7435f6efdeab 100644 --- a/routers/web/repo/wiki.go +++ b/routers/web/repo/wiki.go @@ -731,6 +731,7 @@ func WikiPages(ctx *context.Context) { } ctx.Data["Pages"] = pages ctx.Data["PageDir"] = ctx.PathParamRaw("*") + ctx.Data["ParentPageDir"] = path.Dir(ctx.PathParamRaw("*")) ctx.HTML(http.StatusOK, tplWikiPages) } diff --git a/templates/repo/wiki/pages.tmpl b/templates/repo/wiki/pages.tmpl index abbcf2eea6055..cb7e1f2d85682 100644 --- a/templates/repo/wiki/pages.tmpl +++ b/templates/repo/wiki/pages.tmpl @@ -13,6 +13,15 @@ {{if .IsRepositoryAdmin}}
{{ctx.Locale.Tr "repo.default_branch"}}: {{.Repository.DefaultWikiBranch}}
{{end}} + {{if .PageDir}} + + + + + {{end}} {{range .Pages}}
+ {{svg "octicon-file-directory-fill"}} + .. +