[Notice] Announcing the End of Demo Server [Read me]
doortts doortts 2016-02-17
mobile: Add more mobile support pages
@309660cead97e59684bd6c5762e7d0f4f8a6167e
app/assets/stylesheets/less/_markdown.less
--- app/assets/stylesheets/less/_markdown.less
+++ app/assets/stylesheets/less/_markdown.less
@@ -120,7 +120,7 @@
   }
 
   ul {
-     padding:0px 20px;
+     padding:0 0 0 20px;
      line-height:20px;
      list-style:disc;
   }
@@ -140,7 +140,7 @@
   
 
   ol{
-     padding:0px 20px;
+     padding:0 0 0 20px;
      line-height:20px;
      list-style:decimal;
   }
app/assets/stylesheets/less/_page.less
--- app/assets/stylesheets/less/_page.less
+++ app/assets/stylesheets/less/_page.less
@@ -3568,7 +3568,6 @@
                     float: left;
 
                     &.item-icon {
-                        background-color:#F7F7F7;
                         color:#3592b5;
                         font-size: 9px;
                         padding-top:2px;
app/assets/stylesheets/less/_reponsive.less
--- app/assets/stylesheets/less/_reponsive.less
+++ app/assets/stylesheets/less/_reponsive.less
@@ -1,4 +1,60 @@
 @media all and (max-width: 600px){
+    .board-header .date {
+        margin-right: 5px !important;
+    }
+    .badge-small {
+        margin-right: 0 !important;
+        padding: 5px 5px;
+    }
+    .admin-logged-in-affix{
+      width: auto !important;
+    }
+    //login modal
+    .modal {
+        left: inherit;
+        margin-right: 0 !important;
+    }
+    .loginDialog {
+        margin-left: 0 !important;
+        width: 100%;
+        .login-form-wrap{
+            width: inherit;
+            .text {
+                width: 95%;
+            }
+        }
+    }
+    // loginfor
+    .login-form-wrap {
+        width: 95% !important;
+        .text {
+            width: 95% !important;
+        }
+    }
+
+    .signup-form-wrap {
+        width: 95% !important;
+        .popover.left {
+            left: 24.375px !important;
+            .popover-content {
+                width: 150px !important;
+            }
+        }
+        .text {
+            width: 40% !important;
+        }
+        dl {
+            text-align: right;
+        }
+    }
+
+    // gnb
+    .gnb-usermenu-item {
+        color: #5dbbe0 !important;
+    }
+    .gnb-usermenu-dropdown {
+        color: #5dbbe0 !important;
+    }
     .span-left-pane {
         width: 98% !important;
     }
@@ -15,11 +71,15 @@
         display: none;
     }
     .project-menu-nav li a {
-        padding: 5px 15px 4px !important;
+        padding: 5px 12px 4px 12px !important;
     }
     .project-menu-count {
         position: absolute !important;
         margin-top: -36px !important;
+    }
+
+    .show-in-mobile {
+        display: block !important;
     }
 
     .hide-in-mobile {
@@ -33,11 +93,15 @@
     .comment-body {
         padding: 10px 10px !important;
     }
-
     .textarea-box {
-        padding-right: 2px !important;
+        textarea {
+            width: 100%;
+        }
     }
 
+    .content-wrap .text {
+        width: 95%;
+    }
     // override @media(1199px)
     .unsupported {
         min-width: 10px !important;
@@ -54,7 +118,6 @@
 
     .board-body {
         .content {
-            padding: 0 !important;
         }
     }
 
@@ -97,32 +160,97 @@
     }
 
     .project-menu-count {
-
+        background: none;
+        color: inherit;
+        font-weight: bold;
     }
 
     .project-menu-gruop {
-        margin-left: 15px !important;
+        margin-left: 0 !important;
     }
 
     .project-header-avatar {
         left: 0 !important;
         width: 50px !important;
         height: 50px !important;
-        bottom: 0 !important;
+        bottom: -6px !important;
+        border: 1px solid #f9f9f9 !important;
     }
 
     .project-breadcrumb-wrap {
-        left: 60px !important;
+        left: 52px !important;
+        bottom: 5px !important;
+        .project-name, .project-author {
+            font-size: 0.7em;
+        }
+    }
+
+    .dropdown-menu.flat {
+        .pop-title{
+            white-space: normal !important;
+        }
+        &.right {
+            width: 250px !important;
+            right: 0 !important;
+            left: inherit !important;
+        }
+        .pop-content {
+            white-space: normal !important;
+        }
+    }
+
+    .project-header-wrap .project-util-wrap {
         bottom: 10px !important;
+        right: -25px !important;
     }
 
     .span-hard-wrap {
         min-width: 95%;
         margin-bottom: 10px;
+        margin-left: 0 !important;
     }
     .nav-tabs li a {
         padding-left: 20px !important;
         padding-right: 20px !important;
+    }
+
+    .readme .readme-wrap .readme-body {
+        padding: 0;
+    }
+
+    .search-wrap.underline{
+        border-bottom: none !important;
+    }
+    .search-bar {
+        width: 120px !important;
+        .textbox {
+            width: inherit !important;
+        }
+    }
+
+    .board-labels {
+        width: 70px !important;
+    }
+
+    .project-selects {
+        width: 100px !important;
+    }
+
+    .post-list .search-wrap form {
+        width: inherit !important;
+    }
+
+    .siteintro .siteintro-cover {
+        overflow: inherit;
+        width: inherit;
+    }
+    .feature-wrap {
+        width: inherit !important;
+        li {
+            width: 95% !important;
+            margin-top: 0 !important;
+            margin-left: 0 !important;
+        }
     }
 }
 
@@ -140,13 +268,12 @@
     }
 
     .gnb-outer {
-        width: 100%;
         max-width: 1199px;
         min-width: 1000px;
         padding:0 10px;
 
         .gnb-inner {
-            width:95%;
+            width:100%;
             max-width:980px;
         }
     }
@@ -174,8 +301,12 @@
     }
 
     .project-page-wrap {
-        width: 95%;
+        width: 97%;
         max-width:980px;
+        .project-breadcrumb {
+            font-size: 1.5em;
+            font-weight: bold;
+        }
     }
 
     .site-breadcrumb-outer {
app/views/board/view.scala.html
--- app/views/board/view.scala.html
+++ app/views/board/view.scala.html
@@ -42,13 +42,18 @@
     <div class="project-page-wrap board-view">
     	@** Post Info **@
         <div class="board-header issue">
-            <div class="pull-right mr10 mt10">
+            <div class="pull-right mr10 mt10 hide-in-mobile">
                 <div class="date" title="@JodaDateUtil.getDateString(post.createdDate)">
                     @agoOrDateString(post.createdDate)
                 </div>
             </div>
             <div class="title">
                 <strong class="board-id">@post.getNumber</strong> @post.title
+                <div class="pull-right hide show-in-mobile" style="font-size: 0.7em">
+                    <div class="date" title="@JodaDateUtil.getDateString(post.createdDate)">
+                    @agoOrDateString(post.createdDate)
+                    </div>
+                </div>
             </div>
         </div>
 
app/views/git/partial_list.scala.html
--- app/views/git/partial_list.scala.html
+++ app/views/git/partial_list.scala.html
@@ -86,11 +86,11 @@
             <div class="span2">
                 <div class="mt5 pull-right">
                     @if(req.receiver != null) {
-                        <a href="@routes.UserApp.userInfo(req.receiver.loginId)" class="avatar-wrap assinee" data-toggle="tooltip" data-placement="top" title="" data-original-title="@req.receiver.name">
+                        <a href="@routes.UserApp.userInfo(req.receiver.loginId)" class="avatar-wrap assinee hide-in-mobile" data-toggle="tooltip" data-placement="top" title="" data-original-title="@req.receiver.name">
                             <img src="@req.receiver.avatarUrl" width="32" height="32" alt="@req.receiver.name">
                         </a>
                     } else {
-                        <div class="empty-avatar-wrap">&nbsp;</div>
+                        <div class="empty-avatar-wrap hide-in-mobile">&nbsp;</div>
                     }
                 </div>
                 <div class="state @if(req.isConflict == true) {conflict} else { @req.state.toString.toLowerCase} pull-right">@if(req.isConflict == true) {@Messages("pullRequest.state.conflict")} else {@Messages("pullRequest.state." + req.state.toString.toLowerCase)}</div>
app/views/git/partial_search.scala.html
--- app/views/git/partial_search.scala.html
+++ app/views/git/partial_search.scala.html
@@ -45,7 +45,7 @@
 }
 
   <div pjax-container class="row-fluid cb">
-    <div class="span2 search-wrap" style="padding-top:0;">
+    <div class="span2 search-wrap hide-in-mobile" style="padding-top:0;">
       <form id="search" name="search" action="@searchFormAction(condition.category)" method="get">
         <div class="search">
           <div class="search-bar">
@@ -80,7 +80,7 @@
         }
       </form>
     </div>
-    <div class="span10" id="span10">
+    <div class="span10 span-hard-wrap" id="span10">
       @if(project.isForkedFromOrigin) {
         @partial_recently_pushed_branches(project.getRecentlyPushedBranches)
       } else {
app/views/index/index.scala.html
--- app/views/index/index.scala.html
+++ app/views/index/index.scala.html
@@ -65,7 +65,7 @@
             </div>
             <div class="page on-fold-intro">
                 <div class="row-fluid content-container">
-                    <div class="span8 main-stream">
+                    <div class="span8 main-stream hide-in-mobile">
                          <ul class="nav nav-tabs">
                             <li class="active">
                                 <a href="@routes.Application.index()">@Messages("notification")</a>
@@ -78,7 +78,7 @@
                             @partial_notifications(0, 20)
                         </ul>
         	        </div>
-                    <div class="span4">
+                    <div class="span4 span-hard-wrap">
                         <ul class="nav nav-tabs nm">
                             <li class="active">
                                 <a href="#myPorjectList" data-toggle="tab">
app/views/issue/my_partial_list.scala.html
--- app/views/issue/my_partial_list.scala.html
+++ app/views/issue/my_partial_list.scala.html
@@ -32,8 +32,8 @@
 @for(issue <- issueList){
 @defining(User.findByLoginId(issue.authorLoginId)){ user =>
     <li class="post-item" id="issue-item-@issue.id">
-        <div class="span10">
-            <a href="@routes.UserApp.userInfo(user.loginId)" class="avatar-wrap mlarge" data-toggle="tooltip" data-placement="top" title="@user.loginId">
+        <div class="span10 span-hard-wrap">
+            <a href="@routes.UserApp.userInfo(user.loginId)" class="avatar-wrap mlarge hide-in-mobile" data-toggle="tooltip" data-placement="top" title="@user.loginId">
                 @if(user.avatarUrl == UserApp.DEFAULT_AVATAR_URL){
                     <img src="@urlToPicture(user.email, 32)">
                 } else {
@@ -86,8 +86,8 @@
                 }
             </div>
         </div>
-        <div class="span2">
-            <div class="mt5 pull-right">
+        <div class="span2 hide-in-mobile">
+            <div class="mt5 pull-right hide-in-mobile">
                 @if(issue.assigneeName != null) {
                     <a href="@routes.UserApp.userInfo(issue.assignee.user.loginId)" class="avatar-wrap assinee" data-toggle="tooltip" data-placement="top" title="@Messages("issue.assignee"): @issue.assigneeName">
                         <img src="@issue.assignee.user.avatarUrl" width="32" height="32" alt="@issue.assigneeName">
app/views/issue/my_partial_search.scala.html
--- app/views/issue/my_partial_search.scala.html
+++ app/views/issue/my_partial_search.scala.html
@@ -34,11 +34,11 @@
 }
 
 <div pjax-container class="row-fluid issue-list-wrap">
-    <div class="span2">
+    <div class="span2 span-hard-wrap">
         <div class="inner advanced">
             @my_partial_list_quicksearch(param)
 
-            <hr>
+            <hr class="hide-in-mobile">
 
             <form id="search" name="search" action="@routes.IssueApp.userIssues()" method="get">
                 <input type="hidden" name="orderBy" value="@param.orderBy">
@@ -65,7 +65,7 @@
             }
         </div>
     </div>
-    <div class="span10" id="span10">
+    <div class="span10 span-hard-wrap" id="span10">
         <ul class="nav nav-tabs nm">
         @for(state <- Array(State.OPEN, State.CLOSED)) {
             <li @if(param.state == state.state) { class="active" } data-pjax>
app/views/issue/view.scala.html
--- app/views/issue/view.scala.html
+++ app/views/issue/view.scala.html
@@ -68,7 +68,7 @@
     <div class="project-page-wrap board-view">
         @** Post Info **@
         <div class="board-header issue">
-            <div class="pull-right mr10 mt10">
+            <div class="pull-right mr10 mt10 hide-in-mobile">
                 <div class="date" title="@JodaDateUtil.getDateString(issue.createdDate)">
                     @agoOrDateString(issue.createdDate)
                 </div>
@@ -76,25 +76,30 @@
             </div>
             <div class="title">
                 <strong class="board-id">#@issue.getNumber</strong> @issue.title
+                <div class="pull-right hide show-in-mobile" style="font-size: 0.7em">
+                    <span class="date" title="@JodaDateUtil.getDateString(issue.createdDate)">
+                    @agoOrDateString(issue.createdDate)
+                    </span>
+                    <span class="badge badge-small badge-issue-@issue.state.state.toLowerCase">@Messages("issue.state." + issue.state.state)</span>
+                </div>
             </div>
         </div>
-
         @** Content body **@
         <!--board-body-->
         <div class="board-body row-fluid">
             <div class="span9 span-left-pane">
                 <div class="author-info">
-                    <a href="@userInfo(issue.authorLoginId)" class="usf-group">
-                        <span class="avatar-wrap smaller">
-                            <img src="@User.findByLoginId(issue.authorLoginId).avatarUrl" width="20" height="20">
-                        </span>
-                        @if(issue.authorLoginId != null){
-                        <strong class="name">@issue.authorName</strong>
-                        <span class="loginid"> <strong>@{"@"}</strong>@issue.authorLoginId</span>
-                        } else {
-                        <strong class="name">@Messages("issue.noAuthor")</strong>
-                        }
-                    </a>
+                        <a href="@userInfo(issue.authorLoginId)" class="usf-group">
+                            <span class="avatar-wrap smaller">
+                                <img src="@User.findByLoginId(issue.authorLoginId).avatarUrl" width="20" height="20">
+                            </span>
+                            @if(issue.authorLoginId != null){
+                                <strong class="name">@issue.authorName</strong>
+                                <span class="loginid"> <strong>@{"@"}</strong>@issue.authorLoginId</span>
+                            } else {
+                                <strong class="name">@Messages("issue.noAuthor")</strong>
+                            }
+                        </a>
                 </div>
 
                 @if(StringUtils.isEmpty(issue.body)){
app/views/organization/group_board_list_partial.scala.html
--- app/views/organization/group_board_list_partial.scala.html
+++ app/views/organization/group_board_list_partial.scala.html
@@ -24,7 +24,7 @@
 @import utils.TemplateHelper._
 @defining(User.findByLoginId(post.authorLoginId)){ user =>
 <li class="post-item">
-    <a href="@routes.UserApp.userInfo(user.loginId)" class="avatar-wrap mlarge" data-toggle="tooltip" data-placement="top" title="@user.loginId">
+    <a href="@routes.UserApp.userInfo(user.loginId)" class="avatar-wrap mlarge hide-in-mobile" data-toggle="tooltip" data-placement="top" title="@user.loginId">
         @if(user.avatarUrl == UserApp.DEFAULT_AVATAR_URL){
             <img src="@urlToPicture(user.email, 32)">
         } else {
app/views/organization/group_issue_list_partial.scala.html
--- app/views/organization/group_issue_list_partial.scala.html
+++ app/views/organization/group_issue_list_partial.scala.html
@@ -32,8 +32,8 @@
 @for(issue <- issueList){
 @defining(User.findByLoginId(issue.authorLoginId)){ user =>
     <li class="post-item" id="issue-item-@issue.id">
-        <div class="span10">
-            <a href="@routes.UserApp.userInfo(user.loginId)" class="avatar-wrap mlarge" data-toggle="tooltip" data-placement="top" title="@user.loginId">
+        <div class="span10 span-hard-wrap">
+            <a href="@routes.UserApp.userInfo(user.loginId)" class="avatar-wrap mlarge hide-in-mobile" data-toggle="tooltip" data-placement="top" title="@user.loginId">
                 @if(user.avatarUrl == UserApp.DEFAULT_AVATAR_URL){
                     <img src="@urlToPicture(user.email, 32)">
                 } else {
@@ -57,10 +57,6 @@
                 <span class="infos-item" title="@JodaDateUtil.getDateString(issue.createdDate)">
                 @agoOrDateString(issue.createdDate)
                 </span>
-
-                <a href="@routes.ProjectApp.project(issue.project.owner,issue.project.name)" class="infos-link-item group-project-name pull-left">
-                @issue.project.name
-                </a>
 
                 @if(issue.milestone != null && issue.project != null && issue.project.menuSetting != null && issue.project.menuSetting.milestone) {
                 <span class="infos-item mileston-tag">
@@ -91,7 +87,7 @@
                 }
             </div>
         </div>
-        <div class="span2">
+        <div class="span2 hide-in-mobile">
             <div class="mt5 pull-right">
                 @if(issue.assigneeName != null) {
                     <a href="@routes.UserApp.userInfo(issue.assignee.user.loginId)" class="avatar-wrap assinee" data-toggle="tooltip" data-placement="top" title="@Messages("issue.assignee"): @issue.assigneeName">
app/views/organization/group_issue_search_partial.scala.html
--- app/views/organization/group_issue_search_partial.scala.html
+++ app/views/organization/group_issue_search_partial.scala.html
@@ -34,7 +34,7 @@
 }
 
 <div pjax-container class="row-fluid issue-list-wrap">
-    <div class="span2">
+    <div class="span2 span-hard-wrap">
         <div class="inner advanced">
             @group_issue_list_quicksearch(param)
 
@@ -63,7 +63,7 @@
             </form>
         </div>
     </div>
-    <div class="span10" id="span10">
+    <div class="span10 span-hard-wrap" id="span10">
         <ul class="nav nav-tabs nm">
         @for(state <- Array(State.OPEN, State.CLOSED)) {
             <li @if(param.state == state.state) { class="active" }>
app/views/organization/members.scala.html
--- app/views/organization/members.scala.html
+++ app/views/organization/members.scala.html
@@ -47,7 +47,7 @@
         <ul class="members project row-fluid">
         @for(member <- organization.users){
             @if(member.user != null){
-                <li class="member span6">
+                <li class="member span6 span-hard-wrap">
                     <a href="@routes.UserApp.userInfo(member.user.loginId)" class="avatar-wrap mlarge pull-left mr10">
                         <img src="@User.findByLoginId(member.user.loginId).avatarUrl" width="64" height="64">
                     </a>
app/views/organization/view.scala.html
--- app/views/organization/view.scala.html
+++ app/views/organization/view.scala.html
@@ -57,7 +57,7 @@
 <div class="page-wrap-outer">
     <div class="project-page-wrap">
         <div class="project-home-header row-fluid">
-            <div class="span9">
+            <div class="span9 span-hard-wrap">
                 <div class="project-overview">
                     <h3><span id="project-description">@org.descr</span></h3>
                 </div>
@@ -78,7 +78,7 @@
                     @for(project <- org.getVisibleProjects(UserApp.currentUser())) {
                     <li class="project" data-item="project-item" data-value="@project.name @project.overview">
                         <div class="info-wrap">
-                            <div class="owner-avatar-wrap">
+                            <div class="owner-avatar-wrap hide-in-mobile">
                                 <a href="@routes.ProjectApp.project(project.owner,project.name)">
                                     <img src="@urlToProjectLogo(project)" alt="@project.name"/>
                                 </a>
@@ -136,7 +136,7 @@
                     }
                 </ul>
             </div>
-            <div class="span3">
+            <div class="span3 span-hard-wrap">
                 <div class="bubble-wrap gray project-home">
                     <div class="inner member-info">
                         <header>
app/views/project/header.scala.html
--- app/views/project/header.scala.html
+++ app/views/project/header.scala.html
@@ -53,8 +53,8 @@
             </div>
             <div class="project-breadcrumb-wrap @if(project.isForkedFromOrigin){fork}">
                 <div class="project-breadcrumb">
-                    <span class="project-author"><a href="@routes.UserApp.userInfo(project.owner)">@project.owner</a></span>
-                    <span class="project-separator">/</span>
+                    <span class="project-author hide-in-mobile"><a href="@routes.UserApp.userInfo(project.owner)">@project.owner</a></span>
+                    <span class="project-separator hide-in-mobile">/</span>
                     <span class="project-name"><a href="@routes.ProjectApp.project(project.owner, project.name)">@project.name</a></span>
                     @if(project.isPrivate){
                     <span class="project-private">
app/views/project/home.scala.html
--- app/views/project/home.scala.html
+++ app/views/project/home.scala.html
@@ -36,8 +36,18 @@
 @projectMenu(project, utils.MenuType.PROJECT_HOME, "")
 <div class="page-wrap-outer">
     <div class="project-page-wrap">
+        <div class="project-breadcrumb hide show-in-mobile">
+            <span class="project-author"><a href="@routes.UserApp.userInfo(project.owner)">@project.owner</a></span>
+            <span class="project-separator">/</span>
+            <span class="project-name"><a href="@routes.ProjectApp.project(project.owner, project.name)">@project.name</a></span>
+            @if(project.isPrivate){
+                <span class="project-private">
+                    <i class="yobicon-lock"></i>
+                </span>
+            }
+        </div>
         <div class="project-home-header row-fluid">
-            <div class="project-overview span9">
+            <div class="project-overview span9 span-hard-wrap">
                 <div class="project-description" data-toggle="project-description-tab">
                 <h3><span id="project-description" class="markdown-wrap">@if(StringUtils.isEmpty(project.overview)) {@Messages("project.description.placeholder")} else {@Html(Markdown.render(project.overview))}</span>
                     @if(isAllowed(UserApp.currentUser(), project.asResource(), Operation.UPDATE)){
@@ -53,7 +63,7 @@
                 </div>
             </div>
             @if(project.menuSetting.code) {
-                <div class="project-clone-wrap span3">
+                <div class="project-clone-wrap span3 hide-in-mobile">
                     <input type="text" class="project-clone-url" id="cloneURL" readonly="readonly" value="@if(project.isGit){@CodeApp.getURLWithLoginId(project)} else {@CodeApp.getURL(project)}">
                     <button class="ybtn project-clone-button" id="cloneURLBtn">@Messages("code.copyUrl")</button>
                 </div>
app/views/project/members.scala.html
--- app/views/project/members.scala.html
+++ app/views/project/members.scala.html
@@ -47,7 +47,7 @@
         <ul class="members project row-fluid">
             @for(member <- members){
                 @if(member.user != null){
-            <li class="member span6">
+            <li class="member span6 span-hard-wrap">
                 <a href="@routes.UserApp.userInfo(member.user.loginId)" class="avatar-wrap mlarge pull-left mr10">
                     <img src="@User.findByLoginId(member.user.loginId).avatarUrl" width="64" height="64">
                 </a>
Add a comment
List