JiHan Kim 2013-07-09
change english font, modify issue list
- set english font to Lato using google webfonts
- link to list of issues assigned to me, created by me has added
- count issues on issue list tab has changed
@0b3b30f864b4583fb63cd49ed5c3b89ed191a890
app/assets/stylesheets/hive.less
--- app/assets/stylesheets/hive.less
+++ app/assets/stylesheets/hive.less
@@ -3,4 +3,6 @@
 @import "less/_common.less";
 @import "less/_sprites.less";
 @import "less/_page.less";
+@import "less/_reponsive.less";
 @import "less/_hiveUI.less";
+@import "less/_temporary.less";
(No newline at end of file)
app/assets/stylesheets/less/_common.less
--- app/assets/stylesheets/less/_common.less
+++ app/assets/stylesheets/less/_common.less
@@ -3,11 +3,13 @@
 }
 
 body {
-   background      : @base-background;
+   background: @base-background;
    background-color: @base-background-color;  
    font-family: @base-font-family;
+   text-rendering: auto !important;
 }
 input, button, select, textarea { font-family: @base-font-family !important; }
+h1,h2,h3,h4,h5,h6 { text-rendering:auto !important; }
 
 a {
     color: inherit;
app/assets/stylesheets/less/_page.less
--- app/assets/stylesheets/less/_page.less
+++ app/assets/stylesheets/less/_page.less
@@ -900,10 +900,10 @@
         .btn-advanced {
             color:#707070;
             font-weight:bold;
-            padding-left:18px;
-            margin:5px 0 0;
+            /*padding-left:18px;*/
+            margin:10px 0 0; text-align:right;
             vertical-align:middle;
-            display:block;
+            display:inline-block;
 
             i {
                 vertical-align:middle; margin-right:3px;
@@ -918,7 +918,7 @@
         &.advanced {
             .srch-advanced {
                 text-align:left;
-                margin-top:5px;
+                margin-top:10px;
                 display:block;
                 border-top: 1px solid #D6D6D6;
 
@@ -930,30 +930,29 @@
             .btn-advanced {
                 i { .ico-arrow-up-blue; }
             }
-
-            // override bootstrap
-            /*
-            .form-horizontal {
-                .control-group {
-                    margin: 0; padding: 6px 10px;
-                    border-bottom: 1px solid #e3e3e3;
-                    border-top: 1px solid #fdfdfd;
-                    &:last-of-type { border-bottom:none; }
-                }
-                .control-label {
-                    text-align:left; width:60px;
-                    font-size:12px; font-weight:bold;
-                    color:#666;
-                }
-                .controls { margin-left:60px; padding-left:10px; }
-                .controls:before {
-                    content:'|'; margin-right:5px;
-                    color:#cccccc;
-                    text-shadow:-1px 0px #fff;
+        }
+        
+        .labels-wrap { border-top:1px solid #ddd; padding-top:10px; }
+        
+        .preset-list {
+            padding-bottom:20px;
+            margin-bottom:20px;
+            border-bottom:1px solid #ddd;
+            
+            li {
+                font-size:13px;
+                padding:8px;
+                a { display: block}
+                &.active {
+                    color: #fff;
+                    background: @secondary;
+                    font-weight:bold;
+                    
+                    .border-radius(2px);
+                    .box-shadow(inset 1px 1px 1px rgba(0,0,0,0.2));
+                    .num-badge { color:#fff; }
                 }
             }
-            */
-            // -- end of bootstrap overrides
         }
     } // -- end of .inner //
     
@@ -1358,9 +1357,14 @@
                         padding:15px 25px; display:block;
                         font-weight:bold;
                         -webkit-transition-duration:0.3s;
-                        &:hover { color:@primary; text-decoration:underline; }
+                        /*&:hover { color:@primary; text-decoration:underline; }*/
                     }
 
+                    &:hover {
+                        color:@primary;
+                        border-bottom:2px solid #eee;
+                        a { text-decoration:none; }
+                    }
                     &.active {
                         border-bottom:2px solid @primary;
                         color:@primary;
@@ -1476,13 +1480,15 @@
 
 //-- filters
 .filter-wrap {
-    margin-bottom: 15px;
-    overflow: hidden;
     display: block;/*inline;*/
-
+    margin:15px 0 10px; 
+    height:30px;
+    /*margin-bottom: 15px;
+    overflow: hidden;*/
+    
     .filters {
         color:#666;
-        float: right;
+        float: right; margin-top:5px;
         .filter {
             margin-right:10px;
             &.active { font-weight:bold; color:@primary; }
@@ -1492,15 +1498,15 @@
     }
 
     //-- milestone
-    &.milestone {
+    /*&.milestone {
         margin-top: -20px;
-    }
+    }*/
 
     //-- board, user
-    &.board, &.user-setting {
+    /*&.board, &.user-setting {
         margin: 15px 0 10px;
         padding-right:3px;
-    }
+    }*/
 }
 
 //-- milestone
@@ -2509,6 +2515,11 @@
     .commit-wrap {
         background-color: @white;
     }
+    .commitMsg {
+        border:none;
+        background:none;
+        font-family:@base-font-family;
+    }
 
     #commit {
         font-family: "monospace", Consolas, Tahoma;
@@ -2554,50 +2565,50 @@
         }
     }
 
-    ul.comments {
-        border: 1px solid black;
-        margin: 0px;
-    }
-
     #commit + ul.comments {
         margin-top: 15px;
     }
 
     .write-comment-box {
         background-color: #f5f5f5;
+        margin-bottom:15px;
     }
 
-    .comment {
-        padding: 20px;
-        border-bottom:1px solid #efefef;
-        list-style: none;
-
-        .media-body {
-            padding-left: 17px;
-            .commenter {
-                line-height: 1.3;
-                font-size: 12px; font-weight:bold;
-                /*color: #646464;*/
-                .name {
-                    font-size: 11px;
+    ul.comments {
+        margin:0;
+        
+        .comment {
+            padding: 20px;
+            border-bottom:1px solid #efefef;
+            list-style: none;
+    
+            .media-body {
+                padding-left: 17px;
+                .commenter {
+                    line-height: 1.3;
+                    font-size: 12px; font-weight:bold;
+                    /*color: #646464;*/
+                    .name {
+                        font-size: 11px;
+                    }
+                    .date {
+                        font-size: 11px;
+                        color: #aaa;
+                    }
                 }
-                .date {
-                    font-size: 11px;
-                    color: #aaa;
+                .attach {
+                    color: #4489A4;
+                }
+    
+                .comment-body {
+                    /*color: #333;*/
+                    a { font-weight:bold; border-bottom:1px dotted; }
                 }
             }
-            .attach {
-                color: #4489A4;
+    
+            .attach-preview-wrap {
+                margin-top: 10px;
             }
-
-            .comment-body {
-                /*color: #333;*/
-                a { font-weight:bold; border-bottom:1px dotted; }
-            }
-        }
-
-        .attach-preview-wrap {
-            margin-top: 10px;
         }
     }
 
@@ -3410,14 +3421,14 @@
         text-align:center;
     }
 }
-
+/*
 .mass-update-form {
     margin-top:10px;
     margin-bottom: 10px;
     padding-left:60px;
     .btn-group + .btn-group { margin-left:0; }
 }
-
+*/
 .fork-wrap {
     .project-from {
         display:inline-block;
@@ -3477,55 +3488,4 @@
         text-align:center;
         margin-top:30px;
     }
-}
-
-// responsive
-@media all and (max-width:620px){
-    .prj .gnb-inner .gnb-menu-wrap .gnb-menus {
-        margin:0;
-
-        &.right {
-            position: relative; float: none;
-            display: block; clear: both;
-            padding-bottom:15px; text-align:right;
-        }
-    }
-
-    .code-browse-wrap {
-        .code-viewer-wrap {
-            .code-tree {
-                display:none;
-                width:0px;
-            }
-            .code-viewer {
-                display:block;
-                width:100%;
-            }
-        }
-
-        .cell {
-            &.directory-wrap {
-                display:none;
-                width:0px;
-            }
-            &.file-wrap {
-                width:100%; display:block;
-            }
-        }
-
-        .btnResize { display:none; }
-    }
-}
-
-// temporary
-.pop-watch {
-    .content { padding: 10px 25px; }
-    .brow { text-align:center; padding:10px 0; }
-    
-    ul {
-        margin: 0px;
-        padding: 5px;
-        li { display: list-item; }
-    }
-    h5 { text-rendering:auto; }
-}
+}
(No newline at end of file)
 
app/assets/stylesheets/less/_reponsive.less (added)
+++ app/assets/stylesheets/less/_reponsive.less
@@ -0,0 +1,37 @@
+// responsive
+@media all and (max-width:620px){
+    .prj .gnb-inner .gnb-menu-wrap .gnb-menus {
+        margin:0;
+
+        &.right {
+            position: relative; float: none;
+            display: block; clear: both;
+            padding-bottom:15px; text-align:right;
+        }
+    }
+
+    .code-browse-wrap {
+        .code-viewer-wrap {
+            .code-tree {
+                display:none;
+                width:0px;
+            }
+            .code-viewer {
+                display:block;
+                width:100%;
+            }
+        }
+
+        .cell {
+            &.directory-wrap {
+                display:none;
+                width:0px;
+            }
+            &.file-wrap {
+                width:100%; display:block;
+            }
+        }
+
+        .btnResize { display:none; }
+    }
+}(No newline at end of file)
 
app/assets/stylesheets/less/_temporary.less (added)
+++ app/assets/stylesheets/less/_temporary.less
@@ -0,0 +1,11 @@
+// temporary
+.pop-watch {
+    .content { padding: 10px 25px; }
+    .brow { text-align:center; padding:10px 0; }
+    
+    ul {
+        margin: 0px;
+        padding: 5px;
+        li { display: list-item; }
+    }
+}
app/assets/stylesheets/less/_variables.less
--- app/assets/stylesheets/less/_variables.less
+++ app/assets/stylesheets/less/_variables.less
@@ -9,13 +9,14 @@
 @base-webfont-path: "/assets/images/webfont";
 
 // Typography
-@base-font-family:"Droid Sans", "Tahoma", "나눔고딕", "NanumGothic", "NanumGothicOTF", "맑은고딕", "Malgun Gothic", dotum, Arial; 
+@base-font-family:"Lato", "Helvetica Neue", "Helvetica", "Tahoma", "나눔고딕", "NanumGothic", "NanumGothicOTF", "맑은고딕", "Malgun Gothic", dotum, Arial; 
 /*'Droid Sans', Tahoma;*/
 /*, '돋움', Dotum, Arial, sans-serif;*/
 @base-font-size  : 13px;
 @base-line-height: 18px;
 @base-text-color : @gray-33;
 @base-width      : 95%; /*960px;*/
+/*
 @font-face {
     font-family:'Droid Sans';
     src: url('@{base-webfont-path}/DroidSans.eot');
@@ -26,6 +27,36 @@
     font-weight: 400;
     font-style: normal;
 }
+*/
+@font-face {
+  font-family: 'Lato';
+  font-style: normal;
+  font-weight: 300;
+  src: url('http://themes.googleusercontent.com/static/fonts/lato/v6/zLhfkPOm_5ykmdm-wXaiuw.eot');
+  src: local('Lato Light'), local('Lato-Light'), 
+       url('http://themes.googleusercontent.com/static/fonts/lato/v6/zLhfkPOm_5ykmdm-wXaiuw.eot') format('embedded-opentype'), 
+       url('http://themes.googleusercontent.com/static/fonts/lato/v6/KT3KS9Aol4WfR6Vas8kNcg.woff') format('woff');
+}
+@font-face {
+  font-family: 'Lato';
+  font-style: normal;
+  font-weight: 400;
+  src: url('http://themes.googleusercontent.com/static/fonts/lato/v6/nQhiC-wSiJx0pvEuJl8d8A.eot');
+  src: local('Lato Regular'), local('Lato-Regular'), 
+       url('http://themes.googleusercontent.com/static/fonts/lato/v6/nQhiC-wSiJx0pvEuJl8d8A.eot') format('embedded-opentype'), 
+       url('http://themes.googleusercontent.com/static/fonts/lato/v6/9k-RPmcnxYEPm8CNFsH2gg.woff') format('woff'),
+       url('http://themes.googleusercontent.com/static/fonts/lato/v6/v0SdcGFAl2aezM9Vq_aFTQ.ttf') format('truetype');
+}
+@font-face {
+  font-family: 'Lato';
+  font-style: normal;
+  font-weight: 700;
+  src: url('http://themes.googleusercontent.com/static/fonts/lato/v6/sBtfDPlEIwvKKU53nAG7AQ.eot');
+  src: local('Lato Bold'), local('Lato-Bold'), 
+       url('http://themes.googleusercontent.com/static/fonts/lato/v6/sBtfDPlEIwvKKU53nAG7AQ.eot') format('embedded-opentype'), 
+       url('http://themes.googleusercontent.com/static/fonts/lato/v6/wkfQbvfT_02e2IWO3yYueQ.woff') format('woff'),
+       url('http://themes.googleusercontent.com/static/fonts/lato/v6/DvlFBScY1r-FMtZSYIYoYw.ttf') format('truetype');
+}
 
 // Color
 @white  : #FFF;
app/models/Issue.java
--- app/models/Issue.java
+++ app/models/Issue.java
@@ -150,6 +150,42 @@
     }
 
     /**
+     * {@code projectId} 프로젝트에
+     * {@link State} 상태 이면서
+     * {@link Assignee}가 담당자인 이슈 개수를 반환한다.
+     *
+     * @param projectId
+     * @param state
+     * @param assigneeId
+     * @return
+     */
+    public static int countIssuesByAssigneeId(Long projectId, State state, Long assigneeId) {
+        if (state == State.ALL){
+            return finder.where().eq("project.id", projectId).eq("assignee.user.id", assigneeId).findRowCount();
+        } else {
+            return finder.where().eq("project.id", projectId).eq("state", state).eq("assignee.user.id", assigneeId).findRowCount();
+        }
+    }
+
+    /**
+     * {@code projectId} 프로젝트에
+     * {@link State} 상태 이면서
+     * {@link authorId}가 작성자인 이슈 개수를 반환한다.
+     *
+     * @param projectId
+     * @param state
+     * @param authorId
+     * @return
+     */
+    public static int countIssuesByAuthorId(Long projectId, State state, Long authorId) {
+        if (state == state.ALL){
+            return finder.where().eq("project.id", projectId).eq("authorId", authorId).findRowCount();
+        } else {
+            return finder.where().eq("project.id", projectId).eq("state", state).eq("authorId", authorId).findRowCount();
+        }
+    }
+
+    /**
      * Generate a Microsoft Excel file in byte array from the given issue list,
      * using JXL.
      *
app/views/code/diff.scala.html
--- app/views/code/diff.scala.html
+++ app/views/code/diff.scala.html
@@ -60,7 +60,7 @@
 	        </li>
 	    </ul>
 
-        <pre class="pull-right">@commit.getMessage</pre>
+        <pre class="pull-right commitMsg">@commit.getMessage</pre>
         <p class="pull-left">
             @(commit.getAuthor, commit.getAuthorEmail, commit.getAuthorName) match {
             case (user: User, _, _) if !user.isAnonymous => {
app/views/issue/list.scala.html
--- app/views/issue/list.scala.html
+++ app/views/issue/list.scala.html
@@ -9,6 +9,10 @@
 
 @urlToList = {@routes.IssueApp.issues(project.owner, project.name, param.state, "html", currentPage.getPageIndex + 1)}
 
+@urlAssignedToMe = {@urlToList&assigneeId=@User.findByLoginId(session.get("loginId")).id}
+
+@urlAuthoredByMe = {@urlToList&authorLoginId=@session.get("loginId")}
+
 @getPageListUrl(pageIndex:Integer) = {@routes.IssueApp.issues(project.owner, project.name, param.state, "html", pageIndex + 1)}
 
 @makeFilterLink(fieldName:String, orderBy:String, orderDir:String, fieldText:String) = {
@@ -18,6 +22,18 @@
 	    <a href="@urlToList&orderBy=@fieldName&orderDir=asc" class="filter"><i class="ico btn-gray-arrow"></i>@fieldText</a>
 	}
 }
+
+@countIssuesByState(state:State) = @{
+    if(param.assigneeId != null){
+        Issue.countIssuesByAssigneeId(project.id, state, UserApp.currentUser().id)
+    } else if(param.authorLoginId != null){
+        Issue.countIssuesByAuthorId(project.id, state, UserApp.currentUser().id)
+    } else {
+        Issue.countIssues(project.id, state)
+    }
+}
+
+@getTabLinkByState(state:State) = {@routes.IssueApp.issues(project.owner, project.name, state.state)@if(param.assigneeId != null){&assigneeId=@param.assigneeId}@if(param.authorLoginId != null){&authorLoginId=@param.authorLoginId}}
 
 @main(Messages(title), project, utils.MenuType.ISSUE){
 <div class="page">
@@ -30,21 +46,24 @@
 	<ul class="nav nav-tabs nm">
     @for(state <- Array(State.ALL, State.OPEN, State.CLOSED)) {
         <li @if(param.state == state.state) { class="active" }>
-            <a href="@routes.IssueApp.issues(project.owner, project.name, state.state)">
+            <a href="@getTabLinkByState(state)">
                 @Messages("issue.state." + state.name.toLowerCase())
-                <span class="num-badge">@Issue.countIssues(project.id, state)</span>
+                <span class="num-badge">@countIssuesByState(state)</span>
             </a>
         </li>
     }
     </ul>
 
-@if(currentPage.getList().size() > 0){
-	@if(currentPage.getList().size() > 1){
-
     <div class="row-fluid">
         <div class="span9">
-        	<div class="filter-wrap board pull-right">
-        		<div class="filters">
+        @if(currentPage.getList().size() > 0){
+            @if(currentPage.getList().size() > 1){
+        	<div class="filter-wrap board">
+                @if(ProjectUser.isMember(UserApp.currentUser().id, project.id)){
+                    @partial_massupdate(project, param)
+                }
+                
+        		<div class="filters pull-right">
         			@makeFilterLink("state", param.orderBy, param.orderDir, Messages("order.state"))
         			@makeFilterLink("createdDate", param.orderBy, param.orderDir, Messages("order.date"))
         			@makeFilterLink("numOfComments", param.orderBy, param.orderDir, Messages("order.comments"))
@@ -52,18 +71,27 @@
         	</div>
         	}
             
-            @if(ProjectUser.isMember(UserApp.currentUser().id, project.id)){
-                @partial_massupdate(project, param)
-            }
             @partial_list(project, currentPage.getList, param, currentPage.getPageIndex, currentPage.getTotalPageCount)
             
-            <div id="pagination">
-                <!-- pagination.js will fill here. -->
-            </div>            
+            <div id="pagination"><!-- pagination.js will fill here. --></div>          
+        } else {
+            <div class="error-wrap">
+                <i class="ico ico-err1"></i>
+                <p>@Messages("issue.is.empty")</p>
+            </div>
+        }
         </div>
+        
         <div class="span3 search-wrap">
-            
             <div class="inner bggray">
+                <ul class="unstyled preset-list">
+                    <li @if(param.assigneeId == null && param.authorLoginId == null){ class="active"}><a href="@urlToList">@Messages("issue.list.all") <strong class="num-badge pull-right">@Issue.countIssues(project.id, State.ALL)</strong></a></li>
+                    @if(UserApp.currentUser().id != -1l){
+                    <li @if(param.assigneeId == UserApp.currentUser().id){ class="active"}><a href="@urlAssignedToMe">@Messages("issue.list.assignedToMe") <strong class="num-badge pull-right">@Issue.countIssuesByAssigneeId(project.id, State.ALL, User.findByLoginId(session.get("loginId")).id)</strong></a></li>
+                    }
+                    <li @if(param.authorLoginId == UserApp.currentUser().loginId){ class="active"}><a href="@urlAuthoredByMe">@Messages("issue.list.authoredByMe") <strong class="num-badge pull-right">@Issue.countIssuesByAuthorId(project.id, State.ALL, User.findByLoginId(session.get("loginId")).id)</strong></a></li>
+                </ul>
+
                 <form id="search" action="@routes.IssueApp.issues(project.owner, project.name, param.state)" method="get">
                     <input type="hidden" name="orderBy" value="@param.orderBy" class="h-value order">
                     <input type="hidden" name="state"   value="@param.state">
@@ -77,8 +105,8 @@
                         </div>
                     </div>
 
-                    <div class="row">
-                        <a href="#" class="btn-advanced"><i class="ico"></i>@Messages("issue.advancedSearch")</a>
+                    <div class="row-fluid right-txt">
+                        <button type="button" class="btn-advanced btn-transparent"><i class="icon-plus"></i>@Messages("issue.advancedSearch")</button>
                     </div>
 
                     <div id="advanced-search-form" class="srch-advanced">
@@ -123,8 +151,8 @@
                             </dd>
                         </dl>
                     </div>
-                    
-                    <dl id="labels" class="issue-option">
+
+                    <dl id="labels" class="issue-option labels-wrap">
                         <dt>
                             @Messages("label.select")
                             @if(isProjectResourceCreatable(UserApp.currentUser, project, ResourceType.ISSUE_LABEL)){
@@ -141,16 +169,8 @@
                     <a href="@routes.IssueApp.issues(project.owner, project.name, param.state, "xls")" class="nbtn white" style="width:100%; padding:6px 0"><i class="ico ico-download"></i>@Messages("issue.downloadAsExcel")</a>
                 </p>
             </div>
-            
         </div>
     </div>
-
-} else {
-	<div class="error-wrap">
-		<i class="ico ico-err1"></i>
-		<p>@Messages("issue.is.empty")</p>
-	</div>
-}
 
     @help.keymap("issueList", project)
 </div>
app/views/issue/partial_massupdate.scala.html
--- app/views/issue/partial_massupdate.scala.html
+++ app/views/issue/partial_massupdate.scala.html
@@ -1,6 +1,6 @@
 @(project:Project, param:IssueApp.SearchCondition)
 
-<form id="mass-update-form" class="mass-update-form" action="@routes.IssueApp.massUpdate(project.owner, project.name)" method="post">
+<form id="mass-update-form" class="mass-update-form pull-left" action="@routes.IssueApp.massUpdate(project.owner, project.name)" method="post">
     <div id="state" class="btn-group" data-name="state">
         <button class="btn dropdown-toggle medium" data-toggle="dropdown" disabled="disabled">
             <span class="d-label">@Messages("issue.update.state")</span>
app/views/milestone/list.scala.html
--- app/views/milestone/list.scala.html
+++ app/views/milestone/list.scala.html
@@ -60,20 +60,20 @@
 
 	} else {
 
-    <div class="milestone-legend">
-        <i class="gray"></i>@Messages("issue.state.open")
-        <i class="blue"></i>@Messages("issue.state.assigned")
-        <i class="orange"></i>@Messages("issue.state.closed")
-    </div>
-    
-    @if(milestones.length > 1){
     <div class="filter-wrap milestone">
+        <div class="milestone-legend pull-left">
+            <i class="gray"></i>@Messages("issue.state.open")
+            <i class="blue"></i>@Messages("issue.state.assigned")
+            <i class="orange"></i>@Messages("issue.state.closed")
+        </div>
+
+        @if(milestones.length > 1){
 		<div class="filters">
 			@makeFilterLink("dueDate", param.orderBy, param.orderDir, Messages("order.dueDate"))
 			@makeFilterLink("completionRate", param.orderBy, param.orderDir, Messages("order.completionRate"))
 		</div>
+		}
     </div>
-    }
 
     <ul class="milestones">
         @for(milestone <- milestones){
app/views/project/overview.scala.html
--- app/views/project/overview.scala.html
+++ app/views/project/overview.scala.html
@@ -29,7 +29,7 @@
 	}
 }
 @makeHistoryWho(history:History)  = {<a href="@userPageUrlOnHistory(history)" class="actor">@history.getWho()</a>}
-@makeHistoryHow(history:History)  = {<a href="@history.getUrl()"><strong class="whereis"><code>@history.getShortTitle()</code> @history.getHow()</strong></a> }
+@makeHistoryHow(history:History)  = {<a href="@history.getUrl()"><span class="whereis"><code>@history.getShortTitle()</code> @history.getHow()</span></a> }
 @makeHistoryWhat(history:History) = {@Messages("project.history.type." + history.getWhat())}
 
 @main(message, project, utils.MenuType.PROJECT_HOME) {
conf/messages.en
--- conf/messages.en
+++ conf/messages.en
@@ -222,6 +222,9 @@
 issue.update.milestone = Update milestone
 issue.update.attachLabel = Attach label
 issue.update.detachLabel = Detach label
+issue.list.all = All Issues
+issue.list.assignedToMe = Assigned to me
+issue.list.authoredByMe = Created by me
 
 #Post
 post.new = New
conf/messages.ko
--- conf/messages.ko
+++ conf/messages.ko
@@ -208,7 +208,7 @@
 issue.new.selectDefault.diagnosisResult = --진단결과 선택--
 issue.comment.delete.confirm = 해당 이슈의 댓글을 삭제하시겠습니까?
 issue.committer.edit = 이슈수정
-issue.advancedSearch = 고급검색
+issue.advancedSearch = 상세검색
 issue.downloadAsExcel = 엑셀파일로 다운받기
 issue.search = 검색
 issue.error.emptyTitle = 이슈 제목을 입력해주세요
@@ -222,6 +222,9 @@
 issue.update.milestone = 마일스톤 변경
 issue.update.attachLabel = 라벨 추가
 issue.update.detachLabel = 라벨 제거
+issue.list.all = 전체 이슈
+issue.list.assignedToMe = 나에게 할당된 이슈
+issue.list.authoredByMe = 내가 작성한 이슈
 
 #Post
 post.new = 새글
Add a comment
List