File name
        Commit message
        Commit date
    File name
        Commit message
        Commit date
    File name
        Commit message
        Commit date
    File name
        Commit message
        Commit date
    File name
        Commit message
        Commit date
    @**
* Yona, 21st Century Project Hosting SW
*
* Copyright Yona & Yobi Authors & NAVER Corp.
* https://yona.io
**@
@import com.fasterxml.jackson.databind.node.ObjectNode
@import org.apache.commons.io._
@(project:Project, branches:List[String], recursiveData:List[ObjectNode], branch:String, path:String)
@import utils.TemplateHelper._
@import utils.TemplateHelper.Branches._
@import utils.TemplateHelper.CodeBrowser._
@import java.net.URLEncoder
@parseFileInfo(files:ObjectNode) = {
    @fieldText(files, "type") match {
        case "folder" => {
            @partial_view_folder(project, files.get("data"), branch, fieldText(files, "path"))
        }
        case "file" => {
            @partial_view_file(project, files, branch, path)
        }
    }
}
@makeBreadCrumbs(pagePath:String) = @{
    if(pagePath != null){
        var basePath = routes.CodeApp.codeBrowserWithBranch(project.owner, project.name, URLEncoder.encode(branch, "UTF-8"), "").toString()
        var partialPath = ""
        pagePath.split("/").toList.map { p =>
            if(partialPath == ""){
                partialPath = p
            } else {
                partialPath = partialPath + "/" + p
            }
            Html("<a href=\"" + getCorrectedPath(basePath, partialPath) + "\">" + p + "</a>")
        }
    }
}
@dir = @{
    if(fieldText(recursiveData.last, "type").eq("folder") && path.length != 0){
        path + "/"
    } else {
        FilenameUtils.getPath(path)
    }
}
@pathWithoutFileName(path:String) = @{
    if(path.lastIndexOf("/") > 0){
        path.substring(0, path.lastIndexOf("/"))
    } else {
        ""
    }
}
@projectLayout(Messages("menu.code"), project, utils.MenuType.CODE){
@projectMenu(project, utils.MenuType.CODE, "main-menu-only")
<div class="page-wrap-outer">
    <div class="project-page-wrap">
        <div class="code-browse-wrap">
            @if(fieldText(recursiveData{0}, "type").eq("folder")){
            <ul class="nav nav-tabs">
                <li class="active"><a href="@routes.CodeApp.codeBrowserWithBranch(project.owner, project.name, URLEncoder.encode(branch, "UTF-8"), pathWithoutFileName(path))">@Messages("code.files")</a></li>
                @if(branch.eq("HEAD")){
                <li><a href="@routes.CodeHistoryApp.historyUntilHead(project.owner, project.name)">@Messages("code.commits")</a></li>
                } else {
                <li><a href="@routes.CodeHistoryApp.history(project.owner, project.name, URLEncoder.encode(branch, "UTF-8"), null)">@Messages("code.commits")</a></li>
                }
                @if(project.isGit) {
                <li>
                    <a href="@routes.BranchApp.branches(project.owner, project.name)">@Messages("title.branches")</a>
                </li>
                }
            </ul>
            }
            <div class="code-browse-header">
                <select id="branches" data-toggle="select2" data-format="branch" data-dropdown-css-class="branches"
                        class="pull-left @if(fieldText(recursiveData{0}, "type").eq("file")){mb10}">
                @for(branchName <- branches){
                    <option value="@routes.CodeApp.codeBrowserWithBranch(project.owner, project.name, URLEncoder.encode(branchItemName(branchName), "UTF-8"), path)"
                            @if(branchItemName(branchName) == branchItemName(branch)){ selected }>
                        @branchName
                    </option>
                }
                </select>
                <div id="breadcrumbs" class="code-breadcrumb-wrap ml10 pull-left">
                    <a href="@routes.CodeApp.codeBrowserWithBranch(project.owner, project.name, URLEncoder.encode(branch, "UTF-8"), "")">@project.name</a>@makeBreadCrumbs(path)
                </div>
                @if(project.isGit) {
                <div class="pull-right">
                    <a href="@routes.CodeApp.download(project.owner, project.name, URLEncoder.encode(branch, "UTF-8"))" class="ybtn">
                        @Messages("code.download")</a>
                </div>
                    @if(!UserApp.currentUser().isAnonymous) {
                        <div class="pull-right">
                            <a id="new-file-link" href="@routes.BoardApp.newPostForm(project.owner, project.name)?path=@dir&branch=@branchItemName(branch)" class="ybtn">@Messages("code.new.file")</a>
                        </div>
                    }
                }
            </div>
            <div class="code-viewer-wrap">
                <div id="spin" style="position:fixed; top:50%; left:50%"></div>
                @for(fileInfo <- recursiveData){
                    @parseFileInfo(fileInfo)
                }
            </div>
        </div>
    </div>
</div>
@common.select2()
<link rel="stylesheet" type="text/css" href="@routes.Assets.at("stylesheets/dynatree/skin/ui.dynatree.css")" />
<script type="text/javascript" src="@routes.Assets.at("javascripts/lib/moment-with-langs.min.js")"></script>
<script type="text/javascript">
    $(document).ready(function(){
        $("#branches").on("change", function(event){
            location.href= $(this).val();
        });
        // help popover at open with browser button
        $("#open-in-browser").popover({trigger: "hover", placement: "top"});
        $yobi.loadModule("code.Browser", {
            "sProjectName": "@project.name",
            "sInitialPath": "@path",
            "sMetaInfoURL": "@routes.CodeApp.ajaxRequestWithBranch(project.owner, project.name, URLEncoder.encode(branch, "UTF-8"), "")",
            "sBasePathURL": "@routes.CodeApp.codeBrowserWithBranch(project.owner, project.name, URLEncoder.encode(branch, "UTF-8"), "")"
        });
    });
</script>
}