[Notice] Announcing the End of Demo Server [Read me]
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date

2012-11-26
2012-08-28
File name
Commit message
Commit date
@(url : String, project:Project)
@main("코드", project, utils.MenuType.CODE){
<ul class="nav nav-tabs">
<a href="@routes.CodeApp.codeBrowser(project.owner, project.name)">@Messages("Files")</a></li>
<a href="@routes.CodeHistoryApp.historyUntilHead(project.owner, project.name)">@Messages("Commits")</a></li>
</ul>
<div class="well">Checkout this repository : svn checkout @url</div>
<div class="row" id="codeBrowser">
<div class="span3">
<ul id="codeRoot" class="well nav nav-list">
<li id="codeBrowserHeader"><a href="#">코드 탐색기</a></li>
</ul>
</div>
<div class="span9" >
<div>
<span id="breadcrumbs">Breadcrumbs</span>
<span>
<select>
<option>master</option>
</select>
</span>
</div>
<div id="folderView">
<table class="table table-bordered">
<thead>
<tr>
<th>FileName</th>
<th>Commit Message</th>
<th>Commit Date</th>
<th>Author</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<div id="codeView" class="hide">
<div>
<span id="commiter"></span> | <span id="commitDate"></span> | <span id="commitMessage"></span>
<span class="pull-right"><a id="rawCode" class="btn btn-mini" target="_blank">Raw</a></span>
</div>
<hr />
<div>
<pre><code style="overflow:hidden"></code></pre>
</div>
</div>
</div>
</div>
<div id="codeError" class="hide row">
<div class="well span12">
<p>HEAD커밋이 존재하지 않습니다. 다음과 같은 방법을 시도해 보세요</p>
<pre><code>git clone @url
touch readme.md
git add readme.md
git commit -m "init"
git push origin master</code></pre>
</div>
</div>
<script type="text/javascript" src="/assets/javascripts/hljs.js"></script>
<script type="text/javascript" src="/assets/javascripts/hljs.jquery.js"></script>
<script type="text/javascript" src="/assets/javascripts/languages/allinone.js"></script>
<style>
@@IMPORT url("/assets/stylesheets/hljsstyles/googlecode.css");
</style>
<script>
$(document).ready(function(){
$(window).bind('hashchange', function(e){
//대기 표시 한다.
//여기서 요청을 보내고
var path = getHash().replace(/^#/, "");
$.ajax("code/!" + path, {
datatype : "json",
success : function(data, textStatus, jqXHR){
updateBreadcrumbs(path);
updateNav(path);
switch(data.type){
case "file" :
handleFile(data);
break;
case "folder" :
handleFolder(data);
break;
}
}
});
function handleFile(data){
//파일을 표시한다.
$("#commiter").text(data.author);
$("#commitMessage").text(data.msg);
$("#commitDate").text(data.date);
$("code").text(data.data);
$("#rawCode").attr("href", path.replace(/\/!/, ""));
$("#folderView").hide();
$("#codeView").show();
$("code").highlight();
}
function handleFolder(data){
//폴더내용을 리스팅 한다.
$("#commiter").text(data.author);
$("#commitMessage").text(data.msg);
$("#commitDate").text(data.date);
$("tbody").children().remove();
for(var name in data.data){
var info = data.data[name];
var tablerow = makeTableRow(name, info.msg, info.date, info.author);
$("tbody").append(tablerow);
}
$("#folderView").show();
$("#codeView").hide();
}
function makeTableRow(name, message, date, author){
return $("<tr>")
.append(
$("<td>").append(
$("<a>").text(name).attr("href", "#" + (path !== "/" ? path : "") + "/" +name)
)
)
.append($("<td>").text(message))
.append($("<td>").text(date))
.append($("<td>").text(author));
}
function updateBreadcrumbs(path){
var $breadcrumbs = $("#breadcrumbs");
$($breadcrumbs).html('<a href="#/">/</a>');
var names = path.split("/");
var str = "#"
for(var i = 1; i < names.length; i++){
var name = names[i];
str += "/" + name;
$breadcrumbs.append(" > ");
$("<a>").text(name).attr("href", str).appendTo($breadcrumbs);
}
}
function getPath(name){
var path = getHash().replace(/^#/, "");
if(path == "/") {
return path + name;
} else {
return path + "/" + name;
}
}
});
$(window).trigger('hashchange');
});
function getHash(){
//혹시 있을지도 모를 호완성을 위해.
return location.hash;
}
function setHash(hash){
return location.hash = hash;
}
var stack = [];
function updateNav(path){
$.ajax("code/!" + path, {
success : function(data, textStatus, jqXHR){
data.path = path;
stack.push(data);
var $codeRoot = $("#codeRoot");
var $a = $codeRoot.find("li a[href='#"+ path +"']");
if($a.length !== 0) {
stackTrace(stack);
} else {
updateNav(path.substr(0, path.lastIndexOf("/")));
}
}
});
}
function stackTrace(stack){
while(stack.length !== 0) {
var data = stack.pop();
if(data.type === "file") continue;
var $ul = $("<ul>").addClass("nav nav-list");
for(var name in data.data){
if(data.data[name].type !== "folder") continue;
var $li = $("<li>");
$("<a>").attr("href", "#" + data.path + "/" + name).text(name).appendTo($li);
$li.appendTo($ul);
}
var parentStr = data.path.substr(0, data.path.lastIndexOf("/"));
$("#codeRoot").find("li a[href='#" + data.path + "']").parent().after($ul);
}
}
</script>
}