doortts doortts 2016-02-16
mobile: Support mobile view very roughly
@7d88f1e5e83dc6d279bd7c8b709afe746c297c8b
app/assets/stylesheets/less/_markdown.less
--- app/assets/stylesheets/less/_markdown.less
+++ app/assets/stylesheets/less/_markdown.less
@@ -6,7 +6,7 @@
 
   ul, ol {
     font-weight: normal;
-    margin-left: 5px;
+    margin-left: 0px;
   }
 
   ul > li > p {
app/assets/stylesheets/less/_page.less
--- app/assets/stylesheets/less/_page.less
+++ app/assets/stylesheets/less/_page.less
@@ -3,6 +3,10 @@
     color:#202020;
 }
 
+.short-title {
+    display: none;
+}
+
 .unsupported {
     text-align: center;
     font-size: 14px;
@@ -6423,3 +6427,7 @@
     unicode-bidi: bidi-override;
     direction: rtl;
 }
+
+.resp-comment-avatar {
+    display: none;
+}
app/assets/stylesheets/less/_reponsive.less
--- app/assets/stylesheets/less/_reponsive.less
+++ app/assets/stylesheets/less/_reponsive.less
@@ -1,83 +1,229 @@
-// responsive
+@media all and (max-width: 600px){
+    .span-left-pane {
+        width: 98% !important;
+    }
+    .span-right-pane {
+        display: none !important;
+    }
+    .gnb-search-form {
+        display: none !important;
+    }
+    .short-title {
+        display: block;
+    }
+    .normal-title {
+        display: none;
+    }
+    .project-menu-nav li a {
+        padding: 5px 15px 4px !important;
+    }
+    .project-menu-count {
+        position: absolute !important;
+        margin-top: -36px !important;
+    }
+
+    .hide-in-mobile {
+        display: none !important;
+    }
+
+    .watch-btn {
+        display: none;
+    }
+
+    .comment-body {
+        padding: 10px 10px !important;
+    }
+
+    .textarea-box {
+        padding-right: 2px !important;
+    }
+
+    // override @media(1199px)
+    .unsupported {
+        min-width: 10px !important;
+    }
+
+    .gnb-outer {
+        min-width: 10px !important;
+    }
+
+    .page-wrap-outer {
+        min-width: 10px !important;
+        padding: 2px !important;
+    }
+
+    .board-body {
+        .content {
+            padding: 0 !important;
+        }
+    }
+
+    .site-breadcrumb-outer {
+        min-width: 10px !important;
+    }
+    .project-header-outer {
+        min-width: 10px !important;
+    }
+
+    .project-menu-outer {
+        min-width: 10px !important;
+    }
+
+    .page-footer-outer {
+        min-width: 10px !important;
+    }
+
+    .comment-avatar {
+        display: none;
+    }
+    .media-body {
+        margin-left: 0 !important;
+        &:before {
+            display: none;
+        }
+        .resp-comment-avatar {
+            display: inline-block;
+        }
+        .avatar-wrap {
+            width: 24px !important;
+            height: 24px !important;
+        }
+    }
+
+    // other pages
+
+    .write-comment-box {
+        padding: 0;
+    }
+
+    .project-menu-count {
+
+    }
+
+    .project-menu-gruop {
+        margin-left: 15px !important;
+    }
+
+    .project-header-avatar {
+        left: 0 !important;
+        width: 50px !important;
+        height: 50px !important;
+        bottom: 0 !important;
+    }
+
+    .project-breadcrumb-wrap {
+        left: 60px !important;
+        bottom: 10px !important;
+    }
+
+    .span-hard-wrap {
+        min-width: 95%;
+        margin-bottom: 10px;
+    }
+    .nav-tabs li a {
+        padding-left: 20px !important;
+        padding-right: 20px !important;
+    }
+}
+
 @media all and (max-width:1199px){
     .unsupported {
+        width: 100%;
+        max-width: 1199px;
         min-width: 1000px;
         padding: 0 10px;
 
         .unsupported-inner {
-            width:980px;
+            width:95%;
+            max-width: 980px;
         }
     }
 
     .gnb-outer {
+        width: 100%;
+        max-width: 1199px;
         min-width: 1000px;
         padding:0 10px;
 
         .gnb-inner {
-            width:980px;
+            width:95%;
+            max-width:980px;
         }
     }
 
     .search-box {
         input:focus {
-            width:250px;
+            max-width:250px;
         }
     }
 
     .page-wrap-outer {
+        max-width: 1199px;
         min-width: 1000px;
         padding:0 10px;
     }
 
     .page-wrap {
-        width:980px;
+        width: 95%;
+        max-width:980px;
     }
 
     .project-menu-inner {
-        width:980px;
+        width: 95%;
+        max-width:980px;
     }
 
     .project-page-wrap {
-        width: 980px;
+        width: 95%;
+        max-width:980px;
     }
 
     .site-breadcrumb-outer {
+        width: 100%;
+        max-width: 1199px;
         min-width: 1000px;
         padding:0 10px;
 
         .site-breadcrumb-inner {
-            width: 980px;
+            width: 95%;
+            max-width:980px;
         }
     }
     .project-header-outer {
+        max-width: 1199px;
         min-width: 1000px;
         padding:0 10px;
 
         .project-header-inner {
             .project-header-wrap {
-                width: 980px;
+                width: 95%;
+                max-width: 980px;
             }
         }
     }
 
     .project-menu-outer {
+        max-width: 1199px;
         min-width: 1000px;
         padding:0 10px;
 
         .project-menu-inner {
-            width: 980px;
+            width: 95%;
+            max-width: 980px;
         }
     }
 
     .project-home-header {
         .project-clone-wrap {
             .project-clone-url {
-                width: 125px;
+                width: 100px;
+                max-width: 125px;
             }
 
             &:hover {
                 .project-clone-url {
-                    width:250px;
+                    width: 100%;
+                    max-width:250px;
                 }
             }
         }
@@ -114,15 +260,18 @@
     }
 
     .site-setting-wrap {
-        width:980px;
+        width: 95%;
+        max-width:980px;
     }
 
     .page-footer-outer {
+        max-width: 1199px;
         min-width: 1000px;
         padding:10px;
 
         .page-footer {
-             width:980px;
+            width: 95%;
+            max-width:980px;
         }
     }
 
app/views/board/partial_comments.scala.html
--- app/views/board/partial_comments.scala.html
+++ app/views/board/partial_comments.scala.html
@@ -45,6 +45,11 @@
         </div>
         <div class="media-body">
             <div class="meta-info">
+                <span class="resp-comment-avatar">
+                    <a href="@userInfo(comment.authorLoginId)" class="avatar-wrap" data-toggle="tooltip" data-placement="top" title="@comment.authorName">
+                        <img src="@User.findByLoginId(comment.authorLoginId).avatarUrl" width="32" height="32" alt="@comment.authorLoginId">
+                    </a>
+                </span>
                 <span class="comment_author pull-left">
                     <a href="@routes.UserApp.userInfo(comment.authorLoginId)" data-toggle="tooltip" data-placement="top" title="@comment.authorName">
                         <strong>@comment.authorLoginId </strong>
app/views/board/partial_list.scala.html
--- app/views/board/partial_list.scala.html
+++ app/views/board/partial_list.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/issue/create.scala.html
--- app/views/issue/create.scala.html
+++ app/views/issue/create.scala.html
@@ -55,7 +55,7 @@
             </div>
 
             <div class="row-fluid">
-                <div class="span9">
+                <div class="span9 span-left-pane">
                     <dl>
                         <dd style="position: relative;">
                             @common.editor("body", "", "tabindex=2", "content-body")
@@ -73,7 +73,7 @@
                      --><a href="javascript:history.back();" class="ybtn">@Messages("button.cancel")</a>
                     </div>
                 </div>
-                <div class="span3">
+                <div class="span3 span-hard-wrap">
                     @if(isProjectResourceCreatable(UserApp.currentUser(), project, ResourceType.ISSUE_ASSIGNEE)) {
                     <dl class="issue-option">
                          <dt>@Messages("issue.assignee")</dt>
app/views/issue/edit.scala.html
--- app/views/issue/edit.scala.html
+++ app/views/issue/edit.scala.html
@@ -57,7 +57,7 @@
                 </dl>
             </div>
             <div class="row-fluid">
-                <div class="span9">
+                <div class="span9 span-left-pane">
                     <dl>
                         <dd style="position: relative;">
                             @common.editor("body", issue.body, "tabindex=2", "content-body")
@@ -84,7 +84,7 @@
                     </div>
                 </div>
 
-                <div class="span3">
+                <div class="span3 span-hard-wrap">
                     @if(isAllowed(UserApp.currentUser(), issue.stateAsResource(), Operation.UPDATE)){
                     <dl class="issue-option">
                         <dt>@Messages("issue.state")</dt>
app/views/issue/partial_comments.scala.html
--- app/views/issue/partial_comments.scala.html
+++ app/views/issue/partial_comments.scala.html
@@ -84,6 +84,11 @@
         <div class="media-body">
             <div class="meta-info">
                 <span class="comment_author pull-left">
+                    <span class="resp-comment-avatar">
+                        <a href="@userInfo(comment.authorLoginId)" class="avatar-wrap" data-toggle="tooltip" data-placement="top" title="@comment.authorName">
+                            <img src="@User.findByLoginId(comment.authorLoginId).avatarUrl" width="32" height="32" alt="@comment.authorLoginId">
+                        </a>
+                    </span>
                     <a href="@userInfo(comment.authorLoginId)" data-toggle="tooltip" data-placement="top" title="@comment.authorName">
                         <strong>@comment.authorLoginId </strong>
                     </a>
app/views/issue/partial_list.scala.html
--- app/views/issue/partial_list.scala.html
+++ app/views/issue/partial_list.scala.html
@@ -32,14 +32,14 @@
 @for(issue <- issueList){
     @defining(User.findByLoginId(issue.authorLoginId)){ user =>
     <li class="post-item" id="issue-item-@issue.id" data-item="issue-item" data-value="@user.loginId @issue.getNumber @issue.title">
-        <div class="span9">
+        <div class="span9 span-hard-wrap">
             @if(ProjectUser.isMember(UserApp.currentUser().id, project.id)){
-            <label for="issue-@issue.id" class="mass-update-check">
+            <label for="issue-@issue.id" class="mass-update-check hide-in-mobile">
                 <input id="issue-@issue.id" type="checkbox" name="checked-issue" data-toggle="issue-checkbox" data-issue-id="@issue.id" data-issue-labels="@issueLabels(issue)">
             </label>
             }
             <label for="issue-@issue.id" class="issue-item-row">
-                <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 {
@@ -93,7 +93,7 @@
                 </div>
             </label>
         </div>
-        <div class="span3">
+        <div class="span3 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/issue/partial_list_wrap.scala.html
--- app/views/issue/partial_list_wrap.scala.html
+++ app/views/issue/partial_list_wrap.scala.html
@@ -37,11 +37,11 @@
 }
 
 <div pjax-container class="row-fluid issue-list-wrap">
-    <div class="span2">
+    <div class="span2 span-hard-wrap">
         @partial_list_quicksearch(param, project)
         @partial_searchform(param, project)
     </div>
-    <div class="span10" id="span10">
+    <div class="span10 span-hard-wrap" id="span10">
         <div class="pull-right">
             <a href="@routes.IssueApp.newIssueForm(project.owner, project.name)" class="ybtn ybtn-success">@Messages("issue.menu.new")</a>
         </div>
app/views/issue/partial_massupdate.scala.html
--- app/views/issue/partial_massupdate.scala.html
+++ app/views/issue/partial_massupdate.scala.html
@@ -52,7 +52,7 @@
 <li class="divider" data-category="${category}"></li>
 </script>
 
-<div class="mass-update-wrap">
+<div class="mass-update-wrap hide-in-mobile">
     <form id="mass-update-form" class="mass-update-form pull-left" action="@routes.IssueApp.massUpdate(project.owner, project.name)" method="post">
         <div class="btn-group check-all">
             <label for="check-all">
app/views/issue/partial_searchform.scala.html
--- app/views/issue/partial_searchform.scala.html
+++ app/views/issue/partial_searchform.scala.html
@@ -26,7 +26,7 @@
     <input type="hidden" name="orderBy" value="@param.orderBy">
     <input type="hidden" name="orderDir" value="@param.orderDir">
     <input type="hidden" name="state" value="@param.state">
-    <hr>
+    <hr class="hide-in-mobile">
     <div class="search">
         <div class="search-bar">
             <input name="filter" class="textbox full" type="text" value="@param.filter" data-search="filter">
@@ -34,7 +34,7 @@
         </div>
     </div>
 
-    <div id="advanced-search-form" class="srch-advanced">
+    <div id="advanced-search-form" class="srch-advanced hide-in-mobile">
         <dl class="issue-option">
             <dt>@Messages("issue.author")</dt>
             <dd>
app/views/issue/view.scala.html
--- app/views/issue/view.scala.html
+++ app/views/issue/view.scala.html
@@ -82,7 +82,7 @@
         @** Content body **@
         <!--board-body-->
         <div class="board-body row-fluid">
-            <div class="span9">
+            <div class="span9 span-left-pane">
                 <div class="author-info">
                     <a href="@userInfo(issue.authorLoginId)" class="usf-group">
                         <span class="avatar-wrap smaller">
@@ -169,7 +169,7 @@
                 @** // Comment **@
             </div>
 
-            <div class="span3 mb20">
+            <div class="span3 span-right-pane mb20">
                 <div class="issue-info">
                     <form id="issueUpdateForm" action="@routes.IssueApp.massUpdate(project.owner, project.name)" method="post">
                         <input type="hidden" name="issues[0].id" value="@issue.id" />
app/views/project/home.scala.html
--- app/views/project/home.scala.html
+++ app/views/project/home.scala.html
@@ -60,7 +60,7 @@
             }
         </div>
         <div class="row-fluid">
-            <div class="span9">
+            <div class="span9 span-left-pane">
                  <ul class="nav nav-tabs">
                     <li class="@isActiveTab("readme")">
                         <a href="@routes.ProjectApp.project(project.owner, project.name)">README</a>
@@ -102,7 +102,7 @@
                 </div>
             </div>
 
-            <div class="span3">
+            <div class="span3 span-right-pane">
                 <div class="bubble-wrap gray project-home">
                     <div class="project-btn-wrap">
                         @if(project.menuSetting.issue) {
app/views/projectMenu.scala.html
--- app/views/projectMenu.scala.html
+++ app/views/projectMenu.scala.html
@@ -52,20 +52,20 @@
         <ul class="project-menu-nav project-menu-gruop">
             <li class="@isActiveMenu(MenuType.PROJECT_HOME)">
                 <a href="@routes.ProjectApp.project(project.owner, project.name)">
-                    @Messages("title.projectHome")
+                    <span class="normal-title">@Messages("title.projectHome")</span><span class="short-title">H</span>
                 </a>
             </li>
             @if(project.menuSetting.code) {
                 <li class="@isActiveMenu(MenuType.CODE)">
                     <a href="@routes.CodeApp.codeBrowser(project.owner, project.name)">
-                        @Messages("menu.code")
+                        <span class="normal-title">@Messages("menu.code")</span><span class="short-title">C</span>
                     </a>
                 </li>
             }
             @if(project.menuSetting.issue) {
                 <li class="@isActiveMenu(MenuType.ISSUE)">
                     <a href="@routes.IssueApp.issues(project.owner, project.name, "open")">
-                        @Messages("menu.issue") @countingBadge(Issue.countIssues(project.id, State.OPEN))
+                        <span class="normal-title">@Messages("menu.issue")</span><span class="short-title">I</span> @countingBadge(Issue.countIssues(project.id, State.OPEN))
                     </a>
                 </li>
             }
@@ -73,7 +73,7 @@
                 @if(project.vcs.equals("GIT")){
                     <li class="@isActiveMenu(MenuType.PULL_REQUEST)">
                     <a href="@getPullRequestURL(project)">
-                        @Messages("menu.pullRequest") @countingBadge(PullRequest.countOpenedPullRequests(project))
+                        <span class="normal-title">@Messages("menu.pullRequest")</span><span class="short-title">P</span> @countingBadge(PullRequest.countOpenedPullRequests(project))
                     </a>
                 </li>
                 }
@@ -81,21 +81,21 @@
             @if(project.menuSetting.review) {
                 <li class="@isActiveMenu(MenuType.PROJECT_REVIEW)">
                     <a href="@routes.ReviewThreadApp.reviewThreads(project.owner, project.name)">
-                        @Messages("menu.review") @countingBadge(reviewCount)
+                        <span class="normal-title">@Messages("menu.review")</span><span class="short-title">R</span> @countingBadge(reviewCount)
                     </a>
                 </li>
             }
             @if(project.menuSetting.milestone) {
                 <li class="@isActiveMenu(MenuType.MILESTONE)">
                     <a href="@routes.MilestoneApp.milestones(project.owner, project.name)">
-                        @Messages("milestone")
+                        <span class="normal-title">@Messages("milestone")</span><span class="short-title">M</span>
                     </a>
                 </li>
             }
             @if(project.menuSetting.board) {
                 <li class="@isActiveMenu(MenuType.BOARD)">
                     <a href="@routes.BoardApp.posts(project.owner, project.name)">
-                        @Messages("menu.board")
+                        <span class="normal-title">@Messages("menu.board")</span><span class="short-title">B</span>
                         @if(Posting.countPostings(project) > 0){
                             <span class="project-menu-count">@Posting.countPostings(project)</span>
                         }
@@ -109,7 +109,7 @@
                 <li class="@isActiveMenu(MenuType.PROJECT_SETTING)">
                     <a href="@routes.ProjectApp.settingForm(project.owner, project.name)">
                         <i class="yobicon-cog"></i>
-                        <span class="blind">@Messages("menu.admin")</span>
+                        <span class="blind"><span class="normal-title">@Messages("menu.admin")</span></span>
                         @countingBadge(project.enrolledUsers.size)
                     </a>
                 <li>
Add a comment
List