This commit is contained in:
wonderful 2021-08-17 17:50:39 +08:00
parent 10e2b49064
commit fd02b7beb9
4 changed files with 52 additions and 24 deletions

View File

@ -47,3 +47,10 @@ type CloneLink struct {
SSH string `json:"ssh"`
HTTPS string `json:"https"`
}
type WikiOption1 struct{
Name string `json:"name"`
Content string `json:"content"`
CommitMessage string `json:"commit_message"`
}

View File

@ -58,7 +58,7 @@ func InitWiki(repo *models.Repository) error {
func FindWikiRepoCommit(ctx *context.APIContext) (*git.Repository, *git.Commit, error) {
wikiRepo, err := git.OpenRepository(ctx.Repo.Repository.WikiPath())
if err != nil {
// ctx.ServerError("OpenRepository", err)
ctx.ServerError("OpenRepository", err)
return nil, nil, err
}
@ -273,20 +273,26 @@ func NewWikiPost(ctx *context.APIContext, form api.WikiOption) {
}
wikiName := wiki_service.NormalizeWikiName(form.Name)
//wikiName, _ = url.QueryUnescape(wikiName)
//fmt.Println("wikiname ================================",wikiName)
//fmt.Println()
if len(form.CommitMessage) == 0 {
form.CommitMessage = ctx.Tr("repo.editor.add", form.Name)
}
if err := wiki_service.AddWikiPage(ctx.User, ctx.Repo.Repository, wikiName, form.Content, form.CommitMessage); err != nil {
if models.IsErrWikiReservedName(err) {
ctx.Data["Err_Title"] = true
fmt.Println("err1 ================== ",err)
//ctx.RenderWithErr(ctx.Tr("repo.wiki.reserved_page", wikiName), tplWikiNew, &form)
} else if models.IsErrWikiAlreadyExist(err) {
ctx.Data["Err_Title"] = true
fmt.Println("err2 ====================", err)
//ctx.RenderWithErr(ctx.Tr("repo.wiki.page_already_exists"), tplWikiNew, &form)
} else {
ctx.ServerError("AddWikiPage", err)
fmt.Println("err3 =======",err)
}
return
}
@ -300,6 +306,8 @@ func EditWikiPost(ctx *context.APIContext, form api.WikiOption) {
oldWikiName := wiki_service.NormalizeWikiName(ctx.Params(":page"))
newWikiName := wiki_service.NormalizeWikiName(form.Name)
newWikiName, _= url.QueryUnescape(newWikiName)
if len(form.CommitMessage) == 0 {
form.CommitMessage = ctx.Tr("repo.editor.update", form.Name)
}

View File

@ -701,6 +701,12 @@ func RegisterRoutes(m *macaron.Macaron) {
m.Combo("/notifications").
Get(reqToken(), notify.ListRepoNotifications).
Put(reqToken(), notify.ReadRepoNotifications)
m.Group("/wikies2", func() {
m.Combo("").Get(repo.WikiList).
Post(bind(api.WikiOption1{}),repo.CreateWiki)
})
m.Group("/wikies", func() {
m.Combo("").Get(repo.WikiList).
Post(bind(api.WikiOption{}), repo.CreateWiki)

View File

@ -33,9 +33,17 @@ func WikiList(ctx *context.APIContext) {
// "200":
// "$ref": "#/responses/WikiList"
repository := ctx.Repo.Repository
wikiCloneLink:= repository.CloneWikiLink()
if !ctx.Repo.Repository.HasWiki() {
ctx.Redirect(ctx.Repo.RepoLink + "/wiki")
return
}
ctx.Data["Title"] = ctx.Tr("repo.wiki.pages")
ctx.Data["PageIsWiki"] = true
ctx.Data["CanWriteWiki"] = ctx.Repo.CanWrite(models.UnitTypeWiki) && !ctx.Repo.Repository.IsArchived
repository := ctx.Repo.Repository
wikiCloneLink := repository.CloneWikiLink()
wikiRepo, commit, err := wikies.FindWikiRepoCommit(ctx)
if err != nil {
if wikiRepo != nil {
@ -48,10 +56,9 @@ func WikiList(ctx *context.APIContext) {
if wikiRepo != nil {
wikiRepo.Close()
}
//ctx.JSON(http.StatusOK, []api.WikiesResponse{})
return
}
wikiesList := make([]api.WikiesResponse, 0, len(entries))
for _, entry := range entries {
if !entry.IsRegular() {
@ -80,7 +87,7 @@ func WikiList(ctx *context.APIContext) {
wikiesList = append(wikiesList, api.WikiesResponse{
WikiCloneLink: api.CloneLink{
HTTPS: wikiCloneLink.HTTPS,
SSH: wikiCloneLink.SSH,
SSH: wikiCloneLink.SSH,
},
WikiMeta: api.WikiMeta{
Name: wikiName,
@ -102,7 +109,7 @@ func WikiList(ctx *context.APIContext) {
})
}
//根据创建时间,按最新的时间排序
sort.Slice(wikiesList,func(i, j int) bool{
sort.Slice(wikiesList, func(i, j int) bool {
return wikiesList[i].Commit.Commiter.When < wikiesList[j].Commit.Commiter.When
})
ctx.JSON(http.StatusOK, wikiesList)
@ -136,7 +143,7 @@ func GetWiki(ctx *context.APIContext) {
wikiRepo, commit, _ := wikies.FindWikiRepoCommit(ctx)
repository := ctx.Repo.Repository
wikiCloneLink:= repository.CloneWikiLink()
wikiCloneLink := repository.CloneWikiLink()
pageName := wiki_service.NormalizeWikiName(ctx.Params(":page"))
if len(pageName) == 0 {
pageName = "Home"
@ -164,7 +171,7 @@ func GetWiki(ctx *context.APIContext) {
wiki := api.WikiResponse{
WikiCloneLink: api.CloneLink{
HTTPS: wikiCloneLink.HTTPS,
SSH: wikiCloneLink.SSH,
SSH: wikiCloneLink.SSH,
},
WikiMeta: api.WikiMeta{
Name: pageName,
@ -183,8 +190,8 @@ func GetWiki(ctx *context.APIContext) {
Message: c.Message(),
},
},
CommitCounts: commitsCount,
MdContent: string(data),
CommitCounts: commitsCount,
MdContent: string(data),
SimpleContent: PageContent,
}
ctx.JSON(http.StatusOK, wiki)
@ -216,16 +223,16 @@ func CreateWiki(ctx *context.APIContext, form api.WikiOption) {
// "$ref": "#/responses/Wiki"
err1 := wiki_service.CheckFile(form.Name)
if err1 != nil{
if err1 != nil {
ctx.FileNameError()
return
}
repository := ctx.Repo.Repository
wikiCloneLink:= repository.CloneWikiLink()
wikies.NewWikiPost(ctx,form)
wikiCloneLink := repository.CloneWikiLink()
wikies.NewWikiPost(ctx, form)
wikiRepo, commit, _ := wikies.FindWikiRepoCommit(ctx)
data, entry, pageFilename, _:= wikies.WikiContentsByName(ctx, commit, form.Name)
data, entry, pageFilename, _ := wikies.WikiContentsByName(ctx, commit, form.Name)
metas := ctx.Repo.Repository.ComposeDocumentMetas()
PageContent := markdown.RenderWiki(data, ctx.Repo.RepoLink, metas)
commitsCount, _ := wikiRepo.FileCommitsCount("master", pageFilename)
@ -238,7 +245,7 @@ func CreateWiki(ctx *context.APIContext, form api.WikiOption) {
wiki := api.WikiResponse{
WikiCloneLink: api.CloneLink{
HTTPS: wikiCloneLink.HTTPS,
SSH: wikiCloneLink.SSH,
SSH: wikiCloneLink.SSH,
},
WikiMeta: api.WikiMeta{
Name: form.Name,
@ -257,8 +264,8 @@ func CreateWiki(ctx *context.APIContext, form api.WikiOption) {
Message: c.Message(),
},
},
CommitCounts: commitsCount,
MdContent: string(data),
CommitCounts: commitsCount,
MdContent: string(data),
SimpleContent: PageContent,
}
ctx.JSON(http.StatusOK, wiki)
@ -296,14 +303,14 @@ func EditWiki(ctx *context.APIContext, form api.WikiOption) {
newWikiName := wiki_service.NormalizeWikiName(form.Name)
err1 := wiki_service.CheckFile(newWikiName)
if err1 != nil{
if err1 != nil {
ctx.FileNameError()
return
}
wikies.EditWikiPost(ctx, form)
wikiRepo, commit, _ := wikies.FindWikiRepoCommit(ctx)
data, entry, pageFilename, _:= wikies.WikiContentsByName(ctx, commit, form.Name) //
data, entry, pageFilename, _ := wikies.WikiContentsByName(ctx, commit, form.Name) //
metas := ctx.Repo.Repository.ComposeDocumentMetas()
PageContent := markdown.RenderWiki(data, ctx.Repo.RepoLink, metas)
commitsCount, _ := wikiRepo.FileCommitsCount("master", pageFilename)
@ -331,8 +338,8 @@ func EditWiki(ctx *context.APIContext, form api.WikiOption) {
Message: c.Message(),
},
},
CommitCounts: commitsCount,
MdContent: string(data),
CommitCounts: commitsCount,
MdContent: string(data),
SimpleContent: PageContent,
}
ctx.JSON(http.StatusOK, wiki)
@ -371,7 +378,7 @@ func DeleteWiki(ctx *context.APIContext) {
}
err2 := wiki_service.DeleteWikiPage(ctx.User, ctx.Repo.Repository, wikiName)
if err2 != nil{
if err2 != nil {
ctx.FileExistError()
return
}