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 105 border-right: 1px solid $border_color;
106 106 height:100%;
107 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 123 .container-fluid > .content {
... ... @@ -112,6 +125,17 @@ $blue_link: "#2fa0bb";
112 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 139 @import "reset_bootstrap.scss";
116 140 @import "top_panel.scss";
117 141 @import "projects.css.scss";
... ...
app/assets/stylesheets/projects.css.scss
1 1 .git_url_wrapper {
2 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 4 .file_stats {
22 5 span {
23 6 img {
... ...
app/assets/stylesheets/projects.css.scss.bak 0 → 100644
... ... @@ -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 @@
  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 4 .data
5 5 - @issues.each do |update|
6 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 9 = truncate update.title, :length => 35
10 10 .right= truncate update.project.name
11 11 %span.update-author
... ... @@ -15,9 +15,9 @@
15 15 ago
16 16 .right
17 17 - if update.critical
18   - %span.tag.high critical
  18 + %span.label.important critical
19 19 - if update.today?
20   - %span.tag.today today
  20 + %span.label.new today
21 21  
22 22 - else
23 23 %h2
... ...
app/views/dashboard/_projects_feed.html.haml
... ... @@ -2,19 +2,18 @@
2 2 - @active_projects.first(3).each do |project|
3 3 .project-box.project-updates.ui-box.ui-box-small.ui-box-big
4 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   -%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 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 6 .news-feed= render "dashboard/issues_feed"
... ...
app/views/dashboard/merge_requests.html.haml
  1 +%h3 Merge Requests
  2 +%hr
1 3 .news-feed= render "dashboard/merge_requests_feed"
... ...
app/views/layouts/_app_side.html.haml 0 → 100644
... ... @@ -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 16 = render :partial => "projects/refs", :locals => { :destination => controller.controller_name == "commits" ? "commits" : "tree" }
17 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 20 .account-box
33 21 = link_to profile_path, :class => "pic" do
... ... @@ -36,16 +24,3 @@
36 24 = link_to profile_path, :class => "username" do
37 25 My profile
38 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 @@
  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 11 = javascript_tag do
12 12 REQ_URI = "#{request.env["REQUEST_URI"]}";
13 13 REQ_REFFER = "#{request.env["HTTP_REFERER"]}";
14   - %body{ :class => body_class('project-page'), :id => yield(:boyd_id)}
  14 + %body.admin
15 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 12 = render :partial => "layouts/flash"
13 13 = render :partial => "layouts/head_panel"
14 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 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 5 - @project.errors.full_messages.each do |msg|
11 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 33 .merge-tabs
50 34 = f.submit 'Save', :class => "btn primary"
51 35  
52 36 - unless @project.new_record?
53 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 5 = link_to project_path(project) do
6 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 4 - else
5 5 :plain
6 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 9 :javascript
13 10 $(function(){
14   - $("#project_name").change(function(){
  11 + $("#project_name").live("change", function(){
15 12 var slug = slugify($(this).val());
16 13 $("#project_code").val(slug);
17 14 $("#project_path").val(slug);
... ... @@ -21,3 +18,11 @@
21 18 function slugify(text) {
22 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 4 - else
5 5 :plain
6 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 42  
43 43 it { should have_content(@merge_request.title[0..10]) }
44 44 it "Show page should inform user that merge request closed" do
45   - within ".merge-tabs" do
  45 + within ".tabs" do
46 46 page.should have_content "Reopen"
47 47 end
48 48 end
... ...