[Notice] Announcing the End of Demo Server [Read me]

make userinfo to dropdown menu on navbar(HIVE-101), apply HIVE UI to board(HIVE-188), fix filter on board(HIVE-134), remove deprecated file (postValidate.scala.html), change default image of project(HIVE-213)
@c676c084d90b3d62c909035032dbfb58f2844889
--- app/assets/stylesheets/less/_hiveUI.less
+++ app/assets/stylesheets/less/_hiveUI.less
... | ... | @@ -71,7 +71,8 @@ |
71 | 71 |
line-height: 18px; |
72 | 72 |
height: 18px; |
73 | 73 |
border:0; padding:0; |
74 |
- |
|
74 |
+ margin-right:5px; |
|
75 |
+ |
|
75 | 76 |
.border-radius(2px); |
76 | 77 |
.box-shadow(0 1px 2px rgba(0, 0, 0, .25)); |
77 | 78 |
.inline-block; |
... | ... | @@ -83,6 +84,7 @@ |
83 | 84 |
background-color: darken(#707070, 10%); |
84 | 85 |
text-decoration: none; |
85 | 86 |
} |
87 |
+ &.last { margin-right:0; } |
|
86 | 88 |
|
87 | 89 |
&.blue { |
88 | 90 |
background-color: @blue; /*#56B5D9*/ |
... | ... | @@ -103,7 +105,7 @@ |
103 | 105 |
color: #222; |
104 | 106 |
background-color: @white; |
105 | 107 |
&:hover { background-color: darken(@white, 10%); } |
106 |
- } |
|
108 |
+ } |
|
107 | 109 |
} |
108 | 110 |
a.nbtn, div.nbtn, span.nbtn, p.nbtn { |
109 | 111 |
vertical-align:middle; |
... | ... | @@ -115,6 +117,9 @@ |
115 | 117 |
&.small { padding:1px 10px; height:24px; line-height:1; } |
116 | 118 |
&.medium { padding:4px 20px; height:30px; line-height:1; } |
117 | 119 |
&.large { padding:8px 30px; height:36px; line-height:1; font-size:15px; } |
120 |
+} |
|
121 |
+.nbtn-group:last-child { |
|
122 |
+ margin-right:0px; |
|
118 | 123 |
} |
119 | 124 |
|
120 | 125 |
/* fileUpload button **/ |
... | ... | @@ -191,7 +196,7 @@ |
191 | 196 |
|
192 | 197 |
/** 화면 상단의 전체 검색 폼 **/ |
193 | 198 |
.form-searchbar { |
194 |
- width: 146px; height: 19px; |
|
199 |
+ width: 146px; height: 29px; |
|
195 | 200 |
margin: 0; padding: 0 6px; |
196 | 201 |
background-color: @search-bar-bg-color; |
197 | 202 |
border:1px solid @search-bar-border-color; |
... | ... | @@ -200,12 +205,12 @@ |
200 | 205 |
.box-shadow(inset 0px 2px 3px rgba(0,0,0,0.12)); |
201 | 206 |
|
202 | 207 |
.text { |
203 |
- width: 128px; height: 13px; |
|
208 |
+ width: 128px; /*height: 13px;*/ |
|
204 | 209 |
margin: 0; margin-right:3px; |
205 | 210 |
padding:4px 0px; |
206 | 211 |
border: 0 none; |
207 | 212 |
|
208 |
- font-size: 11px; |
|
213 |
+ font-size: 14px; /* 11px */ |
|
209 | 214 |
color: @search-input-color; |
210 | 215 |
background-color: transparent; |
211 | 216 |
|
... | ... | @@ -216,7 +221,8 @@ |
216 | 221 |
.ico-search { |
217 | 222 |
border:0; padding:0; |
218 | 223 |
background-color:transparent; |
219 |
- margin-bottom:2px; |
|
224 |
+ /*margin-bottom:2px;*/ |
|
225 |
+ margin-top:2px; |
|
220 | 226 |
} |
221 | 227 |
} |
222 | 228 |
|
... | ... | @@ -229,6 +235,8 @@ |
229 | 235 |
border: 1px solid #ccc; |
230 | 236 |
.border-radius(3px) !important; |
231 | 237 |
|
238 |
+ &.mini { width:12px; height:12px; } |
|
239 |
+ &.smaller { width:20px; height:20px; } |
|
232 | 240 |
&.small { width:24px; height:24px; } |
233 | 241 |
&.medium { width:32px; height:32px; } |
234 | 242 |
&.large { width:64px; height:64px; } |
--- app/assets/stylesheets/less/_page.less
+++ app/assets/stylesheets/less/_page.less
... | ... | @@ -38,7 +38,7 @@ |
38 | 38 |
|
39 | 39 |
.gnb-menus { |
40 | 40 |
float: left; |
41 |
- overflow: hidden; |
|
41 |
+ /*overflow: hidden;*/ |
|
42 | 42 |
margin: 23px 10px 22px 34px; |
43 | 43 |
|
44 | 44 |
.menu { |
... | ... | @@ -57,45 +57,54 @@ |
57 | 57 |
a { color: @gnb-link-highlight-color; } |
58 | 58 |
} |
59 | 59 |
} |
60 |
+ |
|
60 | 61 |
&.right { |
61 |
- float: right; |
|
62 |
- position:absolute; right:0; top:0; |
|
62 |
+ float: right; position:absolute; |
|
63 |
+ right:0; top:0; |
|
64 |
+ margin-top:19px; |
|
63 | 65 |
|
64 |
- > li { |
|
65 |
- float: left; |
|
66 |
- padding: 0 8px; |
|
67 |
- height: 24px; |
|
68 |
- line-height: 24px; |
|
69 |
- color: @gnb-action-color; |
|
70 |
- font-size: 11px; |
|
71 |
- } |
|
72 |
- .uname { |
|
73 |
- color: @gnb-action-color; |
|
74 |
- } |
|
75 |
- .user-thumb { |
|
76 |
- vertical-align: top; |
|
77 |
- margin-right: 5px; |
|
78 |
- } |
|
79 |
- .signout { |
|
80 |
- color: @gnb-action-signout-color; |
|
81 |
- } |
|
82 |
- .sp-line { |
|
83 |
- padding: 0; padding-top:3px; |
|
84 |
- font-size: 18px; |
|
85 |
- font-family:Dotum; |
|
86 |
- color: @gnb-action-separate-border-color; |
|
87 |
- } |
|
88 |
- .d-link-wrap { |
|
89 |
- padding-top:2px; |
|
90 |
- padding-right:1px; |
|
91 |
- |
|
92 |
- &.d-link-l { padding-right:6px !important; } |
|
93 |
- &.d-link-r { padding-left:6px !important; } |
|
94 |
- } |
|
95 |
- |
|
66 |
+ /** 사이트 검색폼 **/ |
|
96 | 67 |
.search-bar { |
68 |
+ display:inline-block; |
|
97 | 69 |
padding:3px 0 0 5px; |
98 |
- } /*.search-bar */ |
|
70 |
+ } |
|
71 |
+ |
|
72 |
+ /** 로그인 하지 않은 경우 메뉴 **/ |
|
73 |
+ .lnk-group { |
|
74 |
+ a { |
|
75 |
+ padding-right:5px; margin-right:8px; |
|
76 |
+ border-right:1px solid @gnb-action-separate-border-color; |
|
77 |
+ |
|
78 |
+ &:last-of-type { |
|
79 |
+ padding-right:0; margin-right:0; |
|
80 |
+ border-right:none; |
|
81 |
+ } |
|
82 |
+ } |
|
83 |
+ margin-right:10px; |
|
84 |
+ |
|
85 |
+ .avatar-wrap { |
|
86 |
+ border:1px solid #868686; |
|
87 |
+ margin-right:5px; |
|
88 |
+ img { vertical-align:top; } |
|
89 |
+ } |
|
90 |
+ } |
|
91 |
+ |
|
92 |
+ /** 로그인한 사용자의 dropdown 메뉴 **/ |
|
93 |
+ .usermenu { |
|
94 |
+ margin:0; display:inline-block; vertical-align:middle; |
|
95 |
+ |
|
96 |
+ .dropdown-toggle { |
|
97 |
+ background:transparent; |
|
98 |
+ |
|
99 |
+ .d-label { |
|
100 |
+ width:70px; |
|
101 |
+ span.text { margin-left:5px; } |
|
102 |
+ } |
|
103 |
+ .d-caret { |
|
104 |
+ padding:5px 9px; |
|
105 |
+ } |
|
106 |
+ } |
|
107 |
+ } |
|
99 | 108 |
} // .right |
100 | 109 |
}// gnb-menu |
101 | 110 |
}//gnb-menu-wrap |
... | ... | @@ -2009,7 +2018,7 @@ |
2009 | 2018 |
} |
2010 | 2019 |
|
2011 | 2020 |
.notice-wrap { |
2012 |
- margin-top:20px; |
|
2021 |
+ margin:20px 0 0 0; |
|
2013 | 2022 |
border:1px solid #eee; |
2014 | 2023 |
|
2015 | 2024 |
.board-list .board:last-of-type { border-bottom:none; } |
... | ... | @@ -2030,7 +2039,7 @@ |
2030 | 2039 |
margin-right: 5px; |
2031 | 2040 |
} |
2032 | 2041 |
} |
2033 |
-/* |
|
2042 |
+ |
|
2034 | 2043 |
.board-header{ |
2035 | 2044 |
padding: 15px 20px; |
2036 | 2045 |
border-top: 1px solid @gray-d4; |
... | ... | @@ -2066,7 +2075,7 @@ |
2066 | 2075 |
} |
2067 | 2076 |
} |
2068 | 2077 |
} |
2069 |
-*/ |
|
2078 |
+ |
|
2070 | 2079 |
.board-body { |
2071 | 2080 |
padding: 20px; |
2072 | 2081 |
.author-info { |
--- app/views/board/editPost.scala.html
+++ app/views/board/editPost.scala.html
... | ... | @@ -6,92 +6,81 @@ |
6 | 6 |
|
7 | 7 |
@main(title, project, utils.MenuType.BOARD) { |
8 | 8 |
<div class="page"> |
9 |
- @views.html.prjmenu(project, utils.MenuType.BOARD, "main-menu-only") |
|
9 |
+ @prjmenu(project, utils.MenuType.BOARD, "main-menu-only") |
|
10 | 10 |
|
11 |
- <div class="content-wrap frm-wrap"> |
|
11 |
+ <form action="@routes.BoardApp.editPost(project.owner, project.name, postId)" method="post" enctype="multipart/form-data" class="nm"> |
|
12 |
+ <div class="content-wrap frm-wrap"> |
|
13 |
+ <dl> |
|
14 |
+ <dt> |
|
15 |
+ <label for="title">@Messages("post.new.title")</label> |
|
16 |
+ </dt> |
|
17 |
+ <dd> |
|
18 |
+ @helper.inputText(form("title"), 'class->"text title", 'maxlength -> "250", 'tabindex -> 1) |
|
19 |
+ </dd> |
|
20 |
+ |
|
21 |
+ <dd> |
|
22 |
+ @helper.textarea(form("body"), 'markdown -> true, 'class->"text content", 'tabindex -> 2) |
|
23 |
+ </dd> |
|
24 |
+ |
|
25 |
+ @if(isAllowedToNotice){ |
|
26 |
+ @helper.input(form("notice")){(id, name, value, args) => |
|
27 |
+ <dd class="right-txt"> |
|
28 |
+ <input type="checkbox" id="notice" name="notice" class="checkbox" @toHtmlArgs(args) @(if(value.equals(Some("true"))) "checked" else "")/><!-- |
|
29 |
+ --><label for="notice" class="label-public">@Messages("post.notice.label")</label> |
|
30 |
+ </dd> |
|
31 |
+ } |
|
32 |
+ } |
|
33 |
+ </dl> |
|
12 | 34 |
|
13 |
- @helper.form(action=routes.BoardApp.editPost(project.owner, project.name, postId), 'enctype -> "multipart/form-data", 'class->"nm"){ |
|
14 |
- |
|
15 |
- <dl> |
|
16 |
- <dt> |
|
17 |
- <div id="warning" class="n-alert hide"> |
|
18 |
- <div class="n-inner"> |
|
19 |
- <span class="msg">제목과 본문에 빈칸이 있습니다.</span> |
|
20 |
- <a href="#" class="ico btn-delete"></a> |
|
21 |
- </div> |
|
22 |
- </div> |
|
23 |
- <label for="title">@Messages("post.new.title")</label> |
|
24 |
- </dt> |
|
25 |
- <dd> |
|
26 |
- @helper.inputText(form("title"), 'class->"text title", 'maxlength -> "250", 'tabindex -> 1) |
|
27 |
- </dd> |
|
28 |
- </dl> |
|
29 |
- |
|
30 |
- @helper.textarea(form("body"), 'markdown -> true, 'class->"text content", 'tabindex -> 2) |
|
31 |
- |
|
32 |
- @if(isAllowedToNotice) { |
|
33 |
- <div> |
|
34 |
- <label for="notice">@Messages("post.notice")</label> |
|
35 |
- @helper.input(form("notice")) { (id, name, value, args) => |
|
36 |
- <input type="checkbox" name="@name" id="@id" @toHtmlArgs(args) @(if(value.equals(Some("true"))) "checked" else "") /> |
|
37 |
- } |
|
38 |
- </div> |
|
39 |
- } |
|
40 |
- |
|
41 |
- @** fileUploader **@ |
|
42 |
- @if(UserApp.currentUser() != UserApp.anonymous) { |
|
43 |
- |
|
44 |
- <div class="content-footer"> |
|
45 |
- <div class="attach-wrap"> |
|
46 |
- <div class="avatar-wrap"> |
|
47 |
- <img src="@User.findByLoginId(session.get("loginId")).avatarUrl" class="img-rounded" width="32" height="32" alt="avatar"> |
|
48 |
- </div> |
|
49 |
- <div id="upload" class="attach-info-wrap" resourceType="@ResourceType.BOARD_POST" resourceId="@postId"> |
|
50 |
- <div> |
|
51 |
- <span class="progress-num">0%</span> <span class="sp-line"> </span> |
|
52 |
- <strong>total</strong> <span class="total-num">0MB</span> |
|
35 |
+ @** fileUploader **@ |
|
36 |
+ @if(UserApp.currentUser() != UserApp.anonymous) { |
|
37 |
+ <div class="content-footer"> |
|
38 |
+ <div class="attach-wrap"> |
|
39 |
+ <div class="avatar-wrap"> |
|
40 |
+ <img src="@User.findByLoginId(session.get("loginId")).avatarUrl" class="img-rounded" width="32" height="32" alt="avatar"> |
|
53 | 41 |
</div> |
54 |
- <div class="progress-wrap"> |
|
55 |
- <div class="progress n4"> |
|
56 |
- <div class="bar orange" style="width: 0%;"></div> |
|
42 |
+ <div id="upload" class="attach-info-wrap" resourceType="@ResourceType.BOARD_POST" resourceId="@postId"> |
|
43 |
+ <div> |
|
44 |
+ <span class="progress-num">0%</span> <span class="sp-line"> </span> |
|
45 |
+ <strong>total</strong> <span class="total-num">0MB</span> |
|
46 |
+ </div> |
|
47 |
+ <div class="progress-wrap"> |
|
48 |
+ <div class="progress n4"> |
|
49 |
+ <div class="bar orange" style="width: 0%;"></div> |
|
50 |
+ </div> |
|
57 | 51 |
</div> |
58 | 52 |
</div> |
59 |
- <!-- <a href="#!/cancel"><i class="ico btn-cancel"></i></a> --> |
|
60 |
- </div> |
|
61 |
- |
|
62 |
- <div class="btn-wrap"> |
|
63 |
- <div class="fake-file-wrap"> |
|
64 |
- <input type="file" class="file" name="filePath" size="1"> |
|
65 |
- <div class="ns-btn"> |
|
66 |
- <i class="ico ico-plus-blue"></i>@Messages("button.upload") |
|
53 |
+ |
|
54 |
+ <div class="btn-wrap"> |
|
55 |
+ <div class="nbtn medium white fake-file-wrap"> |
|
56 |
+ <i class="ico ico-plus-blue"></i>@Messages("button.upload")<!-- |
|
57 |
+ --> <input type="file" class="file" name="filePath"> |
|
67 | 58 |
</div> |
68 | 59 |
</div> |
69 | 60 |
</div> |
61 |
+ <script type="text/template" id="tplAttachedFile"><!-- |
|
62 |
+ --><li class="attached-file" data-name="${fileName}" data-href="${fileHref}" data-mime="${mimeType}" data-size="${fileSize}"> |
|
63 |
+ <strong>${fileName}(${fileSizeReadable})</strong><!-- |
|
64 |
+ --><a class="attached-delete"><i class="ico btn-delete"></i></a></li> |
|
65 |
+ </script> |
|
66 |
+ |
|
67 |
+ <div class="attached-files-wrap"> |
|
68 |
+ <ul class="attached-files"></ul> |
|
69 |
+ </div> |
|
70 |
+ </div> |
|
71 |
+ } |
|
72 |
+ @** end of fileUploader **@ |
|
73 |
+ |
|
74 |
+ <div class="actions"> |
|
75 |
+ <button class="nbtn medium orange" tabindex="3">@Messages("button.save")</button><!-- |
|
76 |
+ --><a href="javascript:history.back();" class="nbtn medium last" tabindex="4">@Messages("button.cancel")</a> |
|
77 |
+ </div> |
|
78 |
+ |
|
70 | 79 |
</div> |
71 |
- <script type="text/template" id="tplAttachedFile"><!-- |
|
72 |
- --><li class="attached-file" data-name="${fileName}" data-href="${fileHref}" data-mime="${mimeType}" data-size="${fileSize}"> |
|
73 |
- <strong>${fileName}(${fileSizeReadable})</strong><!-- |
|
74 |
- --><a class="attached-delete"><i class="ico btn-delete"></i></a> |
|
75 |
- </li> |
|
76 |
- </script> |
|
77 |
- |
|
78 |
- <div class="attached-files-wrap"> |
|
79 |
- <ul class="attached-files"></ul> |
|
80 |
- </div> |
|
81 |
- } |
|
82 |
- @** end of fileUploader **@ |
|
83 |
- |
|
84 |
- </div> |
|
85 |
- |
|
86 |
- <div class="actions"> |
|
87 |
- <button class="btn-transparent n-btn orange med">@Messages("button.save")</button> |
|
88 |
- <a href="javascript:history.back();" class="n-btn gray med cancel">@Messages("button.cancel")</a> |
|
89 |
- </div> |
|
90 |
- |
|
91 |
- } @** end of form **@ |
|
80 |
+ </form> |
|
92 | 81 |
</div> |
93 | 82 |
|
94 |
-@views.html.markdown() |
|
83 |
+@markdown() |
|
95 | 84 |
|
96 | 85 |
<script type="text/javascript"> |
97 | 86 |
$(document).ready(function(){ |
--- app/views/board/newPost.scala.html
+++ app/views/board/newPost.scala.html
... | ... | @@ -6,92 +6,79 @@ |
6 | 6 |
|
7 | 7 |
@main(title, project, utils.MenuType.BOARD) { |
8 | 8 |
<div class="page"> |
9 |
- @views.html.prjmenu(project, utils.MenuType.BOARD, "main-menu-only") |
|
9 |
+ @prjmenu(project, utils.MenuType.BOARD, "main-menu-only") |
|
10 | 10 |
|
11 |
- <div class="content-wrap frm-wrap"> |
|
11 |
+ <form action="@routes.BoardApp.newPost(project.owner, project.name)" method="post" enctype="multipart/form-data" class="nm"> |
|
12 |
+ <div class="content-wrap frm-wrap"> |
|
13 |
+ <dl> |
|
14 |
+ <dt> |
|
15 |
+ <label for="title">@Messages("post.new.title")</label> |
|
16 |
+ </dt> |
|
17 |
+ <dd> |
|
18 |
+ <input type="text" id="title" name="title" class="text title" maxlength="250" tabindex="1" /> |
|
19 |
+ </dd> |
|
20 |
+ |
|
21 |
+ <dd> |
|
22 |
+ <textarea id="body" name="body" class="text content" markdown="true" tabindex="2"></textarea> |
|
23 |
+ </dd> |
|
24 |
+ |
|
25 |
+ @if(isAllowedToNotice){ |
|
26 |
+ <dd class="right-txt"> |
|
27 |
+ <input type="checkbox" id="notice" name="notice" class="checkbox" /><!-- |
|
28 |
+ --><label for="notice" class="label-public">@Messages("post.notice.label")</label> |
|
29 |
+ </dd> |
|
30 |
+ } |
|
31 |
+ </dl> |
|
12 | 32 |
|
13 |
- @helper.form(action=routes.BoardApp.newPost(project.owner, project.name), 'enctype -> "multipart/form-data", 'class->"nm"){ |
|
14 |
- |
|
15 |
- <dl> |
|
16 |
- <dt> |
|
17 |
- <div id="warning" class="n-alert hide"> |
|
18 |
- <div class="n-inner"> |
|
19 |
- <span class="msg">제목과 본문에 빈칸이 있습니다.</span> |
|
20 |
- <a href="#" class="ico btn-delete"></a> |
|
21 |
- </div> |
|
22 |
- </div> |
|
23 |
- <label for="title">@Messages("post.new.title")</label> |
|
24 |
- </dt> |
|
25 |
- <dd> |
|
26 |
- @helper.inputText(form("title"), 'class->"text title", 'maxlength -> "250", 'tabindex -> 1) |
|
27 |
- </dd> |
|
28 |
- </dl> |
|
29 |
- |
|
30 |
- @helper.textarea(form("body"), 'markdown -> true, 'class->"text content", 'tabindex -> 2) |
|
31 |
- |
|
32 |
- @if(isAllowedToNotice) { |
|
33 |
- <div> |
|
34 |
- <label for="notice">@Messages("post.notice")</label> |
|
35 |
- @helper.input(form("notice")) { (id, name, value, args) => |
|
36 |
- <input type="checkbox" name="@name" id="@id" @toHtmlArgs(args) /> |
|
37 |
- } |
|
38 |
- </div> |
|
39 |
- } |
|
40 |
- |
|
41 |
- @** fileUploader **@ |
|
42 |
- @if(UserApp.currentUser() != UserApp.anonymous) { |
|
43 |
- |
|
44 |
- <div class="content-footer"> |
|
45 |
- <div class="attach-wrap"> |
|
46 |
- <div class="avatar-wrap"> |
|
47 |
- <img src="@User.findByLoginId(session.get("loginId")).avatarUrl" class="img-rounded" width="32" height="32" alt="avatar"> |
|
48 |
- </div> |
|
49 |
- <div id="upload" class="attach-info-wrap" resourceType="@ResourceType.BOARD_POST"> |
|
50 |
- <div> |
|
51 |
- <span class="progress-num">0%</span> <span class="sp-line"> </span> |
|
52 |
- <strong>total</strong> <span class="total-num">0MB</span> |
|
33 |
+ @** fileUploader **@ |
|
34 |
+ @if(UserApp.currentUser() != UserApp.anonymous) { |
|
35 |
+ <div class="content-footer"> |
|
36 |
+ <div class="attach-wrap"> |
|
37 |
+ <div class="avatar-wrap"> |
|
38 |
+ <img src="@User.findByLoginId(session.get("loginId")).avatarUrl" class="img-rounded" width="32" height="32" alt="avatar"> |
|
53 | 39 |
</div> |
54 |
- <div class="progress-wrap"> |
|
55 |
- <div class="progress n4"> |
|
56 |
- <div class="bar orange" style="width: 0%;"></div> |
|
40 |
+ <div id="upload" class="attach-info-wrap" resourceType="@ResourceType.BOARD_POST"> |
|
41 |
+ <div> |
|
42 |
+ <span class="progress-num">0%</span> <span class="sp-line"> </span> |
|
43 |
+ <strong>total</strong> <span class="total-num">0MB</span> |
|
44 |
+ </div> |
|
45 |
+ <div class="progress-wrap"> |
|
46 |
+ <div class="progress n4"> |
|
47 |
+ <div class="bar orange" style="width: 0%;"></div> |
|
48 |
+ </div> |
|
57 | 49 |
</div> |
58 | 50 |
</div> |
59 |
- <!-- <a href="#!/cancel"><i class="ico btn-cancel"></i></a> --> |
|
60 |
- </div> |
|
61 |
- |
|
62 |
- <div class="btn-wrap"> |
|
63 |
- <div class="fake-file-wrap"> |
|
64 |
- <input type="file" class="file" name="filePath" size="1"> |
|
65 |
- <div class="ns-btn"> |
|
66 |
- <i class="ico ico-plus-blue"></i>@Messages("button.upload") |
|
51 |
+ |
|
52 |
+ <div class="btn-wrap"> |
|
53 |
+ <div class="nbtn medium white fake-file-wrap"> |
|
54 |
+ <i class="ico ico-plus-blue"></i>@Messages("button.upload")<!-- |
|
55 |
+ --> <input type="file" class="file" name="filePath"> |
|
67 | 56 |
</div> |
68 | 57 |
</div> |
69 | 58 |
</div> |
59 |
+ <script type="text/template" id="tplAttachedFile"><!-- |
|
60 |
+ --><li class="attached-file" data-name="${fileName}" data-href="${fileHref}" data-mime="${mimeType}" data-size="${fileSize}"> |
|
61 |
+ <strong>${fileName}(${fileSizeReadable})</strong><!-- |
|
62 |
+ --><a class="attached-delete"><i class="ico btn-delete"></i></a></li> |
|
63 |
+ </script> |
|
64 |
+ |
|
65 |
+ <div class="attached-files-wrap"> |
|
66 |
+ <ul class="attached-files"></ul> |
|
67 |
+ </div> |
|
68 |
+ </div> |
|
69 |
+ } |
|
70 |
+ @** end of fileUploader **@ |
|
71 |
+ |
|
72 |
+ <div class="actions"> |
|
73 |
+ <button class="nbtn medium orange" tabindex="3">@Messages("button.save")</button><!-- |
|
74 |
+ --><a href="javascript:history.back();" class="nbtn medium last" tabindex="4">@Messages("button.cancel")</a> |
|
75 |
+ </div> |
|
76 |
+ |
|
70 | 77 |
</div> |
71 |
- <script type="text/template" id="tplAttachedFile"><!-- |
|
72 |
- --><li class="attached-file" data-name="${fileName}" data-href="${fileHref}" data-mime="${mimeType}" data-size="${fileSize}"> |
|
73 |
- <strong>${fileName}(${fileSizeReadable})</strong><!-- |
|
74 |
- --><a class="attached-delete"><i class="ico btn-delete"></i></a> |
|
75 |
- </li> |
|
76 |
- </script> |
|
77 |
- |
|
78 |
- <div class="attached-files-wrap"> |
|
79 |
- <ul class="attached-files"></ul> |
|
80 |
- </div> |
|
81 |
- } |
|
82 |
- @** end of fileUploader **@ |
|
83 |
- |
|
84 |
- </div> |
|
85 |
- |
|
86 |
- <div class="actions"> |
|
87 |
- <button class="btn-transparent n-btn orange med">@Messages("button.save")</button> |
|
88 |
- <a href="javascript:history.back();" class="n-btn gray med cancel">@Messages("button.cancel")</a> |
|
89 |
- </div> |
|
90 |
- |
|
91 |
- } @** end of form **@ |
|
78 |
+ </form> |
|
92 | 79 |
</div> |
93 | 80 |
|
94 |
-@views.html.markdown() |
|
81 |
+@markdown() |
|
95 | 82 |
|
96 | 83 |
<script type="text/javascript"> |
97 | 84 |
$(document).ready(function(){ |
--- app/views/board/post.scala.html
+++ app/views/board/post.scala.html
... | ... | @@ -8,156 +8,140 @@ |
8 | 8 |
@main(post.title, project, utils.MenuType.BOARD){ |
9 | 9 |
|
10 | 10 |
<div class="page board-view"> |
11 |
- @prjmenu(project, utils.MenuType.BOARD, "main-menu-only") |
|
11 |
+ @prjmenu(project, utils.MenuType.BOARD, "main-menu-only") |
|
12 | 12 |
|
13 |
- @** Post Info **@ |
|
14 |
- <div class="board-header"> |
|
15 |
- <div class="board-id div">@post.getNumber</div> |
|
16 |
- <h1 class="title div">@post.title</h1> |
|
17 |
- <div class="date div">@utils.TemplateHelper.agoString(post.ago())</div> |
|
18 |
- </div> |
|
13 |
+ @** Post Info **@ |
|
14 |
+ <div class="board-header"> |
|
15 |
+ <div class="board-id div">@post.getNumber</div> |
|
16 |
+ <h1 class="title div">@post.title</h1> |
|
17 |
+ <div class="date div">@utils.TemplateHelper.agoString(post.ago())</div> |
|
18 |
+ </div> |
|
19 | 19 |
|
20 |
- @** Content body **@ |
|
21 |
- <div class="board-body"> |
|
22 |
- <div class="author-info"> |
|
23 |
- <a href="@routes.UserApp.userInfo(post.authorLoginId)" class="avatar-wrap pull-left img-rounded"> |
|
24 |
- <img class="user-picture" src="@User.findByLoginId(post.authorLoginId).avatarUrl" width="32" height="32" alt="@post.authorName"> |
|
25 |
- </a> |
|
26 |
- <div class="media-body"> |
|
27 |
- <p> |
|
28 |
- <a href="@routes.UserApp.userInfo(post.authorLoginId)"><strong>@post.authorLoginId</strong></a> <!--<span class="name">(Loren Brichter)</span>--> |
|
29 |
- </p> |
|
30 |
- <p class="status"> |
|
31 |
- <!--Hit <strong class="num">777</strong> |
|
32 |
- -->Comment <strong class="num">@post.numOfComments</strong><!-- |
|
33 |
- Like <i class="ico ico-like-small"></i> <strong class="num">522</strong>--> |
|
34 |
- </p> |
|
35 |
- </div> |
|
36 |
- </div> |
|
37 |
- <div class="content" markdown="true">@post.body</div> |
|
38 |
- <div class="attachments" resourceType="@ResourceType.BOARD_POST" resourceId="@post.id"></div> |
|
39 |
- <!-- |
|
40 |
- <ul class="attaches wm"> |
|
41 |
- <li class="attach"><i class="ico ico-clip"></i>K23.png (11KB)</li> |
|
42 |
- <li class="attach"><i class="ico ico-clip"></i>K23.png (11KB)</li> |
|
43 |
- <li class="attach"><i class="ico ico-clip"></i>K23.png (11KB)</li> |
|
44 |
- </ul>--> |
|
45 |
- </div> |
|
46 |
- <div class="board-footer board-actrow"> |
|
47 |
- @if(isAllowed(UserApp.currentUser(), post.asResource(), Operation.UPDATE)){ |
|
48 |
- <a href="@routes.BoardApp.editPostForm(project.owner, project.name, post.id)" class="n-btn orange med">@Messages("button.edit")</a> |
|
49 |
- } |
|
50 |
- @if(isAllowed(UserApp.currentUser(), post.asResource(), Operation.DELETE)){ |
|
51 |
- <a href="#deleteConfirm" data-toggle="modal" class="n-btn light-gray med">@Messages("button.delete")</a> |
|
52 |
- } |
|
53 |
- <a href="@routes.BoardApp.posts(project.owner, project.name)" class="n-btn gray med">@Messages("button.list")</a> |
|
54 |
- </div> |
|
55 |
- |
|
56 |
-@** Comment **@ |
|
57 |
-<div class="board-comment-wrap"> |
|
58 |
- <div class="comment-header"><strong>Comment</strong> <strong class="num">@post.comments.size()</strong></div> |
|
59 |
- |
|
60 |
- <ul class="comments"> |
|
61 |
- @for(comment <-post.comments){ |
|
62 |
- <li class="comment"> |
|
63 |
- <a href="@routes.UserApp.userInfo(comment.authorLoginId)" class="pull-left img-rounded avatar-wrap"> |
|
64 |
- <img class="user-picture" src="@User.findByLoginId(comment.authorLoginId).avatarUrl" width="32" height="32" alt="@comment.authorLoginId"> |
|
20 |
+ @** Content body **@ |
|
21 |
+ <div class="board-body"> |
|
22 |
+ <div class="author-info"> |
|
23 |
+ <a href="@routes.UserApp.userInfo(post.authorLoginId)" class="avatar-wrap pull-left"> |
|
24 |
+ <img src="@User.findByLoginId(post.authorLoginId).avatarUrl" width="32" height="32" alt="@post.authorName"> |
|
65 | 25 |
</a> |
66 | 26 |
<div class="media-body"> |
67 |
- @if(isAllowed(UserApp.currentUser(), comment.asResource(), Operation.DELETE)){ |
|
68 |
- <a class="pull-right close" href="@routes.BoardApp.deleteComment(project.owner, project.name, post.id, comment.id)">×</a> |
|
69 |
- } |
|
70 |
- <p class="commenter"> |
|
71 |
- <a href="@routes.UserApp.userInfo(comment.authorLoginId)"><strong>@comment.authorLoginId</strong></a> |
|
72 |
- <span class="date"> @utils.TemplateHelper.agoString(comment.ago())</span> |
|
27 |
+ <p> |
|
28 |
+ <a href="@routes.UserApp.userInfo(post.authorLoginId)"><strong>@post.authorLoginId</strong></a> |
|
73 | 29 |
</p> |
74 |
- <div class="comment-body" markdown="true">@comment.contents</div> |
|
75 |
- <div class="attachments" resourceType="@ResourceType.NONISSUE_COMMENT" resourceId="@comment.id"></div> |
|
76 |
- </div> |
|
77 |
- </li> |
|
78 |
- } |
|
79 |
- </ul> |
|
80 |
- |
|
81 |
-@if(isCreatable(User.findByLoginId(session.get("loginId")), project, models.enumeration.ResourceType.BOARD_POST)){ |
|
82 |
- <div class="write-comment-box"> |
|
83 |
- @helper.form(routes.BoardApp.newComment(project.owner, project.name, post.id), 'class->"nm", 'enctype -> "multipart/form-data"){ |
|
84 |
- <div class="write-comment-wrap"> |
|
85 |
- <textarea name="contents" id="contents" class="text comment" markdown="true"></textarea> |
|
86 |
- <button class="comment-btn">@Messages("button.comment.new")</button> |
|
30 |
+ <p class="status"> |
|
31 |
+ <!--Hit <strong class="num">777</strong> |
|
32 |
+ -->Comment <strong class="num">@post.numOfComments</strong> |
|
33 |
+ </p> |
|
34 |
+ </div> |
|
87 | 35 |
</div> |
88 |
- |
|
89 |
- <div class="attach-wrap"> |
|
90 |
- <div class="pull-left img-rounded avatar-wrap"> |
|
91 |
- @if(UserApp.currentUser() != UserApp.anonymous) { |
|
92 |
- <img src="@User.findByLoginId(session.get("loginId")).avatarUrl" class="img-rounded" width="32" height="32" alt="avatar"> |
|
93 |
- } else { |
|
94 |
- <img src="@routes.Assets.at("images/default-avatar-34.png")" class="img-rounded" width="32" height="32" alt="avatar"> |
|
95 |
- } |
|
96 |
- </div> |
|
97 |
- |
|
98 |
- @** fileUploader **@ |
|
99 |
- @if(UserApp.currentUser() != UserApp.anonymous) { |
|
36 |
+ <div class="content" markdown="true">@post.body</div> |
|
37 |
+ <div class="attachments" resourceType="@ResourceType.BOARD_POST" resourceId="@post.id"> |
|
38 |
+ @**<!-- |
|
39 |
+ <ul class="attaches wm"> |
|
40 |
+ <li class="attach"><i class="ico ico-clip"></i>K23.png (11KB)</li> |
|
41 |
+ </ul>--> |
|
42 |
+ **@ |
|
43 |
+ </div> |
|
44 |
+ </div> |
|
45 |
+ <div class="board-footer board-actrow nbtn-group"> |
|
46 |
+ @if(isAllowed(UserApp.currentUser(), post.asResource(), Operation.DELETE)){ |
|
47 |
+ <a href="#deleteConfirm" class="nbtn medium black" data-toggle="modal">@Messages("button.delete")</a> |
|
48 |
+ } |
|
100 | 49 |
|
101 |
- <div id="upload" class="attach-info-wrap" resourceType="@ResourceType.NONISSUE_COMMENT"> |
|
102 |
- <div> |
|
103 |
- <span class="progress-num">0%</span> <span class="sp-line"> </span> |
|
104 |
- <strong>total</strong> <span class="total-num">0Mb</span> |
|
50 |
+ @if(isAllowed(UserApp.currentUser(), post.asResource(), Operation.UPDATE)){ |
|
51 |
+ <a href="@routes.BoardApp.editPostForm(project.owner, project.name, post.id)" class="nbtn medium orange">@Messages("button.edit")</a> |
|
52 |
+ } |
|
53 |
+ |
|
54 |
+ <a href="@routes.BoardApp.posts(project.owner, project.name)" class="nbtn medium">@Messages("button.list")</a> |
|
55 |
+ </div> |
|
56 |
+ |
|
57 |
+ @** Comment **@ |
|
58 |
+ <div class="board-comment-wrap"> |
|
59 |
+ <div class="comment-header"><strong>@Messages("comment")</strong> <strong class="num">@post.comments.size()</strong></div> |
|
60 |
+ <hr class="nm" /> |
|
61 |
+ |
|
62 |
+ <ul class="comments"> |
|
63 |
+ @for(comment <-post.comments){ |
|
64 |
+ <li class="comment"> |
|
65 |
+ <a href="@routes.UserApp.userInfo(comment.authorLoginId)" class="avatar-wrap pull-left"> |
|
66 |
+ <img src="@User.findByLoginId(comment.authorLoginId).avatarUrl" width="32" height="32" alt="@comment.authorLoginId"> |
|
67 |
+ </a> |
|
68 |
+ <div class="media-body"> |
|
69 |
+ @if(isAllowed(UserApp.currentUser(), comment.asResource(), Operation.DELETE)){ |
|
70 |
+ <a href="@routes.BoardApp.deleteComment(project.owner, project.name, post.id, comment.id)" class="pull-right close">×</a> |
|
71 |
+ } |
|
72 |
+ <p class="commenter"> |
|
73 |
+ <a href="@routes.UserApp.userInfo(comment.authorLoginId)"><strong>@comment.authorLoginId</strong></a> |
|
74 |
+ <span class="date"> @utils.TemplateHelper.agoString(comment.ago())</span> |
|
75 |
+ </p> |
|
76 |
+ <div class="comment-body" markdown="true">@comment.contents</div> |
|
77 |
+ <div class="attachments" resourceType="@ResourceType.NONISSUE_COMMENT" resourceId="@comment.id"></div> |
|
105 | 78 |
</div> |
106 |
- <div class="progress-wrap"> |
|
107 |
- <div class="progress n4"> |
|
108 |
- <div class="bar orange" style="width: 0%;"></div> |
|
109 |
- </div> |
|
110 |
- </div> |
|
111 |
- <!-- <a href="#!/cancel"><i class="ico btn-cancel"></i></a> --> |
|
79 |
+ </li> |
|
80 |
+ } |
|
81 |
+ </ul> |
|
82 |
+ |
|
83 |
+ @if(isCreatable(User.findByLoginId(session.get("loginId")), project, models.enumeration.ResourceType.BOARD_POST)){ |
|
84 |
+ <hr class="nm" /> |
|
85 |
+ @helper.form(routes.BoardApp.newComment(project.owner, project.name, post.id), 'class->"nm", 'enctype -> "multipart/form-data"){ |
|
86 |
+ <div class="write-comment-box"> |
|
87 |
+ <div class="write-comment-wrap"> |
|
88 |
+ <textarea name="contents" id="contents" class="text comment" markdown="true"></textarea><!-- |
|
89 |
+ --><button class="comment-btn">@Messages("button.comment.new")</button> |
|
112 | 90 |
</div> |
91 |
+ |
|
92 |
+ @** fileUploader **@ |
|
93 |
+ @if(UserApp.currentUser() != UserApp.anonymous) { |
|
94 |
+ <div class="attach-wrap"> |
|
95 |
+ <div class="avatar-wrap pull-left"> |
|
96 |
+ <img src="@User.findByLoginId(session.get("loginId")).avatarUrl" width="32" height="32"> |
|
97 |
+ </div> |
|
113 | 98 |
|
114 |
- <div class="btn-wrap"> |
|
115 |
- <div class="fake-file-wrap"> |
|
116 |
- <input type="file" class="file" name="filePath" size="1"> |
|
117 |
- <div class="ns-btn"> |
|
118 |
- <i class="ico ico-plus-blue"></i>@Messages("button.upload") |
|
99 |
+ <div id="upload" class="attach-info-wrap" resourceType="@ResourceType.NONISSUE_COMMENT"> |
|
100 |
+ <div> |
|
101 |
+ <span class="progress-num">0%</span> <span class="sp-line"> </span> |
|
102 |
+ <strong>total</strong> <span class="total-num">0Mb</span> |
|
103 |
+ </div> |
|
104 |
+ <div class="progress-wrap"> |
|
105 |
+ <div class="progress n4"> |
|
106 |
+ <div class="bar orange" style="width: 0%;"></div> |
|
107 |
+ </div> |
|
119 | 108 |
</div> |
120 | 109 |
</div> |
110 |
+ |
|
111 |
+ <div class="btn-wrap"> |
|
112 |
+ <div class="nbtn medium white fake-file-wrap"> |
|
113 |
+ <i class="ico ico-plus-blue"></i>@Messages("button.upload")<!-- |
|
114 |
+ --> <input type="file" class="file" name="filePath"> |
|
115 |
+ </div> |
|
116 |
+ </div> |
|
117 |
+ </div> |
|
118 |
+ <div class="attached-files-wrap"> |
|
119 |
+ <ul class="attached-files"></ul> |
|
121 | 120 |
</div> |
122 | 121 |
} |
123 | 122 |
@** end of fileUploader **@ |
124 |
- |
|
123 |
+ |
|
125 | 124 |
</div> |
126 | 125 |
} @** end of comment form **@ |
127 |
- <div class="attached-files-wrap"> |
|
128 |
- <ul class="attached-files"></ul> |
|
126 |
+ |
|
127 |
+ @** end of write-comment-box **@ |
|
128 |
+ |
|
129 |
+ } else { |
|
130 |
+ <div class="write-comment-box"> |
|
131 |
+ <div class="write-comment-wrap"> |
|
132 |
+ <textarea class="text comment disabled" disabled="disabled">@Messages("auth.unauthorized.comment")</textarea> |
|
133 |
+ <button class="comment-btn disabled">@Messages("button.comment.new")</button> |
|
134 |
+ </div> |
|
129 | 135 |
</div> |
130 |
- </div> |
|
131 |
- <script type="text/template" id="tplAttachedFile"><!-- |
|
132 |
- --><li class="attached-file" data-name="${fileName}" data-href="${fileHref}" data-mime="${mimeType}" data-size="${fileSize}"> |
|
133 |
- <strong>${fileName}(${fileSizeReadable})</strong><!-- |
|
134 |
- --><a class="attached-delete"><i class="ico btn-delete"></i></a> |
|
135 |
- </li> |
|
136 |
- </script> |
|
137 |
-@** end of write-comment-box **@ |
|
138 |
-} else { |
|
139 |
- <div class="write-comment-box"> |
|
140 |
- <div class="write-comment-wrap"> |
|
141 |
- <textarea class="text comment disabled" disabled="disabled">@Messages("auth.unauthorized.comment")</textarea> |
|
142 |
- <button class="comment-btn disabled">@Messages("button.comment.new")</button> |
|
143 |
- </div> |
|
136 |
+ } |
|
144 | 137 |
</div> |
145 |
-} |
|
146 | 138 |
</div> |
147 | 139 |
|
148 |
-@** |
|
149 |
-<div class="board-footer"> |
|
150 |
- @isAllowed(UserApp.currentUser(), post.asResource(), Operation.UPDATE)){ |
|
151 |
- <a href="@routes.BoardApp.editPostForm(project.owner, project.name, post.id)" class="n-btn orange med">@Messages("button.edit")</a> |
|
152 |
- } |
|
153 |
- |
|
154 |
- @isAllowed(UserApp.currentUser(), post.asResource(), Operation.DELETE)){ |
|
155 |
- <a href="#deleteConfirm" data-toggle="modal" class="n-btn light-gray med">@Messages("button.delete")</a> |
|
156 |
- } |
|
157 |
- |
|
158 |
- <a href="@routes.BoardApp.posts(project.owner, project.name)" class="n-btn gray med">@Messages("button.list")</a> |
|
159 |
-</div> |
|
160 |
-**@ |
|
140 |
+<script type="text/template" id="tplAttachedFile"><!-- |
|
141 |
+ --><li class="attached-file" data-name="${fileName}" data-href="${fileHref}" data-mime="${mimeType}" data-size="${fileSize}"> |
|
142 |
+ <strong>${fileName}(${fileSizeReadable})</strong><!-- |
|
143 |
+ --><a class="attached-delete"><i class="ico btn-delete"></i></a></li> |
|
144 |
+</script> |
|
161 | 145 |
|
162 | 146 |
@** Confirm to delete post **@ |
163 | 147 |
<div id="deleteConfirm" class="modal hide fade"> |
... | ... | @@ -169,8 +153,7 @@ |
169 | 153 |
<p>@Messages("post.delete.confirm")</p> |
170 | 154 |
</div> |
171 | 155 |
<div class="modal-footer"> |
172 |
- <a class="btn btn-danger med" |
|
173 |
- href="@routes.BoardApp.deletePost(project.owner, project.name, post.id)">@Messages("button.yes")</a> |
|
156 |
+ <a class="btn btn-danger med" href="@routes.BoardApp.deletePost(project.owner, project.name, post.id)">@Messages("button.yes")</a> |
|
174 | 157 |
<a href="#" class="btn med" data-dismiss="modal">@Messages("button.no")</a> |
175 | 158 |
</div> |
176 | 159 |
</div> |
--- app/views/board/postList.scala.html
+++ app/views/board/postList.scala.html
... | ... | @@ -8,9 +8,9 @@ |
8 | 8 |
|
9 | 9 |
@makeFilterLink(fieldName:String, orderBy:String, orderDir:String, fieldText:String) = { |
10 | 10 |
@if(orderBy.equals(fieldName)) { |
11 |
- <a href="@urlToList&orderBy=@fieldName&orderDir=@if(orderDir.equals("desc")){asc}else{desc}" class="filter active"><i class="ico btn-gray-arrow @if(orderDir.equals("desc")){ down }"></i>@fieldText</a> |
|
11 |
+ <a href="@urlToList?orderBy=@fieldName&orderDir=@if(orderDir.equals("desc")){asc}else{desc}" class="filter active"><i class="ico btn-gray-arrow @if(orderDir.equals("desc")){ down }"></i>@fieldText</a> |
|
12 | 12 |
} else { |
13 |
- <a href="@urlToList&orderBy=@fieldName&orderDir=asc" class="filter"><i class="ico btn-gray-arrow"></i>@fieldText</a> |
|
13 |
+ <a href="@urlToList?orderBy=@fieldName&orderDir=asc" class="filter"><i class="ico btn-gray-arrow"></i>@fieldText</a> |
|
14 | 14 |
} |
15 | 15 |
} |
16 | 16 |
|
... | ... | @@ -30,6 +30,24 @@ |
30 | 30 |
</div> |
31 | 31 |
</div> |
32 | 32 |
</div> |
33 |
+ |
|
34 |
+ @if(page.getTotalRowCount == 0){ |
|
35 |
+ |
|
36 |
+ <div class="error-wrap"> |
|
37 |
+ <i class="ico ico-err1"></i> |
|
38 |
+ <p>@Messages("post.is.empty")</p> |
|
39 |
+ </div> |
|
40 |
+ |
|
41 |
+ } else { |
|
42 |
+ |
|
43 |
+ @if(page.getTotalRowCount > 1){ |
|
44 |
+ <div class="filter-wrap board"> |
|
45 |
+ <div class="filters"> |
|
46 |
+ @makeFilterLink("createdDate", param.orderBy, param.orderDir, Messages("order.date")) |
|
47 |
+ @makeFilterLink("numOfComments", param.orderBy, param.orderDir, Messages("order.comments")) |
|
48 |
+ </div> |
|
49 |
+ </div> |
|
50 |
+ } |
|
33 | 51 |
|
34 | 52 |
@if(notices != null && notices.size > 0) { |
35 | 53 |
<div class="notice-wrap bubble-wrap gray"> |
... | ... | @@ -67,24 +85,6 @@ |
67 | 85 |
</div> |
68 | 86 |
} |
69 | 87 |
|
70 |
- @if(page.getTotalRowCount == 0){ |
|
71 |
- |
|
72 |
- <div class="error-wrap"> |
|
73 |
- <i class="ico ico-err1"></i> |
|
74 |
- <p>@Messages("post.is.empty")</p> |
|
75 |
- </div> |
|
76 |
- |
|
77 |
- } else { |
|
78 |
- |
|
79 |
- @if(page.getTotalRowCount > 1){ |
|
80 |
- <div class="filter-wrap board"> |
|
81 |
- <div id="order" class="filters"> |
|
82 |
- @makeFilterLink("createdDate", param.orderBy, param.orderDir, Messages("order.date")) |
|
83 |
- @makeFilterLink("numOfComments", param.orderBy, param.orderDir, Messages("order.comments")) |
|
84 |
- </div> |
|
85 |
- </div> |
|
86 |
- } |
|
87 |
- |
|
88 | 88 |
<ul class="board-list unstyled"> |
89 | 89 |
@for(post <- page.getList()){ |
90 | 90 |
<li class="board"> |
... | ... | @@ -119,7 +119,7 @@ |
119 | 119 |
} |
120 | 120 |
|
121 | 121 |
<div class="write-btn-wrap"> |
122 |
- <a href="@routes.BoardApp.newPostForm(project.owner, project.name)" class="n-btn orange med">@Messages("post.write")</a> |
|
122 |
+ <a href="@routes.BoardApp.newPostForm(project.owner, project.name)" class="nbtn orange medium">@Messages("post.write")</a> |
|
123 | 123 |
</div> |
124 | 124 |
|
125 | 125 |
<div id="pagination"> |
--- app/views/board/postVaildate.scala.html
... | ... | @@ -1,28 +0,0 @@ |
1 | -<div class="modal hide fade" id="chk_vaildate"> | |
2 | - <div class="modal-header"> | |
3 | - <button type="button" class="close" data-dismiss="modal">×</button> | |
4 | - <h3>확인</h3> | |
5 | - </div> | |
6 | - <div class="modal-body alert alert-error"> | |
7 | - <p>본문과 제목에 빈칸이 있습니다.</p> | |
8 | - <p>본문과 제목을 입력해 주세요</p> | |
9 | - </div> | |
10 | - <div class="modal-footer"> | |
11 | - <a href="#" class="btn" data-dismiss="modal">확인</a> | |
12 | - </div> | |
13 | -</div> | |
14 | -<script> | |
15 | -$(document).ready(function(){ | |
16 | - $("form").submit(function(){ | |
17 | - if($("input#title").val() == "" || $("textarea#contents").val() == "") | |
18 | - { | |
19 | - $('#chk_vaildate').modal() | |
20 | - return false; | |
21 | - } | |
22 | - else | |
23 | - { | |
24 | - return true; | |
25 | - } | |
26 | - }); | |
27 | -}); | |
28 | -</script>(No newline at end of file) |
--- app/views/milestone/list.scala.html
+++ app/views/milestone/list.scala.html
... | ... | @@ -42,9 +42,6 @@ |
42 | 42 |
|
43 | 43 |
<div class="tab-wrap"> |
44 | 44 |
<div class="pull-right btns"> |
45 |
- @**<!-- |
|
46 |
- <a href="@routes.MilestoneApp.manageMilestones(projectInst.owner, projectInst.name)" class="nbtn medium">@Messages("milestone.menu.manage")</a> |
|
47 |
- -->**@ |
|
48 | 45 |
<a href="@routes.MilestoneApp.newMilestoneForm(projectInst.owner, projectInst.name)" class="nbtn medium orange">@Messages("milestone.menu.new")</a> |
49 | 46 |
</div> |
50 | 47 |
|
--- conf/messages.en
+++ conf/messages.en
... | ... | @@ -208,6 +208,7 @@ |
208 | 208 |
post.new.filePath = File Path |
209 | 209 |
post.author = Author |
210 | 210 |
post.notice = Notice |
211 |
+post.notice.label = Set this post to notice |
|
211 | 212 |
post.age = Age |
212 | 213 |
post.menu.search = Search |
213 | 214 |
post.delete.confirm = If this is deleted, then it cannot be recovered. Is it okay and go through? |
... | ... | @@ -220,6 +221,8 @@ |
220 | 221 |
post.createdDate = Created Date |
221 | 222 |
post.attachment = Attachment |
222 | 223 |
post.numOfComments = Comment Count |
224 |
+post.error.emptyTitle = Title is required |
|
225 |
+post.error.emptyBody = Post with empty body cannot be created |
|
223 | 226 |
|
224 | 227 |
#Project |
225 | 228 |
project.myproject = MY PROJECTS |
... | ... | @@ -427,6 +430,8 @@ |
427 | 430 |
auth.unauthorized.comment = You need authorization to comment |
428 | 431 |
|
429 | 432 |
#userinfo |
433 |
+userinfo.profile = My Profile |
|
434 |
+userinfo.accountSetting = Account Setting |
|
430 | 435 |
userinfo.myProjects = My Projects |
431 | 436 |
userinfo.starredProjects = Starred |
432 | 437 |
|
--- conf/messages.ko
+++ conf/messages.ko
... | ... | @@ -211,7 +211,8 @@ |
211 | 211 |
post.new.contents = 내용 |
212 | 212 |
post.new.filePath = 파일 경로 |
213 | 213 |
post.author = 글쓴이 |
214 |
-post.notice = 공지 |
|
214 |
+post.notice = 공지사항 |
|
215 |
+post.notice.label = 이 글을 공지사항으로 설정합니다 |
|
215 | 216 |
post.age = 나이 |
216 | 217 |
post.menu.search = 검색 |
217 | 218 |
post.delete.confirm = 해당 게시물이 삭제되면 영원히 복구할 수 없습니다. 그래도 삭제하시겠습니까? |
... | ... | @@ -224,6 +225,8 @@ |
224 | 225 |
post.createdDate = 작성일 |
225 | 226 |
post.attachment = 첨부파일 |
226 | 227 |
post.numOfComments = 댓글개수 |
228 |
+post.error.emptyTitle = 글 제목을 입력해주세요 |
|
229 |
+post.error.emptyBody = 글 내용을 입력해주세요 |
|
227 | 230 |
|
228 | 231 |
#Project |
229 | 232 |
project.myproject = 내 프로젝트 |
... | ... | @@ -433,6 +436,8 @@ |
433 | 436 |
auth.unauthorized.comment = 로그인 후 댓글 입력이 가능합니다. |
434 | 437 |
|
435 | 438 |
#userinfo |
439 |
+userinfo.profile = 프로필 |
|
440 |
+userinfo.accountSetting = 설정 |
|
436 | 441 |
userinfo.myProjects = 내 프로젝트 |
437 | 442 |
userinfo.starredProjects = 관심 프로젝트 |
438 | 443 |
|
--- public/images/bg-default-project.jpg
+++ public/images/bg-default-project.jpg
Binary file is not shown |
--- public/javascripts/service/hive.board.List.js
+++ public/javascripts/service/hive.board.List.js
... | ... | @@ -35,7 +35,6 @@ |
35 | 35 |
htElement.welInputOrderDir = htElement.welForm.find("input[name=orderDir]"); |
36 | 36 |
htElement.welInputPageNum = htElement.welForm.find("input[name=pageNum]"); |
37 | 37 |
|
38 |
- htElement.welFilter = $(htOptions.sQueryFilter || "#order a"); |
|
39 | 38 |
htElement.welPages = $(htOptions.sQueryPages || "#pagination a"); |
40 | 39 |
htElement.welPagination = $(htOptions.elPagination || '#pagination'); |
41 | 40 |
} |
... | ... | @@ -44,22 +43,7 @@ |
44 | 43 |
* attach event handlers |
45 | 44 |
*/ |
46 | 45 |
function _attachEvent() { |
47 |
- htElement.welFilter.click(_onClickFilter); |
|
48 | 46 |
htElement.welPages.click(_onClickPage); |
49 |
- } |
|
50 |
- |
|
51 |
- /** |
|
52 |
- * onClick filter |
|
53 |
- */ |
|
54 |
- function _onClickFilter(){ |
|
55 |
- var orderBy = $(this).attr("data-orderBy"); |
|
56 |
- var orderDir = $(this).attr("data-orderDir"); |
|
57 |
- |
|
58 |
- htElement.welInputOrderBy.val(orderBy); |
|
59 |
- htElement.welInputOrderDir.val(orderDir); |
|
60 |
- |
|
61 |
- htElement.welForm.submit(); |
|
62 |
- return false; |
|
63 | 47 |
} |
64 | 48 |
|
65 | 49 |
/** |
--- public/javascripts/service/hive.board.Write.js
+++ public/javascripts/service/hive.board.Write.js
... | ... | @@ -47,9 +47,7 @@ |
47 | 47 |
// Validate |
48 | 48 |
htElement.welForm = $("form"); |
49 | 49 |
htElement.welInputTitle = $("input#title"); |
50 |
- htElement.welInputBody = $("textarea#contents"); |
|
51 |
- htElement.welWarning = $("#warning"); |
|
52 |
- htElement.welWarningBtn = htElement.welWarning.find("button"); |
|
50 |
+ htElement.welInputBody = $("textarea#body"); |
|
53 | 51 |
} |
54 | 52 |
|
55 | 53 |
/** |
... | ... | @@ -63,11 +61,13 @@ |
63 | 61 |
* Validate form on submit |
64 | 62 |
*/ |
65 | 63 |
function _onSubmitForm(){ |
66 |
- if(htElement.welInputTitle.val() == "" || htElement.welInputBody.val() == ""){ |
|
67 |
- htElement.welWarningBtn.click(function(){ |
|
68 |
- htElement.welWarning.hide(); |
|
69 |
- }); |
|
70 |
- htElement.welWarning.show(); |
|
64 |
+ if(htElement.welInputTitle.val() == ""){ |
|
65 |
+ $hive.showAlert(Messages("post.error.emptyTitle")); |
|
66 |
+ return false; |
|
67 |
+ } |
|
68 |
+ |
|
69 |
+ if(htElement.welInputBody.val() == ""){ |
|
70 |
+ $hive.showAlert(Messages("post.error.emptyBody")); |
|
71 | 71 |
return false; |
72 | 72 |
} |
73 | 73 |
|
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?