diff --git a/src/main/scala/app/WikiController.scala b/src/main/scala/app/WikiController.scala index 69208d6..b56dba8 100644 --- a/src/main/scala/app/WikiController.scala +++ b/src/main/scala/app/WikiController.scala @@ -1,9 +1,19 @@ package app import util.{WikiUtil, JGitUtil} +import jp.sf.amateras.scalatra.forms._ class WikiController extends ControllerBase { + case class WikiPageEditForm(pageName: String, content: String, message: Option[String], currentPageName: String) + + val form = mapping( + "pageName" -> trim(label("Page name" , text(required, maxlength(40)))), + "content" -> trim(label("Content" , text(required))), + "message" -> trim(label("Message" , optional(text()))), + "currentPageName" -> trim(label("Current page name" , text(required))) + )(WikiPageEditForm.apply) + get("/:owner/:repository/wiki"){ val owner = params("owner") val repository = params("repository") @@ -32,4 +42,15 @@ WikiUtil.getPage(owner, repository, page), JGitUtil.getRepositoryInfo(owner, repository, servletContext)) } + + post("/:owner/:repository/wiki/:page/_edit", form){ form => + val owner = params("owner") + val repository = params("repository") + val page = params("page") + + WikiUtil.savePage(owner, repository, form.currentPageName, form.pageName, + form.content, LoginUser, form.message.getOrElse("")) + + redirect("%s/%s/wiki/%s".format(owner, repository, page)) + } } \ No newline at end of file diff --git a/src/main/scala/util/WikiUtil.scala b/src/main/scala/util/WikiUtil.scala index 2f4c28b..cb99e2a 100644 --- a/src/main/scala/util/WikiUtil.scala +++ b/src/main/scala/util/WikiUtil.scala @@ -46,7 +46,7 @@ if(!dir.exists){ val repo = new RepositoryBuilder().setGitDir(dir).setBare.build repo.create - savePage(owner, repository, "Home", "Welcome to the %s wiki!!".format(repository), owner, "Initial Commit") + savePage(owner, repository, "Home", "Home", "Welcome to the %s wiki!!".format(repository), owner, "Initial Commit") } } @@ -54,7 +54,9 @@ * Returns the wiki page. */ def getPage(owner: String, repository: String, pageName: String): Option[WikiPageInfo] = { + // TODO create wiki repository in the repository setting changing. createWikiRepository(owner, repository) + val git = Git.open(getWikiRepositoryDir(owner, repository)) try { JGitUtil.getFileList(git, "master", ".").find(_.name == pageName + ".md").map { file => @@ -76,7 +78,10 @@ /** * Save the wiki page. */ - def savePage(owner: String, repository: String, pageName: String, content: String, committer: String, message: String): Unit = { + def savePage(owner: String, repository: String, currentPageName: String, newPageName: String, + content: String, committer: String, message: String): Unit = { + + // TODO create wiki repository in the repository setting changing. createWikiRepository(owner, repository) val workDir = getWikiWorkDir(owner, repository) @@ -87,12 +92,17 @@ } // write as file - val file = new File(workDir, pageName + ".md") + val cloned = Git.open(workDir) + val file = new File(workDir, newPageName + ".md") FileUtils.writeStringToFile(file, content, "UTF-8") + cloned.add.addFilepattern(file.getName).call + + // delete file + if(currentPageName != newPageName){ + cloned.rm.addFilepattern(currentPageName + ".md") + } // commit and push - val cloned = Git.open(workDir) - cloned.add.addFilepattern(file.getName).call cloned.commit.setAuthor(committer, committer + "@devnull").setMessage(message).call cloned.push.call } diff --git a/src/main/twirl/wikiedit.scala.html b/src/main/twirl/wikiedit.scala.html index 92d468f..90ac4bd 100644 --- a/src/main/twirl/wikiedit.scala.html +++ b/src/main/twirl/wikiedit.scala.html @@ -22,10 +22,15 @@ - - - - - +
+ + + + + + + + +
} } \ No newline at end of file