THIS IS A TEST INSTANCE ONLY! REPOSITORIES CAN BE DELETED AT ANY TIME!

Browse Source

make help page

tags/v1.0.0-beta
BlueMir 7 years ago
parent
commit
5a831d4d75
4 changed files with 136 additions and 405 deletions
  1. +0
    -199
      app/views/code/gitView.scala.html
  2. +0
    -199
      app/views/code/svnView.scala.html
  3. +136
    -7
      app/views/help/toc.scala.html
  4. BIN
      public/help/myProjects.png

+ 0
- 199
app/views/code/gitView.scala.html View File

@@ -1,199 +0,0 @@
@(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">Clone this repository : git clone @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(" &gt; ");
$("<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>
}

+ 0
- 199
app/views/code/svnView.scala.html View File

@@ -1,199 +0,0 @@
@(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(" &gt; ");
$("<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>
}

+ 136
- 7
app/views/help/toc.scala.html View File

@@ -1,13 +1,142 @@
@(message: String)

@home(message, utils.MenuType.HELP) {
<div class="container page-wrap">
<div class="page" markdown>
Help
====
</div>
</div>
<div class="page">
<!--<div class="header-wrap">
<div class="search-wrap help">
<div class="inner">
<form action="/project/search" method="get">
<span class="labels">FAQ</span>
<span class="sp-line"></span>
<span class="sub labels">Help me with</span>
<input name="query" class="text" type="text" placeholder="FAQ 검색"><button type="submit" class="btn-transparent search-btn">SEARCH</button>
</form>
</div>
</div>
</div>-->
<ul class="qas">
<li class="qa">
<div class="question-wrap">
<i class="ico ico-q"></i>
<a href="#!/toggle" class="question">N4를 설치하고 싶어요.</a>
</div>
<div class="answer-wrap">
<i class="ico ico-a"></i>
<div class="answer" style="width:100%">
N4를 설치하기 전에 준비해야 할것은 다음과 같습니다.
<ul>
<li><a href="http://www.oracle.com/technetwork/java/javase">JDK 1.6이상</a></li>
<li><a href="http://www.playframework.org/">Play Framework</a></li>
<li><a href="http://git-scm.com/">Git Client</a></li>
</ul>
위의 프로그램을 모두 인스톨 하신후 소스코드를 받습니다.
<pre><code># git clone https://github.com/nforge/nforge4.git</code></pre>
인스톨된 폴더로 가서 N4를 실행시키면 됩니다.
<pre><code># play run</code></pre>
</div>
</div>
</li>
<li class="qa">
<div class="question-wrap">
<i class="ico ico-q"></i>
<a href="#!/toggle" class="question">프로젝트를 새로 생성하고 싶어요.</a>
</div>
<div class="answer-wrap">
<i class="ico ico-a"></i>
<div class="answer" style="width:100%">
<p>상단의 New Project를 클릭하신후 필요한 정보를 입력하시면 됩니다.</p>
<p>
공개설정에서 공개를 택하게 되면 해당 프로젝트의 맴버가 아닌
사용자들도 해당 프로젝트를 둘러볼수 있게 되며 맴버가 아니라면
code 저장소를 익명으로 접근하여 소스코드를 받아 갈 수는 있지만
소스코드를 수정하지는 못합니다. 공개설정에서 비 공개를 택하게 되면
해당 프로젝트의 맴버가 아닌 사용자들은 단지 설명과
이름만을 볼수 있습니다.
</p>
<p>
코드 저장소 방식은 현재 Git과 Subvision을 지원합니다.
Subvision과 Git은 전세계적으로 코드관리 시스템으로 널리 쓰이고 있으며
충분한 신뢰성과 성능을 가지고 있습니다.
</p>
<p>
위의 내용을 다 작성하셨다면 이용약관옆의 물음표를 눌러 약관을 살펴보시고 동의함을 눌러주시면 됩니다.
마지막으로 save버튼을 누르면 새로운 프로젝트를 생성하실수 있습니다.
</p>
</div>
</div>
</li>
<li class="qa">
<div class="question-wrap">
<i class="ico ico-q"></i>
<a href="#!/toggle" class="question">내가 참여하는 프로젝트들은 어디서 볼수 있나요?</a>
</div>
<div class="answer-wrap">
<i class="ico ico-a"></i>
<div class="answer" style="width:100%">
<a href="/">메인화면</a>
우측 하단에 다음과 같이 참여하고 있는 프로젝트의 목록을 볼수 있습니다. 자물쇠가 있는 것은 비공개
프로젝트이며 자물쇠가 없는 것은 공개 프로젝트 입니다. 괄호 안은 프로젝트를 만든사람을 나타내며 괄호 앞은
프로젝트의 제목을 나타냅니다.
<p><img src="/assets/help/myProjects.png"/></p>
혹은 자신의 <a href="/info">정보 페이지</a>에서도 확인하실수 있습니다.
</div>
</div>
</li>
<li class="qa">
<div class="question-wrap">
<i class="ico ico-q"></i>
<a href="#!/toggle" class="question">프로젝트 탈퇴는 어떻게 하나요.</a>
</div>
<div class="answer-wrap">
<i class="ico ico-a"></i>
<div class="answer" style="width:100%">
혹은 자신의 <a href="/info">정보 페이지</a>에서 참여하고 있는 프로젝트 목록을 볼수있고
탈퇴도 할수 있습니다. 자신이 프로젝트의 유일한 관리자라면 해당 프로젝트에서 탈퇴를 할수 없습니다.
</div>
</div>
</li>
<li class="qa">
<div class="question-wrap">
<i class="ico ico-q"></i>
<a href="#!/toggle" class="question">게시판에서는 어떠한 것들을 할수 있나요?</a>
</div>
<div class="answer-wrap">
<i class="ico ico-a"></i>
<div class="answer" style="width:100%">
게시판에서는 다음과 같은 기능이 가능합니다.
<ul>
<li>게시물 상세 조회: 사용자는 게시물의 내용을 볼 수 있다.</li>
<li>게시물 댓글 등록: 로그인 유저는 게시물에 댓글을 남길 수 있다.</li>
<li>게시물 댓글 조회: 사용자는 게시물의 댓글을 볼 수 있다.</li>
<li>게시물 댓글 삭제: 로그인 유저는 자신이 남긴 댓글을 삭제할 수 있다.</li>
<li>관리자 게시물 댓글 삭제: 프로젝트 관리자는 댓글을 삭제할 수 있다.</li>
<li>관리자 게시물 수정: 프로젝트 관리자는 게시물을 편집/삭제 할 수 있다.</li>
</ul>
</div>
</div>
</li>
<li class="qa">
<div class="question-wrap">
<i class="ico ico-q"></i>
<a href="#!/toggle" class="question">N4의 버그를 발견했어요.</a>
</div>
<div class="answer-wrap">
<i class="ico ico-a"></i>
<div class="answer" style="width:100%">
N4는 현재 Open Source로 진행되고 있습니다. 버그를 발견하셨다면
<a href="https://github.com/nforge/nforge4/issues">N4 이슈트레커에 등록</a>해 주시거나
패치를 만들어 보내주시면 됩니다.
</div>
</div>
</li>
</ul>
</div>
<script>
$("a.question").click(function(){
$(this).parents("li").toggleClass("open");
});
</script>
}

@views.html.markdown()


BIN
public/help/myProjects.png View File

Before After
Width: 246  |  Height: 451  |  Size: 13KB

Loading…
Cancel
Save