(refs #13)Trying to embed ace editor into repository viewer.

This commit is contained in:
takezoe
2014-04-22 07:24:50 +09:00
parent b8b59f9dcd
commit b9cc46e5ef
174 changed files with 228610 additions and 0 deletions

View File

@@ -71,6 +71,59 @@ trait RepositoryViewerControllerBase extends ControllerBase {
}
})
/**
* Displays the file content of the specified branch or commit.
*/
get("/:owner/:repository/edit/*")(referrersOnly { repository =>
val (id, path) = splitPath(repository, multiParams("splat").head)
// val raw = params.get("raw").getOrElse("false").toBoolean
using(Git.open(getRepositoryDir(repository.owner, repository.name))){ git =>
val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(id))
@scala.annotation.tailrec
def getPathObjectId(path: String, walk: TreeWalk): Option[ObjectId] = walk.next match {
case true if(walk.getPathString == path) => Some(walk.getObjectId(0))
case true => getPathObjectId(path, walk)
case false => None
}
using(new TreeWalk(git.getRepository)){ treeWalk =>
treeWalk.addTree(revCommit.getTree)
treeWalk.setRecursive(true)
getPathObjectId(path, treeWalk)
} map { objectId =>
// if(raw){
// // Download
// defining(JGitUtil.getContentFromId(git, objectId, false).get){ bytes =>
// contentType = FileUtil.getContentType(path, bytes)
// bytes
// }
// } else {
// Viewer
val large = FileUtil.isLarge(git.getRepository.getObjectDatabase.open(objectId).getSize)
val viewer = if(FileUtil.isImage(path)) "image" else if(large) "large" else "other"
val bytes = if(viewer == "other") JGitUtil.getContentFromId(git, objectId, false) else None
val content = if(viewer == "other"){
if(bytes.isDefined && FileUtil.isText(bytes.get)){
// text
JGitUtil.ContentInfo("text", bytes.map(StringUtil.convertFromByteArray))
} else {
// binary
JGitUtil.ContentInfo("binary", None)
}
} else {
// image or large
JGitUtil.ContentInfo(viewer, None)
}
repo.html.editor(id, repository, path.split("/").toList, content, new JGitUtil.CommitInfo(revCommit))
// }
} getOrElse NotFound
}
})
/**
* Displays the file content of the specified branch or commit.
*/