Commit 7f6e41fa028e4293e50edbf9fe2ea6cc19957533

Authored by Dmitriy Zaporozhets
1 parent 05d76fc4

Bootstrap: application layout

app/assets/stylesheets/common.scss
@@ -105,6 +105,19 @@ $blue_link: "#2fa0bb"; @@ -105,6 +105,19 @@ $blue_link: "#2fa0bb";
105 border-right: 1px solid $border_color; 105 border-right: 1px solid $border_color;
106 height:100%; 106 height:100%;
107 min-height:450px; 107 min-height:450px;
  108 +
  109 + .fixed {
  110 + position:fixed;
  111 + }
  112 +
  113 + aside a {
  114 + display:block;
  115 + position:relative;
  116 + padding:15px 10px;
  117 + margin:10px 0 0 0;
  118 + font-size:13px;
  119 + font-weight:bold;
  120 + }
108 } 121 }
109 122
110 .container-fluid > .content { 123 .container-fluid > .content {
@@ -112,6 +125,17 @@ $blue_link: "#2fa0bb"; @@ -112,6 +125,17 @@ $blue_link: "#2fa0bb";
112 margin-top:20px; 125 margin-top:20px;
113 } 126 }
114 127
  128 +aside.projects {
  129 + margin-left: 0;
  130 + padding-left: 20px;
  131 +}
  132 +
  133 +img.avatar {
  134 + width:32px;
  135 + float:left;
  136 + padding-right:5px;
  137 +}
  138 +
115 @import "reset_bootstrap.scss"; 139 @import "reset_bootstrap.scss";
116 @import "top_panel.scss"; 140 @import "top_panel.scss";
117 @import "projects.css.scss"; 141 @import "projects.css.scss";
app/assets/stylesheets/projects.css.scss
1 .git_url_wrapper { 1 .git_url_wrapper {
2 margin-right:50px 2 margin-right:50px
3 } 3 }
4 -  
5 -.project {  
6 - .sidebar {  
7 - .fixed {  
8 - position:fixed;  
9 - }  
10 -  
11 - aside a {  
12 - display:block;  
13 - position:relative;  
14 - padding:15px 10px;  
15 - margin:10px 0 0 0;  
16 - font-size:13px;  
17 - font-weight:bold;  
18 - }  
19 - }  
20 -}  
21 .file_stats { 4 .file_stats {
22 span { 5 span {
23 img { 6 img {
app/assets/stylesheets/projects.css.scss.bak 0 → 100644
@@ -0,0 +1,384 @@ @@ -0,0 +1,384 @@
  1 +.git_url_wrapper { margin-right:50px }
  2 +
  3 +.sidebar aside a{
  4 + display: block;
  5 + position: relative;
  6 + padding: 15px 10px;
  7 + margin: 10px 0 0 0;
  8 +
  9 + span.number{
  10 + float: right; border-radius: 5px; text-shadow: none; background: rgba(0,0,0,.12); text-align: center; padding: 5px 8px; position: absolute; top: 10px; right: 10px;
  11 + }
  12 + &.current {
  13 + color: white;
  14 + background: $active_bg_color;
  15 + border: 1px solid $active_bd_color;
  16 + border-radius:5px;
  17 +
  18 + -webkit-border-top-right-radius: 0;
  19 + -webkit-border-bottom-right-radius: 0;
  20 + -moz-border-radius-topright: 0px;
  21 + -moz-border-radius-bottomright: 0px;
  22 + border-top-right-radius: 0;
  23 + border-bottom-right-radius: 0;
  24 + margin-right: -1px;
  25 + }
  26 +}
  27 +
  28 +body table .commit a{color: #{$blue_link}}
  29 +body table th, body table td{ border-bottom: 1px solid #DEE2E3;}
  30 +body .fixed{position: fixed; }
  31 +
  32 +/** File stat **/
  33 +.file_stats {
  34 + span {
  35 + img {
  36 + width:14px;
  37 + float:left;
  38 + margin-right: 6px;
  39 + padding:2px 0;
  40 + }
  41 + }
  42 +}
  43 +
  44 +.round-borders {
  45 + @include round-borders-all(4px);
  46 + padding: 4px 0px;
  47 +}
  48 +
  49 +table.round-borders {
  50 + float:left;
  51 + text-align: left;
  52 +}
  53 +
  54 +
  55 +
  56 +/** PROJECTS **/
  57 +input.ssh_project_url {
  58 + padding:5px;
  59 + margin:0px;
  60 + float:right;
  61 + width:400px;
  62 + text-align:center;
  63 +}
  64 +
  65 +#projects-list .project {
  66 + height:50px;
  67 +}
  68 +
  69 +#tree-slider .tree-item,
  70 +#projects-list .project,
  71 +#snippets-table .snippet,
  72 +#issues-table .issue{
  73 + cursor:pointer;
  74 +}
  75 +
  76 +.clear {
  77 + clear: both;
  78 +}
  79 +
  80 +
  81 +
  82 +#user_projects_limit{
  83 + width: 60px;
  84 +}
  85 +
  86 +.handle:hover{
  87 + cursor: move;
  88 +}
  89 +
  90 +.project-refs-form {
  91 + span {
  92 + background: none !important;
  93 + position:static !important;
  94 + width:auto !important;
  95 + height: auto !important;
  96 + }
  97 +}
  98 +
  99 +.project-refs-select {
  100 + width:200px;
  101 +}
  102 +
  103 +.filter .left { margin-right:15px; }
  104 +
  105 +body table .commit {
  106 + a.tree-commit-link {
  107 + color:#444;
  108 + &:hover {
  109 + text-decoration:underline;
  110 + }
  111 + }
  112 +}
  113 +
  114 +/** NEW PROJECT **/
  115 +.new-project-hodler {
  116 + .icon span { background-position: -31px -70px; }
  117 + td { border-bottom: 1px solid #DEE2E3; }
  118 +}
  119 +
  120 +/** Feed entry **/
  121 +.commit,
  122 +.snippet,
  123 +.message {
  124 + .title {
  125 + color:#666;
  126 + a { color:#666 !important; }
  127 + p { margin-top:0px; }
  128 + }
  129 + .author { color: #999 }
  130 +}
  131 +
  132 +/** JQuery UI **/
  133 +.ui-autocomplete { @include round-borders-all(5px); }
  134 +.ui-menu-item { cursor: pointer }
  135 +.ui-selectmenu{
  136 + @include round-borders-all(4px);
  137 + margin-right:10px;
  138 + font-size:1.5em;
  139 + height:auto;
  140 + font-weight:bold;
  141 + .ui-selectmenu-status {
  142 + padding:3px 10px;
  143 + }
  144 +}
  145 +
  146 +#holder {
  147 + background:#FAFAFA;
  148 + border: 1px solid #EEE;
  149 + cursor: move;
  150 + height: 70%;
  151 + overflow: hidden;
  152 +}
  153 +
  154 +/* Project Dashboard Page */
  155 +html, body { height: 100%; }
  156 +
  157 +.news-feed h2{float: left;}
  158 +.news-feed .project-updates {margin-bottom: 20px; display: block; width: 100%;}
  159 +.news-feed .project-updates .data{ padding: 0}
  160 +.news-feed .project-updates a.project-update {padding: 10px; border-bottom: 1px solid #eee; overflow: hidden; display: block;}
  161 +.news-feed .project-updates a.project-update:last-child{border-bottom: 0}
  162 +.news-feed .project-updates a.project-update img{float: left; margin-right: 10px;}
  163 +.news-feed .project-updates a.project-update span.update-title, .dashboard-page .news-feed .project-updates li a span.update-author{display: block;}
  164 +.news-feed .project-updates a.project-update span.update-title{margin-bottom: 10px}
  165 +.news-feed .project-updates a.project-update span.update-author{color: #999; font-weight: normal; font-style: italic;}
  166 +.news-feed .project-updates a.project-update span.update-author strong{font-weight: bold; font-style: normal;}
  167 +/* eo Dashboard Page */
  168 +
  169 +
  170 +/** Update entry **/
  171 +.update-data { padding: 0 }
  172 +.update-data { width:100%; }
  173 +.update-data.ui-box .data { padding:0; }
  174 +a.update-item {padding: 10px; border-bottom: 1px solid #eee; overflow: hidden; display: block;}
  175 +a.update-item:last-child{border-bottom: 0}
  176 +a.update-item img{float: left; margin-right: 10px;}
  177 +a.update-item span.update-title, .dashboard-page .news-feed .project-updates li a span.update-author{display: block;}
  178 +a.update-item span.update-title{margin-bottom: 10px}
  179 +a.update-item span.update-author{color: #999; font-weight: normal; font-style: italic;}
  180 +a.update-item span.update-author strong{font-weight: bold; font-style: normal;}
  181 +
  182 +
  183 +body .team_member_new .span-6, .team_member_edit .span-6{ padding:10px 0; }
  184 +
  185 +body.projects-page input.text.git-url.project_list_url { width:165px; }
  186 +
  187 +
  188 +body table.no-borders th {
  189 + background:none;
  190 + border-bottom:1px solid #CCC;
  191 + color:#333;
  192 +}
  193 +
  194 +body table.no-borders tr,
  195 +body table.no-borders td{
  196 + border:none;
  197 +}
  198 +
  199 +.ajax-tab-loading {
  200 + padding:40px;
  201 + display:none;
  202 +}
  203 +
  204 +#tree-content-holder { float:left; width:100%; }
  205 +
  206 +#tree-readme-holder {
  207 + float:left;
  208 + width:100%;
  209 +
  210 + .readme {
  211 + @include round-borders-all(4px);
  212 + padding: 4px 15px;
  213 + background:#F7F7F7;
  214 + }
  215 +}
  216 +
  217 +
  218 +
  219 +/* Commit Page */
  220 +.entity-info {float: right;}
  221 +.entity-button{
  222 + background-image: -webkit-gradient(linear, 0 0, 0 26, color-stop(0.192, #fff), to(#f4f4f4));
  223 + background-image: -webkit-linear-gradient(#fff 19.2%, #f4f4f4);
  224 + background-image: -moz-linear-gradient(#fff 19.2%, #f4f4f4);
  225 + background-image: -o-linear-gradient(#fff 19.2%, #f4f4f4);
  226 + box-shadow: 0 -1px 0 white inset;
  227 + display: block;
  228 + border: 1px solid #eee;
  229 + border-radius: 5px;
  230 + margin-bottom: 2px;
  231 + position: relative;
  232 + padding: 4px 10px;
  233 + font-size: 11px;
  234 + padding-right: 20px;
  235 +}
  236 +
  237 +.entity-button i{
  238 + background: url('images.png') no-repeat -138px -27px;
  239 + width: 6px;
  240 + height: 9px;
  241 + float: right;
  242 + position: absolute;
  243 + top: 6px;
  244 + right: 5px;
  245 +}
  246 +.box-arrow{float: right; background: #E3E5EA; padding: 10px; border-radius: 5px; margin-top: 2px; text-shadow: none; color: #999; margin: 1.5em 0;}
  247 +
  248 +h4.dash-tabs {
  249 + margin: 0;
  250 + border-bottom: 1px solid #ccc;
  251 + padding: 10px 10px;
  252 + font-size: 11px;
  253 + padding-left:20px;
  254 + font-weight: bold; text-transform: uppercase;
  255 + background: #F7F7F7;
  256 + margin-bottom:20px;
  257 + height:13px;
  258 +
  259 +}
  260 +
  261 +.dash-button {
  262 + border-right: 1px solid #ddd;
  263 + background:none;
  264 + padding: 10px 15px;
  265 + float:left;
  266 + position:relative;
  267 + top:-10px;
  268 + left:0px;
  269 + height:13px;
  270 +
  271 + &:first-child {
  272 + border-left: 1px solid #ddd;
  273 + }
  274 + &.active {
  275 + background: #eaeaea;
  276 + }
  277 +}
  278 +
  279 +
  280 +.dashboard-loader {
  281 + float:right;
  282 + margin-right:30px;
  283 + display:none;
  284 +}
  285 +
  286 +
  287 +.merge-tabs {
  288 + margin: 0;
  289 + border: 1px solid #ccc;
  290 + padding: 5px;
  291 + font-size: 12px;
  292 + background: #F7F7F7;
  293 + margin-bottom:20px;
  294 + height:26px;
  295 +
  296 + -moz-border-radius: 4px;
  297 + -webkit-border-radius: 4px;
  298 + border-radius: 4px;
  299 +
  300 + .tab {
  301 + font-weight: bold;
  302 + border-right: 1px solid #ddd;
  303 + background:none;
  304 + padding: 10px;
  305 + min-width:60px;
  306 + float:left;
  307 + position:relative;
  308 + top:-5px;
  309 + left:-5px;
  310 + height:16px;
  311 + padding-left:34px;
  312 +
  313 + span {
  314 + width: 20px;
  315 + height: 20px;
  316 + display: inline-block;
  317 + position: absolute;
  318 + left: 8px;
  319 + top: 8px;
  320 + }
  321 +
  322 + &.active {
  323 + background: #eaeaea;
  324 + }
  325 + }
  326 +}
  327 +.merge-tabs.repository .tab span{ background: url("images.png") no-repeat -38px -77px; }
  328 +.activities-tab span { background: url("images.png") no-repeat -161px -1px; }
  329 +.stat-tab span,
  330 +.team-tab span,
  331 +.snippets-tab span { background: url("images.png") no-repeat -38px -77px; }
  332 +.files-tab span { background: url("images.png") no-repeat -112px -23px; }
  333 +
  334 +.merge-notes-tab span { background: url("images.png") no-repeat -161px -1px; }
  335 +.merge-commits-tab span { background: url("images.png") no-repeat -86px 1px; }
  336 +.merge-diffs-tab span { background: url("images.png") no-repeat -118px 1px; }
  337 +.merge-tabs .dashboard-loader { padding:8px; }
  338 +
  339 +.user-mention {
  340 + color: #2FA0BB;
  341 + font-weight: bold;
  342 +}
  343 +
  344 +.author {
  345 + color: #999;
  346 +}
  347 +
  348 +
  349 +
  350 +
  351 +.dark_scheme_box {
  352 + padding:20px 0;
  353 +
  354 + label {
  355 + float:left;
  356 + box-shadow: 0 0px 5px rgba(0,0,0,.3);
  357 +
  358 + img {
  359 + }
  360 + }
  361 +}
  362 +
  363 +a.project-update.titled {
  364 + position: relative;
  365 + padding-left: 235px !important;
  366 +
  367 + .title-block {
  368 + padding: 10px;
  369 + width: 205px;
  370 + position: absolute;
  371 + left: 0;
  372 + top: 0;
  373 + }
  374 +}
  375 +
  376 +.add_new {
  377 + float: right;
  378 + background: #A6B807;
  379 + color: white;
  380 + padding: 4px 10px;
  381 + @include round-borders-all(4px);
  382 + font-size:11px;
  383 + margin: 10px 0;
  384 +}
app/assets/stylesheets/projects.css.scss~ 0 → 100644
@@ -0,0 +1,385 @@ @@ -0,0 +1,385 @@
  1 +.git_url_wrapper { margin-right:50px }
  2 +
  3 +.sidebar aside a{
  4 + display: block;
  5 + position: relative;
  6 + padding: 15px 10px;
  7 + margin: 10px 0 0 0;
  8 +
  9 + font-size:13px;
  10 + font-weight:bold;
  11 + color:#333;
  12 +
  13 + &.current {
  14 + color: white;
  15 + background: $active_bg_color;
  16 + border: 1px solid $active_bd_color;
  17 + border-radius:5px;
  18 +
  19 + -webkit-border-top-right-radius: 0;
  20 + -webkit-border-bottom-right-radius: 0;
  21 + -moz-border-radius-topright: 0px;
  22 + -moz-border-radius-bottomright: 0px;
  23 + border-top-right-radius: 0;
  24 + border-bottom-right-radius: 0;
  25 + margin-right: -1px;
  26 + }
  27 +}
  28 +
  29 +body table .commit a{color: #{$blue_link}}
  30 +body table th, body table td{ border-bottom: 1px solid #DEE2E3;}
  31 +body .fixed{position: fixed; }
  32 +
  33 +/** File stat **/
  34 +.file_stats {
  35 + span {
  36 + img {
  37 + width:14px;
  38 + float:left;
  39 + margin-right: 6px;
  40 + padding:2px 0;
  41 + }
  42 + }
  43 +}
  44 +
  45 +.round-borders {
  46 + @include round-borders-all(4px);
  47 + padding: 4px 0px;
  48 +}
  49 +
  50 +table.round-borders {
  51 + float:left;
  52 + text-align: left;
  53 +}
  54 +
  55 +
  56 +
  57 +/** PROJECTS **/
  58 +input.ssh_project_url {
  59 + padding:5px;
  60 + margin:0px;
  61 + float:right;
  62 + width:400px;
  63 + text-align:center;
  64 +}
  65 +
  66 +#projects-list .project {
  67 + height:50px;
  68 +}
  69 +
  70 +#tree-slider .tree-item,
  71 +#projects-list .project,
  72 +#snippets-table .snippet,
  73 +#issues-table .issue{
  74 + cursor:pointer;
  75 +}
  76 +
  77 +.clear {
  78 + clear: both;
  79 +}
  80 +
  81 +
  82 +
  83 +#user_projects_limit{
  84 + width: 60px;
  85 +}
  86 +
  87 +.handle:hover{
  88 + cursor: move;
  89 +}
  90 +
  91 +.project-refs-form {
  92 + span {
  93 + background: none !important;
  94 + position:static !important;
  95 + width:auto !important;
  96 + height: auto !important;
  97 + }
  98 +}
  99 +
  100 +.project-refs-select {
  101 + width:200px;
  102 +}
  103 +
  104 +.filter .left { margin-right:15px; }
  105 +
  106 +body table .commit {
  107 + a.tree-commit-link {
  108 + color:#444;
  109 + &:hover {
  110 + text-decoration:underline;
  111 + }
  112 + }
  113 +}
  114 +
  115 +/** NEW PROJECT **/
  116 +.new-project-hodler {
  117 + .icon span { background-position: -31px -70px; }
  118 + td { border-bottom: 1px solid #DEE2E3; }
  119 +}
  120 +
  121 +/** Feed entry **/
  122 +.commit,
  123 +.snippet,
  124 +.message {
  125 + .title {
  126 + color:#666;
  127 + a { color:#666 !important; }
  128 + p { margin-top:0px; }
  129 + }
  130 + .author { color: #999 }
  131 +}
  132 +
  133 +/** JQuery UI **/
  134 +.ui-autocomplete { @include round-borders-all(5px); }
  135 +.ui-menu-item { cursor: pointer }
  136 +.ui-selectmenu{
  137 + @include round-borders-all(4px);
  138 + margin-right:10px;
  139 + font-size:1.5em;
  140 + height:auto;
  141 + font-weight:bold;
  142 + .ui-selectmenu-status {
  143 + padding:3px 10px;
  144 + }
  145 +}
  146 +
  147 +#holder {
  148 + background:#FAFAFA;
  149 + border: 1px solid #EEE;
  150 + cursor: move;
  151 + height: 70%;
  152 + overflow: hidden;
  153 +}
  154 +
  155 +/* Project Dashboard Page */
  156 +html, body { height: 100%; }
  157 +
  158 +.news-feed h2{float: left;}
  159 +.news-feed .project-updates {margin-bottom: 20px; display: block; width: 100%;}
  160 +.news-feed .project-updates .data{ padding: 0}
  161 +.news-feed .project-updates a.project-update {padding: 10px; border-bottom: 1px solid #eee; overflow: hidden; display: block;}
  162 +.news-feed .project-updates a.project-update:last-child{border-bottom: 0}
  163 +.news-feed .project-updates a.project-update img{float: left; margin-right: 10px;}
  164 +.news-feed .project-updates a.project-update span.update-title, .dashboard-page .news-feed .project-updates li a span.update-author{display: block;}
  165 +.news-feed .project-updates a.project-update span.update-title{margin-bottom: 10px}
  166 +.news-feed .project-updates a.project-update span.update-author{color: #999; font-weight: normal; font-style: italic;}
  167 +.news-feed .project-updates a.project-update span.update-author strong{font-weight: bold; font-style: normal;}
  168 +/* eo Dashboard Page */
  169 +
  170 +
  171 +/** Update entry **/
  172 +.update-data { padding: 0 }
  173 +.update-data { width:100%; }
  174 +.update-data.ui-box .data { padding:0; }
  175 +a.update-item {padding: 10px; border-bottom: 1px solid #eee; overflow: hidden; display: block;}
  176 +a.update-item:last-child{border-bottom: 0}
  177 +a.update-item img{float: left; margin-right: 10px;}
  178 +a.update-item span.update-title, .dashboard-page .news-feed .project-updates li a span.update-author{display: block;}
  179 +a.update-item span.update-title{margin-bottom: 10px}
  180 +a.update-item span.update-author{color: #999; font-weight: normal; font-style: italic;}
  181 +a.update-item span.update-author strong{font-weight: bold; font-style: normal;}
  182 +
  183 +
  184 +body .team_member_new .span-6, .team_member_edit .span-6{ padding:10px 0; }
  185 +
  186 +body.projects-page input.text.git-url.project_list_url { width:165px; }
  187 +
  188 +
  189 +body table.no-borders th {
  190 + background:none;
  191 + border-bottom:1px solid #CCC;
  192 + color:#333;
  193 +}
  194 +
  195 +body table.no-borders tr,
  196 +body table.no-borders td{
  197 + border:none;
  198 +}
  199 +
  200 +.ajax-tab-loading {
  201 + padding:40px;
  202 + display:none;
  203 +}
  204 +
  205 +#tree-content-holder { float:left; width:100%; }
  206 +
  207 +#tree-readme-holder {
  208 + float:left;
  209 + width:100%;
  210 +
  211 + .readme {
  212 + @include round-borders-all(4px);
  213 + padding: 4px 15px;
  214 + background:#F7F7F7;
  215 + }
  216 +}
  217 +
  218 +
  219 +
  220 +/* Commit Page */
  221 +.entity-info {float: right;}
  222 +.entity-button{
  223 + background-image: -webkit-gradient(linear, 0 0, 0 26, color-stop(0.192, #fff), to(#f4f4f4));
  224 + background-image: -webkit-linear-gradient(#fff 19.2%, #f4f4f4);
  225 + background-image: -moz-linear-gradient(#fff 19.2%, #f4f4f4);
  226 + background-image: -o-linear-gradient(#fff 19.2%, #f4f4f4);
  227 + box-shadow: 0 -1px 0 white inset;
  228 + display: block;
  229 + border: 1px solid #eee;
  230 + border-radius: 5px;
  231 + margin-bottom: 2px;
  232 + position: relative;
  233 + padding: 4px 10px;
  234 + font-size: 11px;
  235 + padding-right: 20px;
  236 +}
  237 +
  238 +.entity-button i{
  239 + background: url('images.png') no-repeat -138px -27px;
  240 + width: 6px;
  241 + height: 9px;
  242 + float: right;
  243 + position: absolute;
  244 + top: 6px;
  245 + right: 5px;
  246 +}
  247 +.box-arrow{float: right; background: #E3E5EA; padding: 10px; border-radius: 5px; margin-top: 2px; text-shadow: none; color: #999; margin: 1.5em 0;}
  248 +
  249 +h4.dash-tabs {
  250 + margin: 0;
  251 + border-bottom: 1px solid #ccc;
  252 + padding: 10px 10px;
  253 + font-size: 11px;
  254 + padding-left:20px;
  255 + font-weight: bold; text-transform: uppercase;
  256 + background: #F7F7F7;
  257 + margin-bottom:20px;
  258 + height:13px;
  259 +
  260 +}
  261 +
  262 +.dash-button {
  263 + border-right: 1px solid #ddd;
  264 + background:none;
  265 + padding: 10px 15px;
  266 + float:left;
  267 + position:relative;
  268 + top:-10px;
  269 + left:0px;
  270 + height:13px;
  271 +
  272 + &:first-child {
  273 + border-left: 1px solid #ddd;
  274 + }
  275 + &.active {
  276 + background: #eaeaea;
  277 + }
  278 +}
  279 +
  280 +
  281 +.dashboard-loader {
  282 + float:right;
  283 + margin-right:30px;
  284 + display:none;
  285 +}
  286 +
  287 +
  288 +.merge-tabs {
  289 + margin: 0;
  290 + border: 1px solid #ccc;
  291 + padding: 5px;
  292 + font-size: 12px;
  293 + background: #F7F7F7;
  294 + margin-bottom:20px;
  295 + height:26px;
  296 +
  297 + -moz-border-radius: 4px;
  298 + -webkit-border-radius: 4px;
  299 + border-radius: 4px;
  300 +
  301 + .tab {
  302 + font-weight: bold;
  303 + border-right: 1px solid #ddd;
  304 + background:none;
  305 + padding: 10px;
  306 + min-width:60px;
  307 + float:left;
  308 + position:relative;
  309 + top:-5px;
  310 + left:-5px;
  311 + height:16px;
  312 + padding-left:34px;
  313 +
  314 + span {
  315 + width: 20px;
  316 + height: 20px;
  317 + display: inline-block;
  318 + position: absolute;
  319 + left: 8px;
  320 + top: 8px;
  321 + }
  322 +
  323 + &.active {
  324 + background: #eaeaea;
  325 + }
  326 + }
  327 +}
  328 +.merge-tabs.repository .tab span{ background: url("images.png") no-repeat -38px -77px; }
  329 +.activities-tab span { background: url("images.png") no-repeat -161px -1px; }
  330 +.stat-tab span,
  331 +.team-tab span,
  332 +.snippets-tab span { background: url("images.png") no-repeat -38px -77px; }
  333 +.files-tab span { background: url("images.png") no-repeat -112px -23px; }
  334 +
  335 +.merge-notes-tab span { background: url("images.png") no-repeat -161px -1px; }
  336 +.merge-commits-tab span { background: url("images.png") no-repeat -86px 1px; }
  337 +.merge-diffs-tab span { background: url("images.png") no-repeat -118px 1px; }
  338 +.merge-tabs .dashboard-loader { padding:8px; }
  339 +
  340 +.user-mention {
  341 + color: #2FA0BB;
  342 + font-weight: bold;
  343 +}
  344 +
  345 +.author {
  346 + color: #999;
  347 +}
  348 +
  349 +
  350 +
  351 +
  352 +.dark_scheme_box {
  353 + padding:20px 0;
  354 +
  355 + label {
  356 + float:left;
  357 + box-shadow: 0 0px 5px rgba(0,0,0,.3);
  358 +
  359 + img {
  360 + }
  361 + }
  362 +}
  363 +
  364 +a.project-update.titled {
  365 + position: relative;
  366 + padding-left: 235px !important;
  367 +
  368 + .title-block {
  369 + padding: 10px;
  370 + width: 205px;
  371 + position: absolute;
  372 + left: 0;
  373 + top: 0;
  374 + }
  375 +}
  376 +
  377 +.add_new {
  378 + float: right;
  379 + background: #A6B807;
  380 + color: white;
  381 + padding: 4px 10px;
  382 + @include round-borders-all(4px);
  383 + font-size:11px;
  384 + margin: 10px 0;
  385 +}
app/views/dashboard/_issues_feed.html.haml
@@ -4,8 +4,8 @@ @@ -4,8 +4,8 @@
4 .data 4 .data
5 - @issues.each do |update| 5 - @issues.each do |update|
6 %a.project-update{:href => dashboard_feed_path(update.project, update)} 6 %a.project-update{:href => dashboard_feed_path(update.project, update)}
7 - %strong.issue-number= "##{update.id}"  
8 - %span.update-title 7 + .avatar= image_tag gravatar_icon(update.assignee_email), :class => "avatar", :width => 32
  8 + %div
9 = truncate update.title, :length => 35 9 = truncate update.title, :length => 35
10 .right= truncate update.project.name 10 .right= truncate update.project.name
11 %span.update-author 11 %span.update-author
@@ -15,9 +15,9 @@ @@ -15,9 +15,9 @@
15 ago 15 ago
16 .right 16 .right
17 - if update.critical 17 - if update.critical
18 - %span.tag.high critical 18 + %span.label.important critical
19 - if update.today? 19 - if update.today?
20 - %span.tag.today today 20 + %span.label.new today
21 21
22 - else 22 - else
23 %h2 23 %h2
app/views/dashboard/_projects_feed.html.haml
@@ -2,19 +2,18 @@ @@ -2,19 +2,18 @@
2 - @active_projects.first(3).each do |project| 2 - @active_projects.first(3).each do |project|
3 .project-box.project-updates.ui-box.ui-box-small.ui-box-big 3 .project-box.project-updates.ui-box.ui-box-small.ui-box-big
4 = link_to project do 4 = link_to project do
5 - %h3= project.name  
6 - .data  
7 - - project.updates(3).each do |update|  
8 - %a.project-update{:href => dashboard_feed_path(project, update)}  
9 - = image_tag gravatar_icon(update.author_email), :class => "left", :width => 40  
10 - %span.update-title  
11 - = dashboard_feed_title(update)  
12 - %span.update-author  
13 - %strong= update.author_name  
14 - authored  
15 - = time_ago_in_words(update.created_at)  
16 - ago  
17 - .right  
18 - - klass = update.class.to_s.split("::").last.downcase  
19 - %span.tag{ :class => klass }= klass 5 + %h4= project.name
  6 + - project.updates(3).each do |update|
  7 + %a.project-update{:href => dashboard_feed_path(project, update)}
  8 + = image_tag gravatar_icon(update.author_email), :class => "avatar", :width => 32
  9 + %div
  10 + = dashboard_feed_title(update)
  11 + %span.update-author
  12 + %strong= update.author_name
  13 + authored
  14 + = time_ago_in_words(update.created_at)
  15 + ago
  16 + .right
  17 + - klass = update.class.to_s.split("::").last.downcase
  18 + %span.tag{ :class => klass }= klass
20 19
app/views/dashboard/_sidebar.html.haml
@@ -1,16 +0,0 @@ @@ -1,16 +0,0 @@
1 -%aside  
2 - %h4  
3 - Your Projects  
4 - - if current_user.can_create_project?  
5 - = link_to new_project_path, :class => "btn small" do  
6 - New Project  
7 - %ol.project-list  
8 - - @projects.each do |project|  
9 - %li  
10 - %a{:href => project_path(project)}  
11 - -#%span.arrow →  
12 - %span.project-name= project.name  
13 - %span.time  
14 - %strong Last activity:  
15 - = project.last_activity_date_cached ? time_ago_in_words(project.last_activity_date_cached) + " ago" : "Never"  
16 -  
app/views/dashboard/index.html.haml
  1 +%h3 Activities
  2 +%hr
1 .news-feed= render "dashboard/projects_feed" 3 .news-feed= render "dashboard/projects_feed"
app/views/dashboard/issues.html.haml
  1 +%h3
  2 + Issues
  3 + %small ( authored or assigned to you )
  4 +
  5 +%hr
1 .news-feed= render "dashboard/issues_feed" 6 .news-feed= render "dashboard/issues_feed"
app/views/dashboard/merge_requests.html.haml
  1 +%h3 Merge Requests
  2 +%hr
1 .news-feed= render "dashboard/merge_requests_feed" 3 .news-feed= render "dashboard/merge_requests_feed"
app/views/layouts/_app_side.html.haml 0 → 100644
@@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
  1 +.fixed
  2 + %aside
  3 + = link_to "Activities", dashboard_path, :class => "#{"active" if current_page?(dashboard_path) || current_page?(root_path) }"
  4 + = link_to "Projects", projects_path, :class => "#{"active" if current_page?(projects_path)}"
  5 + = link_to "Issues", dashboard_issues_path, :class => "#{"active" if current_page?(dashboard_issues_path)}", :id => "issues_slide"
  6 + = link_to "Requests", dashboard_merge_requests_path, :class => "#{"active" if current_page?(dashboard_merge_requests_path)}", :id => "merge_requests_slide"
  7 + - if current_user.is_admin?
  8 + = link_to admin_root_path, :class => "admin", :title => "Admin" do
  9 + Admin
  10 + = link_to "Help", help_path, :class => "#{"active" if controller.controller_name == "help"}"
app/views/layouts/_head_panel.html.haml
@@ -16,18 +16,6 @@ @@ -16,18 +16,6 @@
16 = render :partial => "projects/refs", :locals => { :destination => controller.controller_name == "commits" ? "commits" : "tree" } 16 = render :partial => "projects/refs", :locals => { :destination => controller.controller_name == "commits" ? "commits" : "tree" }
17 = yield :rss_icon 17 = yield :rss_icon
18 18
19 - - else  
20 - .dashboard_links  
21 - = link_to "Activities", dashboard_path, :class => "#{"active" if current_page?(dashboard_path) || current_page?(root_path) }"  
22 - = link_to "Projects", projects_path, :class => "#{"active" if current_page?(projects_path)}"  
23 - = link_to "Issues", dashboard_issues_path, :class => "#{"active" if current_page?(dashboard_issues_path)}", :id => "issues_slide"  
24 - = link_to "Requests", dashboard_merge_requests_path, :class => "#{"active" if current_page?(dashboard_merge_requests_path)}", :id => "merge_requests_slide"  
25 - - if current_user.is_admin?  
26 - = link_to admin_root_path, :class => "admin", :title => "Admin" do  
27 - Admin  
28 - = link_to "Help", help_path, :class => "#{"active" if controller.controller_name == "help"}"  
29 - .search  
30 - = text_field_tag "search", nil, :placeholder => "Search", :class => "search-input"  
31 19
32 .account-box 20 .account-box
33 = link_to profile_path, :class => "pic" do 21 = link_to profile_path, :class => "pic" do
@@ -36,16 +24,3 @@ @@ -36,16 +24,3 @@
36 = link_to profile_path, :class => "username" do 24 = link_to profile_path, :class => "username" do
37 My profile 25 My profile
38 = link_to 'Logout', destroy_user_session_path, :class => "logout", :method => :delete 26 = link_to 'Logout', destroy_user_session_path, :class => "logout", :method => :delete
39 - - if current_user  
40 - = javascript_tag do  
41 - $(function(){  
42 - $("#search").autocomplete({  
43 - source: #{raw search_autocomplete_source},  
44 - select: function(event, ui) { location.href = ui.item.url }  
45 - });  
46 - });  
47 -  
48 - -#- if current_user.require_ssh_key?  
49 - #no_ssh_key_defined.big-message.error  
50 - %p  
51 - No SSH Key is defined. You won't be able to use any Git command!. Click #{link_to( 'here', keys_path )} to add one!  
app/views/layouts/_projects_side.html.haml 0 → 100644
@@ -0,0 +1,35 @@ @@ -0,0 +1,35 @@
  1 +%aside.projects
  2 + - if current_user.can_create_project?
  3 + .alert-message.block-message.info
  4 + You can create at least
  5 + = current_user.projects_limit
  6 + projects. Click on button to add a new one
  7 + = link_to new_project_path, :class => "btn small" do
  8 + New Project
  9 +
  10 + %h4
  11 + Recent Projects:
  12 + %ul
  13 + - current_user.projects.order("id DESC").limit(5).each do |project|
  14 + %li
  15 + = link_to project_path(project) do
  16 + = project.name
  17 +
  18 + %h4
  19 + Recent Issues:
  20 + %ul
  21 + - current_user.assigned_issues.order("id DESC").limit(5).each do |issue|
  22 + %li
  23 + = link_to project_issue_path(issue.project, issue) do
  24 + = truncate issue.title
  25 +
  26 +
  27 + %h4
  28 + Recent Requests:
  29 + %ul
  30 + - current_user.assigned_merge_requests.order("id DESC").limit(5).each do |issue|
  31 + %li
  32 + = link_to project_merge_request_path(issue.project, issue) do
  33 + = truncate issue.title
  34 +
  35 +
app/views/layouts/admin.html.haml
@@ -11,19 +11,17 @@ @@ -11,19 +11,17 @@
11 = javascript_tag do 11 = javascript_tag do
12 REQ_URI = "#{request.env["REQUEST_URI"]}"; 12 REQ_URI = "#{request.env["REQUEST_URI"]}";
13 REQ_REFFER = "#{request.env["HTTP_REFERER"]}"; 13 REQ_REFFER = "#{request.env["HTTP_REFERER"]}";
14 - %body{ :class => body_class('project-page'), :id => yield(:boyd_id)} 14 + %body.admin
15 = render :partial => "layouts/flash" 15 = render :partial => "layouts/flash"
16 - #container  
17 - = render :partial => "layouts/head_panel"  
18 - .project-container  
19 - .project-sidebar  
20 - .fixed  
21 - %aside  
22 - = link_to "Users", admin_users_path, :class => controller.controller_name == "users" ? "current" : nil  
23 - = link_to "Projects", admin_projects_path, :class => controller.controller_name == "projects" ? "current" : nil  
24 - = link_to "Teams", admin_team_members_path, :class => controller.controller_name == "team_members" ? "current" : nil  
25 - = link_to "Emails", admin_emails_path, :class => controller.controller_name == "mailer" ? "current" : nil  
26 - = link_to "Resque", "/info/resque" 16 + = render :partial => "layouts/head_panel"
  17 + .container-fluid
  18 + .sidebar
  19 + .fixed
  20 + %aside
  21 + = link_to "Users", admin_users_path, :class => controller.controller_name == "users" ? "current" : nil
  22 + = link_to "Projects", admin_projects_path, :class => controller.controller_name == "projects" ? "current" : nil
  23 + = link_to "Teams", admin_team_members_path, :class => controller.controller_name == "team_members" ? "current" : nil
  24 + = link_to "Emails", admin_emails_path, :class => controller.controller_name == "mailer" ? "current" : nil
  25 + = link_to "Resque", "/info/resque"
27 26
28 - .project-content  
29 - = yield 27 + .content= yield
app/views/layouts/application.html.haml
@@ -12,5 +12,9 @@ @@ -12,5 +12,9 @@
12 = render :partial => "layouts/flash" 12 = render :partial => "layouts/flash"
13 = render :partial => "layouts/head_panel" 13 = render :partial => "layouts/head_panel"
14 .container-fluid 14 .container-fluid
15 - .sidebar= render :partial => "dashboard/sidebar"  
16 - .content= yield 15 + .sidebar
  16 + = render :partial => "layouts/app_side"
  17 + .content
  18 + .row
  19 + .span10= yield
  20 + .span4= render "layouts/projects_side"
app/views/projects/_form.html.haml
1 = form_for(@project, :remote => true) do |f| 1 = form_for(@project, :remote => true) do |f|
2 - %div.form_content  
3 - - unless @project.new_record?  
4 - %h2.icon  
5 - %span  
6 - = @project.name  
7 - .clear  
8 - - if @project.errors.any?  
9 - %ul.errors_holder 2 + - if @project.errors.any?
  3 + .alert-message.block-message.error
  4 + %ul
10 - @project.errors.full_messages.each do |msg| 5 - @project.errors.full_messages.each do |msg|
11 %li= msg 6 %li= msg
12 - %table  
13 - %tr  
14 - %td= f.label :name  
15 - %td= f.text_field :name, :placeholder => "Example Project"  
16 - %tr  
17 - %td  
18 - .left= f.label :path  
19 - %cite.right= "git@#{GIT_HOST["host"]}:"  
20 - %td  
21 - = f.text_field :path, :placeholder => "example_project", :disabled => !@project.new_record?  
22 - %tr  
23 - %td  
24 - .left= f.label :code  
25 - %cite.right= "http://#{GIT_HOST["host"]}/"  
26 - %td= f.text_field :code, :placeholder => "example" 7 + .clearfix
  8 + = f.label :name
  9 + .input= f.text_field :name, :placeholder => "Example Project"
  10 + .clearfix
  11 + = f.label :path do
  12 + Path
  13 + %cite= "git@#{GIT_HOST["host"]}:"
  14 + .input= f.text_field :path, :placeholder => "example_project", :disabled => !@project.new_record?
  15 + .clearfix
  16 + = f.label :code do
  17 + Code
  18 + %cite= "http://#{GIT_HOST["host"]}/"
  19 + .input= f.text_field :code, :placeholder => "example"
27 20
28 - - unless @project.new_record? || @project.heads.empty?  
29 - %tr  
30 - %td= f.label :default_branch, "Default Branch"  
31 - %td= f.select(:default_branch, @project.heads.map(&:name), {}, :style => "width:300px;") 21 + - unless @project.new_record? || @project.heads.empty?
  22 + .clearfix
  23 + = f.label :default_branch, "Default Branch"
  24 + .input= f.select(:default_branch, @project.heads.map(&:name), {}, :style => "width:300px;")
32 25
33 - -#%tr  
34 - %td= f.label :tag_list  
35 - %td= f.text_area :tag_list, :placeholder => "project tags", :style => "height:50px", :id => :tag_field  
36 - %tr  
37 - %td= f.label :description  
38 - %td= f.text_area :description, :placeholder => "project description", :style => "height:50px" 26 +
  27 + .clearfix
  28 + = f.label :description
  29 + .input= f.text_area :description, :placeholder => "project description", :style => "height:50px"
39 30
40 - %br  
41 - %div{ :class => "ajax_loader", :style => "display:none;height:200px;"}  
42 - %center  
43 - = image_tag "ajax-loader.gif", :class => "append-bottom"  
44 - - if @project.new_record?  
45 - %h3.prepend-top Creating project & repository. Please wait for few minutes  
46 - - else  
47 - %h3.prepend-top Updating project & repository. Please wait for few minutes 31 + %br
48 32
49 .merge-tabs 33 .merge-tabs
50 = f.submit 'Save', :class => "btn primary" 34 = f.submit 'Save', :class => "btn primary"
51   35  
52 - unless @project.new_record? 36 - unless @project.new_record?
53 .right 37 .right
54 - = link_to 'Remove', @project, :confirm => 'Are you sure?', :method => :delete, :class => "red-button"  
55 -  
56 -  
57 -:javascript  
58 - $(function(){  
59 - $('.new_project, .edit_project').bind('ajax:before', function() {  
60 - $(this).find(".form_content").hide();  
61 - $('.ajax_loader').show();  
62 - });  
63 -  
64 - taggifyForm();  
65 -  
66 - $('form #project_default_branch').chosen();  
67 - }) 38 + = link_to 'Remove', @project, :confirm => 'Are you sure?', :method => :delete, :class => "btn"
app/views/projects/_tile.html.haml
1 -- @projects.in_groups_of(3, false) do |projects|  
2 - - projects.each_with_index do |project, i|  
3 - %div.grid_1.projects_selector  
4 - %div{ :class => "project-box ui-box ui-box-big" } 1 +- @projects.in_groups_of(2, false) do |projects|
  2 + .row
  3 + - projects.each_with_index do |project, i|
  4 + .span4.well
5 = link_to project_path(project) do 5 = link_to project_path(project) do
6 %h3= truncate(project.name, :length => 20) 6 %h3= truncate(project.name, :length => 20)
7 - .data  
8 - %p.title.repository.git_url_wrapper  
9 - %span Repository:  
10 - %input{ :value => project.url_to_repo, :class => ['git-url', 'one_click_select', 'text', 'project_list_url'], :readonly => 'readonly' }  
11 - %p.title.activity  
12 - %span Last Activity:  
13 - - if project.last_activity_date_cached  
14 - = project.last_activity_date_cached.stamp("Aug 24, 2011")  
15 - - else  
16 - Never 7 + %p.title.repository.git_url_wrapper
  8 + %input{ :value => project.url_to_repo, :class => ['git-url', 'one_click_select', 'text', 'project_list_url'], :readonly => 'readonly' }
17 9
18 - .buttons  
19 - %a.browse-code.button.yellow{:href => tree_project_ref_path(project, project.root_ref)} Browse code  
20 - %a.commits.button.green{:href => project_commits_path(project)} Commits 10 + %a.btn{:href => tree_project_ref_path(project, project.root_ref)} Browse code
  11 + %a.btn{:href => project_commits_path(project)} Commits
app/views/projects/create.js.haml
@@ -4,3 +4,4 @@ @@ -4,3 +4,4 @@
4 - else 4 - else
5 :plain 5 :plain
6 $("#new_project").replaceWith("#{escape_javascript(render('form'))}"); 6 $("#new_project").replaceWith("#{escape_javascript(render('form'))}");
  7 + $('.ajax_loader').hide();
app/views/projects/index.html.haml
1 -- content_for(:body_class, "projects-page")  
2 -.container_4  
3 - .grid_4  
4 - - if current_user.can_create_project?  
5 - %a.grey-button.right{:href => new_project_path} Create new project  
6 - %h2.icon  
7 - %span  
8 - Projects 1 +%h3 Projects
  2 +%hr
  3 +- unless @projects.empty?
  4 + %div.tile= render "tile"
9 5
10 - %div.clear  
11 - - unless @projects.empty?  
12 - %div{:class => "tile"}  
13 - = render "tile" 6 + -# If projects requris paging
  7 + -# We add ajax loader & init script
  8 + - if @projects.count == @limit
  9 + .loading{ :style => "display:none;"}
  10 + %center= image_tag "ajax-loader.gif"
14 11
15 - -# If projects requris paging  
16 - -# We add ajax loader & init script  
17 - - if @projects.count == @limit  
18 - .clear  
19 - .loading{ :style => "display:none;"}  
20 - %center= image_tag "ajax-loader.gif"  
21 -  
22 - :javascript  
23 - $(function(){  
24 - ProjectsList.init(16);  
25 - });  
26 - - else  
27 - %center.prepend-top  
28 - %h2  
29 - %cite Nothing here 12 + :javascript
  13 + $(function(){
  14 + ProjectsList.init(16);
  15 + });
  16 +- else
  17 + %h2 Nothing here
app/views/projects/new.html.haml
1 -- content_for(:body_class, "new-project-page")  
2 -- content_for(:page_title) do  
3 - .new-project-hodler  
4 - .container  
5 - %h2.icon  
6 - %span  
7 - New Project  
8 -  
9 - %div.clear  
10 - = render 'form' 1 +%h3 New Project
  2 +%hr
  3 += render 'form'
  4 +%div{ :class => "ajax_loader", :style => "display:none;height:200px;"}
  5 + %center
  6 + = image_tag "ajax-loader.gif", :class => "append-bottom"
  7 + %h3.prepend-top Creating project & repository. Please wait for few minutes
11 8
12 :javascript 9 :javascript
13 $(function(){ 10 $(function(){
14 - $("#project_name").change(function(){ 11 + $("#project_name").live("change", function(){
15 var slug = slugify($(this).val()); 12 var slug = slugify($(this).val());
16 $("#project_code").val(slug); 13 $("#project_code").val(slug);
17 $("#project_path").val(slug); 14 $("#project_path").val(slug);
@@ -21,3 +18,11 @@ @@ -21,3 +18,11 @@
21 function slugify(text) { 18 function slugify(text) {
22 return text.replace(/[^-a-zA-Z0-9]+/g, '_').toLowerCase(); 19 return text.replace(/[^-a-zA-Z0-9]+/g, '_').toLowerCase();
23 } 20 }
  21 +
  22 + $(function(){
  23 + $('.new_project').live('ajax:before', function() {
  24 + $(this).hide();
  25 + $('.ajax_loader').show();
  26 + });
  27 + $('form #project_default_branch').chosen();
  28 + })
app/views/projects/update.js.haml
@@ -4,3 +4,4 @@ @@ -4,3 +4,4 @@
4 - else 4 - else
5 :plain 5 :plain
6 $(".edit_project").replaceWith("#{escape_javascript(render('form'))}"); 6 $(".edit_project").replaceWith("#{escape_javascript(render('form'))}");
  7 + $('.ajax_loader').hide();
spec/requests/merge_requests_spec.rb
@@ -42,7 +42,7 @@ describe "MergeRequests" do @@ -42,7 +42,7 @@ describe "MergeRequests" do
42 42
43 it { should have_content(@merge_request.title[0..10]) } 43 it { should have_content(@merge_request.title[0..10]) }
44 it "Show page should inform user that merge request closed" do 44 it "Show page should inform user that merge request closed" do
45 - within ".merge-tabs" do 45 + within ".tabs" do
46 page.should have_content "Reopen" 46 page.should have_content "Reopen"
47 end 47 end
48 end 48 end