Commit 8ebfae9a0770ce1ba5afa121a484f70ab9ce9110

Authored by Dmitriy Zaporozhets
2 parents 6572d96b b51252e6

Merge branch 'bootstrap'

Conflicts:
	Gemfile
	app/views/commits/_commits.html.haml
	app/views/projects/empty.html.haml
Showing 127 changed files with 2431 additions and 2958 deletions   Show diff stats

Too many changes.

To preserve performance only 100 of 127 files displayed.

Gemfile
... ... @@ -29,6 +29,7 @@ gem "httparty"
29 29 gem "charlock_holmes"
30 30 gem "foreman"
31 31 gem "omniauth-ldap"
  32 +gem 'bootstrap-sass'
32 33  
33 34 group :assets do
34 35 gem "sass-rails", "~> 3.1.0"
... ...
Gemfile.lock
... ... @@ -67,6 +67,8 @@ GEM
67 67 awesome_print (0.4.0)
68 68 bcrypt-ruby (3.0.1)
69 69 blankslate (2.1.2.4)
  70 + bootstrap-sass (1.4.4)
  71 + sass-rails (~> 3.1)
70 72 builder (3.0.0)
71 73 capybara (1.1.2)
72 74 mime-types (>= 1.16)
... ... @@ -226,12 +228,11 @@ GEM
226 228 blankslate (>= 2.1.2.3)
227 229 ffi (~> 1.0.7)
228 230 rubyzip (0.9.4)
229   - sass (3.1.10)
230   - sass-rails (3.1.4)
  231 + sass (3.1.12)
  232 + sass-rails (3.1.5)
231 233 actionpack (~> 3.1.0)
232 234 railties (~> 3.1.0)
233   - sass (>= 3.1.4)
234   - sprockets (~> 2.0.0)
  235 + sass (~> 3.1.10)
235 236 tilt (~> 1.3.2)
236 237 seed-fu (2.1.0)
237 238 activerecord (~> 3.1.0)
... ... @@ -299,6 +300,7 @@ DEPENDENCIES
299 300 autotest
300 301 autotest-rails
301 302 awesome_print
  303 + bootstrap-sass
302 304 capybara
303 305 carrierwave
304 306 charlock_holmes
... ...
app/assets/javascripts/issues.js
1 1 function switchToNewIssue(form){
2   - $("#issues-table-holder").hide("slide", { direction: "left" }, 150, function(){
3   - $(".project-content").append(form);
  2 + $(".issues_content").hide("fade", { direction: "left" }, 150, function(){
  3 + $(".issues_content").after(form);
4 4 $('select#issue_assignee_id').chosen();
5   - $("#new_issue_dialog").show("slide", { direction: "right" }, 150);
  5 + $("#new_issue_dialog").show("fade", { direction: "right" }, 150);
6 6 $('.top-tabs .add_new').hide();
7 7 });
8 8 }
9 9  
10 10 function switchToEditIssue(form){
11   - $("#issues-table-holder").hide("slide", { direction: "left" }, 150, function(){
12   - $(".project-content").append(form);
  11 + $(".issues_content").hide("fade", { direction: "left" }, 150, function(){
  12 + $(".issues_content").after(form);
13 13 $('select#issue_assignee_id').chosen();
14   - $("#edit_issue_dialog").show("slide", { direction: "right" }, 150);
15   - $('.top-tabs .add_new').hide();
  14 + $("#edit_issue_dialog").show("fade", { direction: "right" }, 150);
  15 + $('.add_new').hide();
16 16 });
17 17 }
18 18  
... ... @@ -25,11 +25,11 @@ function switchFromEditIssue(){
25 25 }
26 26  
27 27 function backToIssues(){
28   - $("#edit_issue_dialog, #new_issue_dialog").hide("slide", { direction: "right" }, 150, function(){
29   - $("#issues-table-holder").show("slide", { direction: "left" }, 150, function() {
  28 + $("#edit_issue_dialog, #new_issue_dialog").hide("fade", { direction: "right" }, 150, function(){
  29 + $(".issues_content").show("fade", { direction: "left" }, 150, function() {
30 30 $("#edit_issue_dialog").remove();
31 31 $("#new_issue_dialog").remove();
32   - $('.top-tabs .add_new').show();
  32 + $('.add_new').show();
33 33 });
34 34 });
35 35 }
... ...
app/assets/javascripts/merge_requests.js
... ... @@ -4,17 +4,17 @@ var MergeRequest = {
4 4  
5 5 init:
6 6 function() {
7   - $(".merge-tabs a").live("click", function() {
8   - $(".merge-tabs a").removeClass("active");
9   - $(this).addClass("active");
  7 + $(".tabs a").live("click", function() {
  8 + $(".tabs a").parent().removeClass("active");
  9 + $(this).parent().addClass("active");
10 10 });
11 11  
12   - $(".merge-tabs a.merge-notes-tab").live("click", function() {
  12 + $(".tabs a.merge-notes-tab").live("click", function() {
13 13 $(".merge-request-commits, .merge-request-diffs").hide();
14 14 $(".merge-request-notes").show();
15 15 });
16 16  
17   - $(".merge-tabs a.merge-commits-tab").live("click", function() {
  17 + $(".tabs a.merge-commits-tab").live("click", function() {
18 18 if(!MergeRequest.commits_loaded) {
19 19 MergeRequest.loadCommits();
20 20 }
... ... @@ -22,7 +22,7 @@ var MergeRequest = {
22 22 $(".merge-request-commits").show();
23 23 });
24 24  
25   - $(".merge-tabs a.merge-diffs-tab").live("click", function() {
  25 + $(".tabs a.merge-diffs-tab").live("click", function() {
26 26 if(!MergeRequest.diffs_loaded) {
27 27 MergeRequest.loadDiff();
28 28 }
... ...
app/assets/javascripts/tree.js
... ... @@ -5,21 +5,24 @@
5 5 var Tree = {
6 6 init:
7 7 function() {
8   - (new Image).src = "ajax-loader-facebook.gif";
9   -
10   - $('#tree-slider td.tree-item-file-name a, #tree-breadcrumbs a').live("click", function() {
11   - history.pushState({ path: this.path }, '', this.href)
  8 + $('#tree-slider .tree-item-file-name a, .breadcrumb li > a').live("click", function() {
12 9 $("#tree-content-holder").hide("slide", { direction: "left" }, 150)
13 10 })
14 11  
15   - $("#tree-slider tr.tree-item").live('click', function(e){
  12 + $('.project-refs-form').live({
  13 + "ajax:beforeSend": function() {
  14 + $("#tree-content-holder").hide("slide", { direction: "left" }, 150);
  15 + }
  16 + })
  17 +
  18 + $("#tree-slider .tree-item").live('click', function(e){
16 19 if(e.target.nodeName != "A") {
17   - link = $(this).find("td.tree-item-file-name a");
  20 + link = $(this).find(".tree-item-file-name a");
18 21 link.trigger("click");
19 22 }
20 23 });
21 24  
22   - $('#tree-slider td.tree-item-file-name a, #tree-breadcrumbs a').live({
  25 + $('#tree-slider .tree-item-file-name a, .breadcrumb a, .project-refs-form').live({
23 26 "ajax:beforeSend": function() { $('.tree_progress').addClass("loading"); },
24 27 "ajax:complete": function() { $('.tree_progress').removeClass("loading"); }
25 28 });
... ...
app/assets/stylesheets/commits.css.scss
1   -/* Commit Page */
2   -body.project-page.commits-page .commit-info{float: right;}
3   -body.project-page.commits-page .commit-info data{
4   - padding: 4px 10px;
5   - font-size: 11px;
6   -}
7   -body.project-page.commits-page .commit-info data.commit-button{
8   - background-image: -webkit-gradient(linear, 0 0, 0 26, color-stop(0.192, #fff), to(#f4f4f4));
9   - background-image: -webkit-linear-gradient(#fff 19.2%, #f4f4f4);
10   - background-image: -moz-linear-gradient(#fff 19.2%, #f4f4f4);
11   - background-image: -o-linear-gradient(#fff 19.2%, #f4f4f4);
12   - box-shadow: 0 -1px 0 white inset;
13   - display: block;
14   - border: 1px solid #eee;
15   - border-radius: 5px;
16   - margin-bottom: 2px;
17   - position: relative;
18   - padding-right: 20px;
19   -}
  1 +/**
  2 + *
  3 + * COMMIT SHOw
  4 + *
  5 + */
20 6  
21   -body.project-page.commits-page .commit-button i{
22   - background: url('images.png') no-repeat -138px -27px;
23   - width: 6px;
24   - height: 9px;
25   - float: right;
26   - position: absolute;
27   - top: 6px;
28   - right: 5px;
29   -}
30   -body.project-page.commits-page .commits-date {display: block; width: 100%; margin-bottom: 20px}
31   -body.project-page.commits-page .commits-date .data {padding: 0}
32   -body.project-page.commits-page a.commit{padding: 10px; border-bottom: 1px solid #eee; overflow: hidden; display: block;}
33   -body.project-page.commits-page .commits-date a.commit {padding: 10px; border-bottom: none; overflow: hidden; display: block;}
34   -body.project-page.commits-page .commits-date a.commit:last-child{border-bottom: 0}
35   -body.project-page.commits-page .commits-date a.commit img{float: left; margin-right: 10px;}
36   -body.project-page.commits-page .commits-date a.commit span.commit-title{display: block;}
37   -body.project-page.commits-page .commits-date a.commit span.commit-title{margin-bottom: 10px}
38   -body.project-page.commits-page .commits-date a.commit span.commit-author{color: #999; font-weight: normal; font-style: italic;}
39   -body.project-page.commits-page .commits-date a.commit span.commit-author strong{font-weight: bold; font-style: normal;}
40 7  
41   -/* eo Commit Page */
42   -/** Commit diff view **/
43 8 .diff_file {
44 9 border:1px solid #CCC;
45 10 margin-bottom:1em;
... ... @@ -72,6 +37,11 @@ body.project-page.commits-page .commits-date a.commit span.commit-author strong{
72 37 border:none;
73 38 margin:0px;
74 39 padding:0px;
  40 + tr {
  41 + td {
  42 + font-size:12px;
  43 + }
  44 + }
75 45 }
76 46 .old_line, .new_line {
77 47 margin:0px;
... ... @@ -110,14 +80,6 @@ body.project-page.commits-page .commits-date a.commit span.commit-author strong{
110 80 }
111 81 }
112 82  
113   -pre.commit_message {
114   - white-space: pre-wrap;
115   - font-family: "Helvetica", sans-serif;
116   - color: #555;
117   - font-weight:bold;
118   - font-size:15px;
119   -}
120   -
121 83 /** COMMIT BLOCK **/
122 84 .commit-title{display: block;}
123 85 .commit-title{margin-bottom: 10px}
... ... @@ -147,45 +109,28 @@ ul.bordered-list li:last-child { border:none }
147 109 }
148 110 }
149 111  
150   -.per_line_form {
151   - font-family: "Helvetica", sans-serif;
152   - background: #2FA0BB;
153   -
154   - td {
155   - padding:0;
156   - }
157   -
158   - form {
159   - margin:5px;
160   - width: 756px;
161   - border: 1px solid #CCC;
162   - padding: 20px;
163   - background: white;
164   - }
165   -}
166   -
167 112  
168 113 tr.line_notes_row {
169   - font-family: "Helvetica", sans-serif;
170   - &:hover {
171   - background:none;
172   - }
173   - td {
174   - margin:0px;
175   - padding:0px;
176   - border-bottom:1px solid #DEE2E3;
177   -
178   -
179   - ul {
180   - display:block;
181   - list-style:none;
182   - margin:0px;
183   - padding:0px;
  114 + border-bottom:1px solid #DDD;
  115 +}
184 116  
185   - li {
186   - border-top:1px solid #DEE2E3;
187   - padding:10px;
188   - }
189   - }
  117 +/** FLASH **/
  118 +#flash_container {
  119 + height:45px;
  120 + position:fixed;
  121 + z-index:10001;
  122 + top:0px;
  123 + width:100%;
  124 + margin-bottom:15px;
  125 + overflow:hidden;
  126 + background:white;
  127 + cursor:pointer;
  128 + border-bottom:1px solid #777;
  129 +
  130 + h4 {
  131 + color:#444;
  132 + font-size:22px;
  133 + padding-top:5px;
  134 + margin:2px;
190 135 }
191 136 }
... ...
app/assets/stylesheets/common.scss
  1 +@import "bootstrap";
  2 +
  3 +/** GITLAB colors **/
1 4 $text_color:#222;
2 5 $lite_text_color: #666;
3 6 $link_color:#111;
... ... @@ -6,10 +9,13 @@ $active_bg_color:#79C3E0;
6 9 $active_bd_color: #2FA0BB;
7 10 $border_color:#CCC;
8 11 $lite_border_color:#EEE;
9   -$app_width:980px;
  12 +$min_app_width:980px;
  13 +$max_app_width:980px;
10 14 $app_padding:20px;
11 15 $bg_color: #FFF;
12 16 $styled_border_color: #2FA0BB;
  17 +$color: "#4BB8D2";
  18 +$blue_link: "#2fa0bb";
13 19  
14 20 /** MIXINS **/
15 21 @mixin round-borders-bottom($radius) {
... ... @@ -81,36 +87,103 @@ $styled_border_color: #2FA0BB;
81 87 .no-padding {
82 88 padding:0 !important;
83 89 }
  90 +.underlined {
  91 + border-bottom: 1px solid $border_color;
  92 +}
  93 +
  94 +/** LAYOUT **/
  95 +
  96 +.container-fluid {
  97 + min-width:$min_app_width;
  98 + max-width:$max_app_width;
  99 + margin:auto;
  100 + margin-top:51px;
  101 +}
  102 +
  103 +.container-fluid > .sidebar {
  104 + width: 140px;
  105 + border-right: 1px solid $border_color;
  106 + height:100%;
  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 + color:#444;
  121 + }
  122 +}
  123 +
  124 +.container-fluid > .content {
  125 + margin-left: 160px;
  126 + margin-top:20px;
  127 +}
  128 +
  129 +aside.projects,
  130 +aside.project-side
  131 +{
  132 + margin-left: 0;
  133 + padding-left: 20px;
  134 +}
84 135  
85   -/* General */
  136 +img.avatar {
  137 + float:left;
  138 + margin-right:15px;
  139 + width:40px;
  140 + -webkit-border-radius: 4px;
  141 + -moz-border-radius: 4px;
  142 + border-radius: 4px;
  143 +}
86 144  
87   -body.collapsed {
88   - background-color: $bg_color;
  145 +img.lil_av {
  146 + padding-left: 5px;
  147 + position: relative;
  148 + top: 3px;
  149 +}
89 150  
90   - #container{
91   - margin: auto;
92   - margin-top:51px;
93   - width: $app_width;
94   - border-top: 0;
95   - background-color: $bg_color;
  151 +.media-grid {
  152 + h3, h2 , h4 {
  153 + &.media_h {
  154 + padding-left:10px;
  155 + float:left;
  156 + }
96 157 }
97 158 }
98 159  
99   -a {
100   - color: $link_color;
  160 +.wll {
  161 + background-color: #FFF;
  162 + margin-bottom: 10px;
  163 + padding: 5px;
  164 + min-height: 20px;
  165 + border-bottom: 1px solid #eee;
  166 + border-bottom: 1px solid rgba(0, 0, 0, 0.05);
  167 + .author { color: #999; }
  168 + &:last-child { border:none }
  169 + p { padding-top:5px;}
  170 +}
  171 +
  172 +.author_link {
  173 + color: $active_link_color;
101 174 }
102 175  
103   -@import "style.scss";
  176 +@import "reset_bootstrap.scss";
  177 +@import "top_panel.scss";
104 178 @import "projects.css.scss";
105 179 @import "commits.css.scss";
106   -@import "notes.css.scss";
  180 +@import "tree.scss";
  181 +@import "issues.css.scss";
107 182 @import "merge_requests.css.scss";
  183 +@import "notes.css.scss";
  184 +@import "login.scss";
  185 +
  186 +/** CODE HIGHTLIGHT **/
108 187 @import "highlight.css.scss";
109 188 @import "highlight.black.css.scss";
110   -@import "issues.css.scss";
111   -@import "commits.css.scss";
112 189  
113   -@import "top_panel.scss";
114   -@import "dashboard.scss";
115   -@import "tree.scss";
116   -@import "tags.scss";
... ...
app/assets/stylesheets/dashboard.scss
... ... @@ -1,30 +0,0 @@
1   -body.dashboard-page h2.icon span{ background-position: 9px -69px; }
2   -body.dashboard-page header{margin-bottom: 0}
3   -body.dashboard-page .news-feed{margin-left: 285px; min-height: 600px; margin-top: 20px; margin-right:2px; padding:20px;}
4   -body.dashboard-page .dashboard-content{ position: relative; float: left; width: 100%; height: 100%; }
5   -body.dashboard-page .news-feed h2{float: left;}
6   -
7   -body.dashboard-page aside{
8   - min-height: 820px; position: relative; top: 0; bottom: 0; right: 0; width: 260px; float: left; border-right: 1px solid $border_color; padding:20px; padding-right:0;
9   - h4{margin: 0; border-bottom: 1px solid #ccc; padding: 20px 20px 20px 0px; font-size: 11px; font-weight: bold; text-transform: uppercase;}
10   - h4 a.button-small{float: right; text-transform: none; border-radius: 4px; margin-right: 2%; margin-top: -4px; display: block;}
11   - .project-list {list-style: none; margin: 0; padding: 0;}
12   - .project-list li a {background: white; color: #{$blue_link}; display: block; border-bottom: 1px solid $lite_border_color; padding: 14px 6% 14px 0px;}
13   - .project-list li a span.project-name{font-size: 14px; display: block; margin-bottom: 8px}
14   - .project-list li a span.time{color: #666; font-weight: normal; font-size: 11px}
15   - .project-list li a span.arrow{float: right; background: #E3E5EA; padding: 10px; border-radius: 5px; margin-top: 2px; text-shadow: none; color: #999}
16   -}
17   -
18   -body.dashboard-page .news-feed .project-updates {
19   - margin-bottom: 20px; display: block; width: 100%;
20   - .data{ padding: 0}
21   - a.project-update {padding: 10px; overflow: hidden; display: block;}
22   - a.project-update:last-child{border-bottom: 0}
23   - a.project-update img{float: left; margin-right: 10px;}
24   - a.project-update span.update-title, .dashboard-page .news-feed .project-updates li a span.update-author{display: block;}
25   - a.project-update span.update-title{margin-bottom: 10px}
26   - a.project-update span.update-author{color: #999; font-weight: normal; font-style: italic;}
27   - a.project-update span.update-author strong{font-weight: bold; font-style: normal;}
28   -}
29   -/* eo Dashboard Page */
30   -
app/assets/stylesheets/highlight.black.css.scss
1 1 .black .highlighttable {
2 2 background: #333;
  3 + td.linenos { border:none; }
3 4 pre { color: #eee }
4 5 .highlight { background: #333; border-left:1px solid #555; }
5 6  
... ...
app/assets/stylesheets/highlight.css.scss
... ... @@ -25,7 +25,13 @@ td.linenos{
25 25 padding:10px 0px 0px 10px;
26 26 margin-left:0px;
27 27 }
  28 +
  29 +.linenodiv pre,
28 30 .highlight pre{
  31 + margin:0;
  32 + padding:0;
  33 + background:none;
  34 + border:none;
29 35 }
30 36  
31 37 .linenodiv pre {
... ...
app/assets/stylesheets/issues.css.scss
1   -.issue-number {
2   - float: left;
3   - border-radius: 5px;
4   - text-shadow: none;
5   - background: rgba(0, 0, 0, 0.12);
6   - text-align: center;
7   - padding: 14px 8px;
8   - width: 40px;
9   - margin-right: 10px;
10   - color: #444;
11   -}
12   -
13   -.issues_filter {
14   - margin:10px 0;
15   - .left {
16   - margin-right:15px;
17   - }
18   -}
19   -
20   -.top_panel_issues{
21   - #issue_search_form {
22   - margin:5px 0;
23   - input {
24   - border:1px solid #D3D3D3;
25   - padding: 3px;
26   - height: 28px;
27   - width: 250px;
28   - -webkit-appearance:none;
29   - box-sizing: border-box;
30   - -moz-box-sizing: border-box;
31   -
32   - &:focus {
33   - border-color:#c2e1ef;
34   - }
35   - }
36   - }
37   -}
38   -
39   -/** ISSUES LIST **/
40   -.issue .action-links {
41   - display:none;
42   - a {
43   - margin-left:10px;
44   - }
45   -}
46   -.issue:hover .action-links { display:block; }
47   -.issue-show-holder {
48   - width:100%;
49   - .data p { font-size:16px }
50   -}
51   -
52 1 #issue_assignee_id {
53 2 width:300px;
54 3 }
55   -
56   -.issue-form-holder .ui-box .data {
57   - margin: 0;
58   - padding: 0;
59   -}
60   -
61   -body.project-page .merge-request-form-holder table.no-borders tr,
62   -body.project-page .merge-request-form-holder table.no-borders td,
63   -body.project-page .issue-form-holder table.no-borders tr,
64   -body.project-page .issue-form-holder table.no-borders td,
65   -body.project-page .new_snippet table tr,
66   -body.project-page .new_snippet table td,
67   -body.project-page .edit_snippet table tr,
68   -body.project-page .edit_snippet table td
69   -{
70   - &:hover {
71   - background:none;
72   - }
73   -}
74   -
75   -
76   -#issues-table {
77   - tr {
78   - border-top: 1px solid $lite_border_color;
79   - &:first-child {
80   - border:none;
81   - }
82   - }
83   -
84   -}
... ...
app/assets/stylesheets/login.scss 0 → 100644
... ... @@ -0,0 +1,41 @@
  1 +/* Login Page */
  2 +body.login-page{ padding-top: 10%}
  3 +
  4 +.login-box{
  5 + width: 304px;
  6 + position: relative;
  7 + border-radius: 5px;
  8 + margin: auto;
  9 + padding: 20px;
  10 + background: white;
  11 +}
  12 +
  13 +.login-box .login-logo{
  14 + margin: 10px 0 30px 0;
  15 + display: block;
  16 +}
  17 +
  18 +.login-box input.text{background-color: #f1f1f1; font-size: 16px; border-radius: 0; padding: 14px 10px; width: 280px}
  19 +
  20 +.login-box input.text.top{
  21 + -webkit-border-top-left-radius: 5px;
  22 + -webkit-border-top-right-radius: 5px;
  23 + -moz-border-radius-topleft: 5px;
  24 + -moz-border-radius-topright: 5px;
  25 + border-top-left-radius: 5px;
  26 + border-top-right-radius: 5px;
  27 +}
  28 +
  29 +.login-box input.text.bottom{
  30 + -webkit-border-bottom-right-radius: 5px;
  31 + -webkit-border-bottom-left-radius: 5px;
  32 + -moz-border-radius-bottomright: 5px;
  33 + -moz-border-radius-bottomleft: 5px;
  34 + border-bottom-right-radius: 5px;
  35 + border-bottom-left-radius: 5px;
  36 + border-top: 0;
  37 + margin-bottom: 20px;
  38 +}
  39 +
  40 +.login-box a.forgot{float: right; padding-top: 6px}
  41 +
... ...
app/assets/stylesheets/merge_requests.css.scss
1   -// Place all the styles related to the MergeRequests controller here.
2   -// They will automatically be included in application.css.
3   -// You can use Sass (SCSS) here: http://sass-lang.com/
4   -
5   -
6 1 .merge-request-form-holder {
7 2 select {
8 3 width:300px;
... ...
app/assets/stylesheets/notes.css.scss
... ... @@ -32,13 +32,12 @@
32 32  
33 33 #notes-list .note .delete-note { display:none; }
34 34 #notes-list .note:hover .delete-note { display:block; }
35   -
36   -body.project-page #notes-list .note {padding: 10px 0; border-bottom: 1px solid #eee; overflow: hidden; display: block;}
37   -body.project-page #notes-list .note img{float: left; margin-right: 10px;}
38   -body.project-page #notes-list .note span.note-title{display: block;}
39   -body.project-page #notes-list .note span.note-title{margin-bottom: 10px}
40   -body.project-page #notes-list .note span.note-author{color: #999; font-weight: normal; font-style: italic;}
41   -body.project-page #notes-list .note span.note-author strong{font-weight: bold; font-style: normal;}
  35 +#notes-list .note {padding: 10px 0; border-bottom: 1px solid #eee; overflow: hidden; display: block;}
  36 +#notes-list .note img{float: left; margin-right: 10px;}
  37 +#notes-list .note span.note-title{display: block;}
  38 +#notes-list .note span.note-title{margin-bottom: 10px}
  39 +#notes-list .note span.note-author{color: #999; font-weight: normal; font-style: italic;}
  40 +#notes-list .note span.note-author strong{font-weight: bold; font-style: normal;}
42 41  
43 42  
44 43 .note .note-title { margin-left:55px; }
... ...
app/assets/stylesheets/projects.css.scss
1   -body.project-page h2.icon .project-name, body.project-page h2.icon d{border: 1px solid #eee; padding: 5px 30px 5px 10px; border-radius: 5px; position: relative;}
2   -body.project-page h2.icon .project-name i.arrow{float: right;
3   - position: absolute;
4   - right: 10px;
5   - top: 13px;
6   - display: block;
7   - background: url('images.png') no-repeat -97px -29px;
8   - width: 4px;
9   - height: 5px;
  1 +.git_url_wrapper {
  2 + margin-right:50px
10 3 }
11   -
12   -body.project-page h2.icon span{ background-position: -78px -68px; }
13   -body.project-page .project-container{ position: relative; float: left; width: 100%; height: 100%; padding-bottom: 10px;}
14   -body.project-page .page-title{margin-bottom: 0}
15   -
16   -body.project-page .project-sidebar {
17   - width: 110px;
18   - left: 0;
19   - top: 0;
20   - height: 100%;
21   - bottom: 0;
22   - position: absolute;
23   - float: left;
24   - display: inline-block;
25   - background: #FFF;
26   - padding: $app_padding;
27   - padding-right:0px;
28   - margin: 0;
29   - border-right: 1px solid $border_color;
30   -}
31   -
32   -body.projects-page input.text.git-url { font-size: 12px; border-radius: 5px; color: #666; box-shadow: 0 1px 2px rgba(0,0,0,.2) inset; padding: 8px 0 8px 30px; margin-bottom: 20px; background: white url('images.png') no-repeat 8px -40px; width: 136px}
33   -body.projects-page input.text.git-url {margin:10px 0 0 }
34   -.git_url_wrapper { margin-right:50px }
35   -
36   -.projects_selector:hover > .project-box{ -moz-box-shadow:0px 0px 10px rgba(0, 0, 0, .1); -webkit-box-shadow:0px 0px 10px rgba(0, 0, 0, .1); box-shadow:0px 0px 10px rgba(0, 0, 0, .1); }
37   -
38   -
39   -/* New project Page */
40   -.new-project-page .container table{background: white}
41   -body.project-page .project-sidebar aside{width: 109px}
42   -body.project-page .project-sidebar aside a{
43   - display: block;
44   - position: relative;
45   - padding: 15px 10px;
46   - margin: 10px 0 0 0;
47   -
48   -
49   -}
50   -body.project-page .project-sidebar aside a span.number{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}
51   -body.project-page .project-sidebar aside a.current {
52   - color: white;
53   - background: $active_bg_color;
54   - border: 1px solid $active_bd_color;
55   - border-radius:5px;
56   -
57   -
58   - -webkit-border-top-right-radius: 0;
59   - -webkit-border-bottom-right-radius: 0;
60   - -moz-border-radius-topright: 0px;
61   - -moz-border-radius-bottomright: 0px;
62   - border-top-right-radius: 0;
63   - border-bottom-right-radius: 0;
64   - margin-right: -1px;
65   -}
66   -body.project-page .project-content{ padding: $app_padding; display: block; margin-left: 130px; min-height: 600px}
67   -body.project-page .project-content h2{ margin-top: 6px}
68   -body.project-page .project-content .button.right{margin-left: 20px}
69   -body.project-page table .commit a{color: #{$blue_link}}
70   -body.project-page table th, body.project-page table td{ border-bottom: 1px solid #DEE2E3;}
71   -body.project-page .fixed{position: fixed; }
72   -
73   -
74   -
75   -
76   -/** File stat **/
77 4 .file_stats {
78 5 span {
79 6 img {
80 7 width:14px;
81 8 float:left;
82   - margin-right: 6px;
  9 + margin-right:6px;
83 10 padding:2px 0;
84 11 }
85 12 }
86 13 }
87 14  
88   -.round-borders {
89   - @include round-borders-all(4px);
90   - padding: 4px 0px;
  15 +.handle:hover {
  16 + cursor:move;
91 17 }
92 18  
93   -table.round-borders {
  19 +/* Project Dashboard Page */
  20 +.news-feed h2 {
94 21 float:left;
95   - text-align: left;
96 22 }
97   -
98   -
99   -
100   -/** PROJECTS **/
101   -input.ssh_project_url {
102   - padding:5px;
103   - margin:0px;
104   - float:right;
105   - width:400px;
106   - text-align:center;
  23 +.news-feed .project-updates {
  24 + margin-bottom:20px;
  25 + display:block;
  26 + width:100%;
107 27 }
108   -
109   -#projects-list .project {
110   - height:50px;
  28 +.news-feed .project-updates .data {
  29 + padding:0
111 30 }
112   -
113   -#tree-slider .tree-item,
114   -#projects-list .project,
115   -#snippets-table .snippet,
116   -#issues-table .issue{
117   - cursor:pointer;
  31 +.news-feed .project-updates a.project-update {
  32 + padding:10px;
  33 + border-bottom:1px solid #eee;
  34 + overflow:hidden;
  35 + display:block;
118 36 }
119   -
120   -.clear {
121   - clear: both;
  37 +.news-feed .project-updates a.project-update:last-child {
  38 + border-bottom:0
122 39 }
123   -
124   -
125   -/** Buttons **/
126   -.lbutton,
127   -.lite_button {
128   - display:block;
  40 +.news-feed .project-updates a.project-update img {
129 41 float:left;
130   - margin: 0px 5px 0px 0px;
131   - padding:5px 10px;
132   -
133   - font-family:"Helvetica Neue", Arial, Helvetica, sans-serif;
134   - border:1px solid #D3D3D3;
135   - background:white;
136   - font-size:12px !important;
137   - line-height:130%;
138   - text-decoration:none;
139   - font-weight:bold;
140   - color:#565656;
141   - cursor:pointer;
142   -
143   - &:hover {
144   - border:1px solid #C2E1EF;
145   - color: #0099FF;
146   - }
147   -
148   - &.hm {
149   - margin: 0px 0px;
150   - }
151   -
152   - &.vm {
153   - margin: 5px 0px;
154   - }
  42 + margin-right:10px;
155 43 }
156   -
157   -#user_projects_limit{
158   - width: 60px;
  44 +span.update-title,
  45 +span.update-author {
  46 + display:block;
159 47 }
160   -
161   -.handle:hover{
162   - cursor: move;
  48 +span.update-title {
  49 + margin-bottom:10px
163 50 }
164   -
165   -.project-refs-form {
166   - span {
167   - background: none !important;
168   - position:static !important;
169   - width:auto !important;
170   - height: auto !important;
171   - }
  51 +span.update-author {
  52 + color:#999;
  53 + font-weight:normal;
  54 + font-style:italic;
172 55 }
173   -
174   -.project-refs-select {
175   - width:200px;
  56 +span.update-author strong {
  57 + font-weight:bold;
  58 + font-style: normal;
176 59 }
177   -
178   -.filter .left { margin-right:15px; }
179   -
180   -body.project-page table .commit {
181   - a.tree-commit-link {
182   - color:#444;
183   - &:hover {
184   - text-decoration:underline;
185   - }
186   - }
  60 +/** UPDATE ITEM **/
  61 +.update-data {
  62 + padding:0
187 63 }
188   -
189   -/** NEW PROJECT **/
190   -.new-project-hodler {
191   - .icon span { background-position: -31px -70px; }
192   - td { border-bottom: 1px solid #DEE2E3; }
  64 +.update-data {
  65 + width:100%;
193 66 }
194   -
195   -/** Feed entry **/
196   -.commit,
197   -.snippet,
198   -.message {
199   - .title {
200   - color:#666;
201   - a { color:#666 !important; }
202   - p { margin-top:0px; }
203   - }
204   - .author { color: #999 }
  67 +a.update-item {
  68 + padding:10px;
  69 + border-bottom:1px solid #eee;
  70 + overflow:hidden;
  71 + display:block;
205 72 }
206   -
207   -/** JQuery UI **/
208   -.ui-autocomplete { @include round-borders-all(5px); }
209   -.ui-menu-item { cursor: pointer }
210   -.ui-selectmenu{
211   - @include round-borders-all(4px);
  73 +a.update-item:last-child {
  74 + border-bottom:0
  75 +}
  76 +a.update-item img {
  77 + float:left;
212 78 margin-right:10px;
213   - font-size:1.5em;
214   - height:auto;
215   - font-weight:bold;
216   - .ui-selectmenu-status {
217   - padding:3px 10px;
218   - }
219 79 }
220   -
221   -/** Snippets **/
222   -.new_snippet textarea,
223   -.edit_snippet textarea {
224   - height:300px;
225   - padding: 8px;
226   - width: 95%;
227   -}
228   -.snippet .action-links {
229   - display:none;
230   - a {
231   - margin-left:10px;
232   - }
  80 +span.update-title,
  81 +span.update-author {
  82 + display:block;
233 83 }
234   -.snippet:hover .action-links { display:block; }
235   -
236   -
237   -#holder {
238   - background:#FAFAFA;
239   - border: 1px solid #EEE;
240   - cursor: move;
241   - height: 70%;
242   - overflow: hidden;
  84 +a.update-item span.update-title {
  85 + margin-bottom:10px
243 86 }
244   -
245   -/* Project Dashboard Page */
246   -html, body { height: 100%; }
247   -
248   -body.dashboard.project-page .news-feed h2{float: left;}
249   -body.dashboard.project-page .news-feed .project-updates {margin-bottom: 20px; display: block; width: 100%;}
250   -body.dashboard.project-page .news-feed .project-updates .data{ padding: 0}
251   -body.dashboard.project-page .news-feed .project-updates a.project-update {padding: 10px; border-bottom: 1px solid #eee; overflow: hidden; display: block;}
252   -body.dashboard.project-page .news-feed .project-updates a.project-update:last-child{border-bottom: 0}
253   -body.dashboard.project-page .news-feed .project-updates a.project-update img{float: left; margin-right: 10px;}
254   -body.dashboard.project-page .news-feed .project-updates a.project-update span.update-title, .dashboard-page .news-feed .project-updates li a span.update-author{display: block;}
255   -body.dashboard.project-page .news-feed .project-updates a.project-update span.update-title{margin-bottom: 10px}
256   -body.dashboard.project-page .news-feed .project-updates a.project-update span.update-author{color: #999; font-weight: normal; font-style: italic;}
257   -body.dashboard.project-page .news-feed .project-updates a.project-update span.update-author strong{font-weight: bold; font-style: normal;}
258   -/* eo Dashboard Page */
259   -
260   -
261   -/** Merge requests */
262   -body.project-page .merge-request-commits {margin-bottom: 20px; display: block; width: 100%;}
263   -body.project-page .merge-request-commits .data{ padding: 0}
264   -body.project-page .merge-request-commits a.commit {padding: 10px; border-bottom: 1px solid #eee; overflow: hidden; display: block;}
265   -body.project-page .merge-request-commits a.commit:last-child{border-bottom: 0}
266   -body.project-page .merge-request-commits a.commit img{float: left; margin-right: 10px;}
267   -body.project-page .merge-request-commits a.commit span.update-title, .dashboard-page .news-feed .project-updates li a span.update-author{display: block;}
268   -body.project-page .merge-request-commits a.commit span.update-title{margin-bottom: 10px}
269   -body.project-page .merge-request-commits a.commit span.update-author{color: #999; font-weight: normal; font-style: italic;}
270   -body.project-page .merge-request-commits a.commit span.update-author strong{font-weight: bold; font-style: normal;}
271   -
272   -
273   -/** Update entry **/
274   -.update-data { padding: 0 }
275   -.update-data { width:100%; }
276   -.update-data.ui-box .data { padding:0; }
277   -a.update-item {padding: 10px; border-bottom: 1px solid #eee; overflow: hidden; display: block;}
278   -a.update-item:last-child{border-bottom: 0}
279   -a.update-item img{float: left; margin-right: 10px;}
280   -a.update-item span.update-title, .dashboard-page .news-feed .project-updates li a span.update-author{display: block;}
281   -a.update-item span.update-title{margin-bottom: 10px}
282   -a.update-item span.update-author{color: #999; font-weight: normal; font-style: italic;}
283   -a.update-item span.update-author strong{font-weight: bold; font-style: normal;}
284   -
285   -
286   -body.project-page .team_member_new .span-6, .team_member_edit .span-6{ padding:10px 0; }
287   -
288   -body.projects-page input.text.git-url.project_list_url { width:165px; }
289   -
290   -
291   -body.project-page table.no-borders th {
292   - background:none;
293   - border-bottom:1px solid #CCC;
294   - color:#333;
  87 +a.update-item span.update-author {
  88 + color:#999;
  89 + font-weight:normal;
  90 + font-style:italic;
295 91 }
296   -
297   -body.project-page table.no-borders tr,
298   -body.project-page table.no-borders td{
299   - border:none;
  92 +a.update-item span.update-author strong {
  93 + font-weight:bold;
  94 + font-style:normal;
300 95 }
301   -
  96 +/** END UPDATE ITEM **/
302 97 .ajax-tab-loading {
303 98 padding:40px;
304 99 display:none;
305 100 }
306   -
307   -#tree-content-holder { float:left; width:100%; }
308   -
  101 +#tree-content-holder {
  102 + float:left;
  103 + width:100%;
  104 +}
309 105 #tree-readme-holder {
310 106 float:left;
311 107 width:100%;
312   -
313 108 .readme {
314 109 @include round-borders-all(4px);
315   - padding: 4px 15px;
316   - background:#F7F7F7;
  110 + padding:4px 15px;
  111 + background: #F7F7F7;
317 112 }
318 113 }
319   -
320   -
321   -
322   -/* Commit Page */
323   -.entity-info {float: right;}
324   -.entity-button{
325   - background-image: -webkit-gradient(linear, 0 0, 0 26, color-stop(0.192, #fff), to(#f4f4f4));
326   - background-image: -webkit-linear-gradient(#fff 19.2%, #f4f4f4);
327   - background-image: -moz-linear-gradient(#fff 19.2%, #f4f4f4);
328   - background-image: -o-linear-gradient(#fff 19.2%, #f4f4f4);
329   - box-shadow: 0 -1px 0 white inset;
330   - display: block;
331   - border: 1px solid #eee;
332   - border-radius: 5px;
333   - margin-bottom: 2px;
334   - position: relative;
335   - padding: 4px 10px;
336   - font-size: 11px;
337   - padding-right: 20px;
  114 +.dashboard-loader {
  115 + float:left;
  116 + margin:10px;
  117 + display:none;
338 118 }
339   -
340   -.entity-button i{
341   - background: url('images.png') no-repeat -138px -27px;
342   - width: 6px;
343   - height: 9px;
344   - float: right;
345   - position: absolute;
346   - top: 6px;
347   - right: 5px;
348   -}
349   -.box-arrow{float: right; background: #E3E5EA; padding: 10px; border-radius: 5px; margin-top: 2px; text-shadow: none; color: #999; margin: 1.5em 0;}
350   -
351   -h4.dash-tabs {
352   - margin: 0;
353   - border-bottom: 1px solid #ccc;
354   - padding: 10px 10px;
355   - font-size: 11px;
356   - padding-left:20px;
357   - font-weight: bold; text-transform: uppercase;
358   - background: #F7F7F7;
359   - margin-bottom:20px;
360   - height:13px;
361   -
  119 +.user-mention {
  120 + color:#2FA0BB;
  121 + font-weight:bold;
362 122 }
363 123  
364   -.dash-button {
365   - border-right: 1px solid #ddd;
366   - background:none;
367   - padding: 10px 15px;
368   - float:left;
  124 +a.project-update.titled {
369 125 position:relative;
370   - top:-10px;
371   - left:0px;
372   - height:13px;
373   -
374   - &:first-child {
375   - border-left: 1px solid #ddd;
376   - }
377   - &.active {
378   - background: #eaeaea;
  126 + padding-left:35% !important;
  127 + .title-block {
  128 + padding:10px;
  129 + width:35%;
  130 + position:absolute;
  131 + left:0;
  132 + top:0;
379 133 }
380 134 }
381   -
382   -
383   -.dashboard-loader {
384   - float:right;
385   - margin-right:30px;
386   - display:none;
  135 +/**
  136 + * Project graph
  137 + */
  138 +#holder {
  139 + cursor: move;
  140 + height: 70%;
  141 + overflow: hidden;
387 142 }
388 143  
389 144  
390   -.merge-tabs {
391   - margin: 0;
392   - border: 1px solid #ccc;
393   - padding: 5px;
394   - font-size: 12px;
395   - background: #F7F7F7;
396   - margin-bottom:20px;
397   - height:26px;
398   -
399   - -moz-border-radius: 4px;
400   - -webkit-border-radius: 4px;
401   - border-radius: 4px;
402   -
403   - .tab {
404   - font-weight: bold;
405   - border-right: 1px solid #ddd;
406   - background:none;
407   - padding: 10px;
408   - min-width:60px;
409   - float:left;
410   - position:relative;
411   - top:-5px;
412   - left:-5px;
413   - height:16px;
414   - padding-left:34px;
415   -
416   - span {
417   - width: 20px;
418   - height: 20px;
419   - display: inline-block;
420   - position: absolute;
421   - left: 8px;
422   - top: 8px;
423   - }
424   -
425   - &.active {
426   - background: #eaeaea;
427   - }
  145 +/** Branch/tag selector **/
  146 +.project-refs-form {
  147 + margin:0;
  148 + span {
  149 + background:none !important;
  150 + position:static !important;
  151 + width:auto !important;
  152 + height:auto !important;
428 153 }
429 154 }
430   -.merge-tabs.repository .tab span{ background: url("images.png") no-repeat -38px -77px; }
431   -.activities-tab span { background: url("images.png") no-repeat -161px -1px; }
432   -.stat-tab span,
433   -.team-tab span,
434   -.snippets-tab span { background: url("images.png") no-repeat -38px -77px; }
435   -.files-tab span { background: url("images.png") no-repeat -112px -23px; }
436   -
437   -.merge-notes-tab span { background: url("images.png") no-repeat -161px -1px; }
438   -.merge-commits-tab span { background: url("images.png") no-repeat -86px 1px; }
439   -.merge-diffs-tab span { background: url("images.png") no-repeat -118px 1px; }
440   -.merge-tabs .dashboard-loader { padding:8px; }
441   -
442   -.user-mention {
443   - color: #2FA0BB;
444   - font-weight: bold;
445   -}
446   -
447   -.author {
448   - color: #999;
449   -}
450   -
451   -
452   -.red-button{
453   - border-radius: 5px;
454   - font-size: 12px;
455   - font-weight: bold;
456   - padding: 5px 17px;
457   - border: 1px solid #999;
458   - color: #666;
459   - display: inline-block;
460   - box-shadow: 0 1px 2px rgba(0,0,0,.3);
461   - background: #D12F19;
462   - color: white;
463   -}
464   -
465   -.positive-button{
466   - border-radius: 5px;
467   - font-size: 12px;
468   - font-weight: bold;
469   - padding: 5px 17px;
470   - border: 1px solid #999;
471   - color: #666;
472   - display: inline-block;
473   - box-shadow: 0 1px 2px rgba(0,0,0,.3);
474   - background: #4A2;
475   - color: white;
  155 +.project-refs-select {
  156 + width:120px;
476 157 }
477 158  
  159 +.project-refs-form .chzn-container {
  160 + position:relative;
  161 + top: -5px;
  162 + left: -11px;
478 163  
479   -.dark_scheme_box {
480   - padding:20px 0;
  164 + .chzn-drop {
  165 + margin:7px 0;
  166 + border: 1px solid #CCC;
  167 + min-width: 300px;
481 168  
482   - label {
483   - float:left;
484   - box-shadow: 0 0px 5px rgba(0,0,0,.3);
  169 + .chzn-results {
  170 + max-height:300px;
  171 + }
485 172  
486   - img {
  173 + .chzn-search input {
  174 + min-width:200px;
487 175 }
488 176 }
489   -}
490 177  
491   -a.project-update.titled {
492   - position: relative;
493   - padding-left: 235px !important;
  178 + .chzn-single {
  179 + background:#ddd;
  180 + //border:none;
  181 + //box-shadow:none;
494 182  
495   - .title-block {
496   - padding: 10px;
497   - width: 205px;
498   - position: absolute;
499   - left: 0;
500   - top: 0;
501   - }
502   -}
  183 + div {
  184 + background:transparent;
  185 + border-left:none;
  186 + }
503 187  
504   -.add_new {
505   - float: right;
506   - background: #A6B807;
507   - color: white;
508   - padding: 4px 10px;
509   - @include round-borders-all(4px);
510   - font-size:11px;
511   - margin: 10px 0;
  188 + span {
  189 + font-weight: normal;
  190 + }
  191 + }
512 192 }
513 193  
514   -
515   -
516   -.new-project-hodler {
517   - padding:20px;
518   -}
... ...
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/assets/stylesheets/reset_bootstrap.scss 0 → 100644
... ... @@ -0,0 +1,38 @@
  1 +a {
  2 + color: $link_color;
  3 + &:hover {
  4 + text-decoration:none;
  5 + color: $active_link_color;
  6 + }
  7 +}
  8 +
  9 +.entry {
  10 + position: relative;
  11 + padding: 7px 15px;
  12 + margin-bottom: 18px;
  13 + color: #404040;
  14 + background-color: #eedc94;
  15 + background-repeat: repeat-x;
  16 + background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94));
  17 + background-image: -moz-linear-gradient(top, #fceec1, #eedc94);
  18 + background-image: -ms-linear-gradient(top, #fceec1, #eedc94);
  19 + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94));
  20 + background-image: -webkit-linear-gradient(top, #fceec1, #eedc94);
  21 + background-image: -o-linear-gradient(top, #fceec1, #eedc94);
  22 + background-image: linear-gradient(top, #fceec1, #eedc94);
  23 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFCEEC1', endColorstr='#FFEEDC94', GradientType=0);
  24 + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
  25 + border-color: #eedc94 #eedc94 #e4c652;
  26 + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) fadein(rgba(0, 0, 0, 0.1), 15%);
  27 + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
  28 + border-width: 1px;
  29 + border-style: solid;
  30 + -webkit-border-radius: 4px;
  31 + -moz-border-radius: 4px;
  32 + border-radius: 4px;
  33 + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
  34 + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
  35 + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
  36 + background:#F1F1F1;
  37 + border-color:#ccc;
  38 +}
... ...
app/assets/stylesheets/style.scss
... ... @@ -1,802 +0,0 @@
1   -/* HTML5 ✰ Boilerplate
2   - * ==|== normalize ==========================================================
3   - */
4   -
5   -article, aside, details, figcaption, figure, footer, header, hgroup, nav, section { display: block; }
6   -audio, canvas, video { display: inline-block; *display: inline; *zoom: 1; }
7   -audio:not([controls]) { display: none; }
8   -[hidden] { display: none; }
9   -
10   -html { font-size: 100%; overflow-y: scroll; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }
11   -body { margin: 0; font-size: 13px; line-height: 1.231; }
12   -body, button, input, select, textarea {
13   - font-family: "helvetica", "arial", "freesans", "clean", sans-serif;
14   -color: #222; }
15   -
16   -::-moz-selection { background: #79c3e0; color: #fff; text-shadow: none; }
17   -::selection { background: #79c3e0; color: #fff; text-shadow: none; }
18   -
19   -a { color: #00e; }
20   -a:hover { color: #06e; }
21   -a:focus { outline: thin dotted; }
22   -a:hover, a:active { outline: 0; }
23   -
24   -abbr[title] { border-bottom: 1px dotted; }
25   -b, strong { font-weight: bold; }
26   -blockquote { margin: 1em 40px; }
27   -dfn { font-style: italic; }
28   -hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }
29   -ins { background: #ff9; color: #000; text-decoration: none; }
30   -mark { background: #ff0; color: #000; font-style: italic; font-weight: bold; }
31   -pre, code, kbd, samp { font-family: monospace, monospace; _font-family: 'courier new', monospace; font-size: 1em; }
32   -pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; }
33   -q { quotes: none; }
34   -q:before, q:after { content: ""; content: none; }
35   -small { font-size: 85%; }
36   -sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
37   -sup { top: -0.5em; }
38   -sub { bottom: -0.25em; }
39   -ul, ol { margin: 1em 0; padding: 0 0 0 40px; }
40   -dd { margin: 0 0 0 40px; }
41   -nav ul, nav ol { list-style: none; list-style-image: none; margin: 0; padding: 0; }
42   -img { border: 0; -ms-interpolation-mode: bicubic; vertical-align: middle; }
43   -svg:not(:root) { overflow: hidden; }
44   -figure { margin: 0; }
45   -
46   -form { margin: 0; }
47   -fieldset { border: 0; margin: 0; padding: 0; }
48   -label { cursor: pointer; }
49   -legend { border: 0; *margin-left: -7px; padding: 0; }
50   -button, input, select, textarea { font-size: 100%; margin: 0; vertical-align: baseline; *vertical-align: middle; }
51   -button, input { line-height: normal; *overflow: visible; }
52   -table button, table input { *overflow: auto; }
53   -button, input[type="button"], input[type="reset"], input[type="submit"] { cursor: pointer; -webkit-appearance: button; }
54   -input[type="checkbox"], input[type="radio"] { box-sizing: border-box; }
55   -input[type="search"] { -webkit-appearance: textfield; -moz-box-sizing: content-box; -webkit-box-sizing: content-box; box-sizing: content-box; }
56   -input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
57   -button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
58   -textarea { overflow: auto; vertical-align: top; resize: vertical; }
59   -input:valid, textarea:valid { }
60   -input:invalid, textarea:invalid { background-color: #f0dddd; }
61   -
62   -table { border-collapse: collapse; border-spacing: 0; }
63   -td { vertical-align: top; }
64   -
65   -/* ==|== primary styles =====================================================
66   - Author: Ricardo Rauch
67   - ========================================================================== */
68   -
69   -/* 960gs */
70   -.container_4{width:98%;margin-left:1%;margin-right:1%}.grid_1,.grid_2,.grid_3,.grid_4{display:inline;float:left;position:relative;margin-left:1%;margin-right:1%}.alpha{margin-left:0}.omega{margin-right:0}.container_4 .grid_1{width:23.0%}.container_4 .grid_2{width:48.0%}.container_4 .grid_3{width:73.0%}.container_4 .grid_4{width:98.0%}.container_4 .prefix_1{padding-left:25.0%}.container_4 .prefix_2{padding-left:50.0%}.container_4 .prefix_3{padding-left:75.0%}.container_4 .suffix_1{padding-right:25.0%}.container_4 .suffix_2{padding-right:50.0%}.container_4 .suffix_3{padding-right:75.0%}.container_4 .push_1{left:25.0%}.container_4 .push_2{left:50.0%}.container_4 .push_3{left:75.0%}.container_4 .pull_1{left:-25.0%}.container_4 .pull_2{left:-50.0%}.container_4 .pull_3{left:-75.0%}.clear{clear:both;display:block;overflow:hidden;visibility:hidden;width:0;height:0}.clearfix:after{clear:both;content:' ';display:block;font-size:0;line-height:0;visibility:hidden;width:0;height:0}.clearfix{display:inline-block}* html .clearfix{height:1%}.clearfix{display:block}
71   -/* eo 960gs*/
72   -
73   -/* Vars */
74   -$color: "#4BB8D2";
75   -$blue_link: "#2fa0bb";
76   -/* eo Vars */
77   -
78   -html{ -webkit-font-smoothing:antialiased; }
79   -body {
80   - font-size: 12px;
81   - background-color: #FFFFFF;
82   -}
83   -a{text-decoration: none; font-weight: bold; color: #444}
84   -a:hover{color: #555}
85   -/* Typography */
86   -h1,h2,h3,h4,h5{font-weight: normal; color: #666}
87   -h2{margin: 1.5em 0}
88   -/* eo Typography */
89   -
90   -/* Forms */
91   -input[type="text"]:focus, input[type="password"]:focus { outline: none; }
92   -input.text{border: 1px solid #ccc; border-radius: 4px; display: block; padding: 10px}
93   -
94   -.form-row{
95   - padding: 0px 0px 10px 0px;
96   -}
97   -
98   -.form-row label{
99   - font-weight:bold;
100   - display: inline-block;
101   - padding: 0px 0px 5px 0px;
102   -}
103   -
104   -/* eo Forms */
105   -
106   -/* Tables */
107   -table {width:100%; border: 1px solid #DEE2E3; margin-bottom: 20px}
108   -table thead{
109   - -webkit-border-top-left-radius: 5px;
110   - -webkit-border-top-right-radius: 5px;
111   - -moz-border-radius-topleft: 5px;
112   - -moz-border-radius-topright: 5px;
113   - border-top-left-radius: 5px;
114   - border-top-right-radius: 5px;
115   -}
116   -table thead th{
117   - background-image: -webkit-gradient(linear, 0 0, 0 26, color-stop(0.076, #fefefe), to(#F6F7F8));
118   - background-image: -webkit-linear-gradient(#fefefe 7.6%, #F6F7F8);
119   - background-image: -moz-linear-gradient(#fefefe 7.6%, #F6F7F8);
120   - background-image: -o-linear-gradient(#fefefe 7.6%, #F6F7F8);
121   - margin: 0;
122   - font-weight: normal;
123   - font-weight: bold;
124   - text-align: left;
125   - color: #97A0A5;
126   -}
127   -td, th{ padding: .9em 1em; vertical-align: middle; }
128   -
129   -table thead .image{width:100px}
130   -.listed_items tr.odd:hover{background-color:#FFFFCF}
131   -/* eo Tables */
132   -
133   -/* Buttons */
134   -.grey-button{
135   - border-radius: 5px;
136   - font-size: 12px;
137   - font-weight: bold;
138   - padding: 5px 17px;
139   - border: 1px solid #999;
140   - color: #666;
141   - display: inline-block;
142   - box-shadow: 0 1px 2px rgba(0,0,0,.3);
143   - background-image: -webkit-gradient(linear, 0 0, 0 26, color-stop(0.076, #f7f7f7), to(#d5d5d5));
144   - background-image: -webkit-linear-gradient(#f7f7f7 7.6%, #d5d5d5);
145   - background-image: -moz-linear-gradient(#f7f7f7 7.6%, #d5d5d5);
146   - background-image: -o-linear-gradient(#f7f7f7 7.6%, #d5d5d5);
147   -}
148   -
149   -a.button, input.button {
150   - font-weight: bold;
151   - padding: 10px 20px;
152   - text-align: center;
153   - display: inline-block;
154   - border-radius: 5px;
155   - color: #578E91;
156   - font-size: 12px;
157   - text-transform: uppercase;
158   - border: 1px solid #8CE2E6;
159   - background-image: -webkit-gradient(linear, 0 0, 0 34, color-stop(0.794, #dbf5f6), to(#c5eef0));
160   - background-image: -webkit-linear-gradient(#dbf5f6 79.4%, #c5eef0);
161   - background-image: -moz-linear-gradient(#dbf5f6 79.4%, #c5eef0);
162   - background-image: -o-linear-gradient(#dbf5f6 79.4%, #c5eef0);
163   -}
164   -
165   -input.button{margin-bottom: 1.5em}
166   -
167   -.button:hover {color: rgba(0,0,0,.8)}
168   -
169   -.button.green {margin-right: 0; }
170   -
171   -.button.yellow{
172   - color: #908054;
173   - border-color: #DDCDA1;
174   - background-image: -webkit-gradient(linear, 0 0, 0 34, color-stop(0.794, #FFEFC3), to(#F3E3B7));
175   - background-image: -webkit-linear-gradient(#FFEFC3 79.4%, #F3E3B7);
176   - background-image: -moz-linear-gradient(#FFEFC3 79.4%, #F3E3B7);
177   - background-image: -o-linear-gradient(#FFEFC3 79.4%, #F3E3B7);
178   -}
179   -
180   -.button.blue{
181   - color: #417E97;
182   - border-color: #b2cdec;
183   - background-image: -webkit-gradient(linear, 0 0, 0 34, color-stop(0.794, #dbe8f6), to(#c7daf1));
184   - background-image: -webkit-linear-gradient(#dbe8f6 79.4%, #c7daf1);
185   - background-image: -moz-linear-gradient(#dbe8f6 79.4%, #c7daf1);
186   - background-image: -o-linear-gradient(#dbe8f6 79.4%, #c7daf1);
187   -}
188   -
189   -.button-small{ text-shadow: none; padding: 4px 10px; }
190   -.button-green{background: #A6B807; color: white}
191   -
192   -/* eo Buttons */
193   -
194   -/* UI Box */
195   -//.ui-box{border: 1px solid #DEDFE1; float: left; border-radius: 5px}
196   -.ui-box{float: left;}
197   -.ui-box h3{
198   - background-image: -webkit-gradient(linear, 0 0, 0 26, color-stop(0.076, #fefefe), to(#F6F7F8));
199   - background-image: -webkit-linear-gradient(#fefefe 7.6%, #F6F7F8);
200   - background-image: -moz-linear-gradient(#fefefe 7.6%, #F6F7F8);
201   - background-image: -o-linear-gradient(#fefefe 7.6%, #F6F7F8);
202   - background:none;
203   - margin: 0;
204   - padding: 1em;
205   - font-size: 12px;
206   - font-weight: normal;
207   - font-weight: bold;
208   - font-size: 16px;
209   - border-bottom: 1px solid #DEDFE1;
210   - -webkit-border-top-left-radius: 5px;
211   - -webkit-border-top-right-radius: 5px;
212   - -moz-border-radius-topleft: 5px;
213   - -moz-border-radius-topright: 5px;
214   - border-top-left-radius: 5px;
215   - border-top-right-radius: 5px;
216   -}
217   -
218   -.ui-box.ui-box-small h3{
219   - padding: 8px 10px;
220   - font-size: 12px;
221   -}
222   -
223   -.ui-box .data{padding: .5em 1em}
224   -
225   -.ui-box .buttons{
226   - padding: 1em;
227   - border-top:1px solid $lite_border_color;
228   -}
229   -
230   -.ui-box .buttons .button{padding: 8px 9px; font-size: 11px}
231   -
232   -.ui-box.hover:hover{box-shadow: 0 0 10px rgba(0,0,0,.1); border: 1px solid #ccc;
233   -
234   - -webkit-transition: all 200ms cubic-bezier(0.470, 0.000, 0.745, 0.715);
235   - -moz-transition: all 200ms cubic-bezier(0.470, 0.000, 0.745, 0.715);
236   - -o-transition: all 200ms cubic-bezier(0.470, 0.000, 0.745, 0.715);
237   - transition: all 200ms cubic-bezier(0.470, 0.000, 0.745, 0.715);
238   -}
239   -
240   -/* eo UI Box */
241   -
242   -/* Login Page */
243   -body.login-page{background-color: #f1f1f1; padding-top: 10%}
244   -
245   -.login-box{
246   - width: 304px;
247   - position: relative;
248   - border-radius: 5px;
249   - margin: auto;
250   - padding: 20px;
251   - background: white;
252   - box-shadow: rgba(0, 0, 0, 0.07) 0 1px 0,white 0 2px 0,rgba(0, 0, 0, 0.07) 0 3px 0,white 0 4px 0, rgba(0, 0, 0, 0.07) 0 5px 0;
253   -}
254   -
255   -.login-box .login-logo{
256   - margin: 10px 0 30px 0;
257   - display: block;
258   -}
259   -
260   -.login-box input.text{background-color: #f1f1f1; font-size: 16px; border-radius: 0; padding: 14px 10px; width: 280px}
261   -
262   -.login-box input.text.top{
263   - -webkit-border-top-left-radius: 5px;
264   - -webkit-border-top-right-radius: 5px;
265   - -moz-border-radius-topleft: 5px;
266   - -moz-border-radius-topright: 5px;
267   - border-top-left-radius: 5px;
268   - border-top-right-radius: 5px;
269   -}
270   -
271   -.login-box input.text.bottom{
272   - -webkit-border-bottom-right-radius: 5px;
273   - -webkit-border-bottom-left-radius: 5px;
274   - -moz-border-radius-bottomright: 5px;
275   - -moz-border-radius-bottomleft: 5px;
276   - border-bottom-right-radius: 5px;
277   - border-bottom-left-radius: 5px;
278   - border-top: 0;
279   - margin-bottom: 20px;
280   -}
281   -
282   -.login-box a.forgot{float: right; padding-top: 6px}
283   -
284   -/* Icons */
285   -.directory, .file{
286   - display: inline-block;
287   - margin-right: 10px;
288   - width: 14px;
289   -}
290   -
291   -.directory{
292   - background: url('images.png') no-repeat -73px -26px;
293   - height: 11px;
294   - margin-bottom: -1px;
295   -}
296   -
297   -.file{
298   - background: url('images.png') no-repeat -114px -24px;
299   - height: 16px;
300   - margin-bottom: -3px;
301   -}
302   -
303   -/* eo Icons*/
304   -
305   -/* Errors */
306   -#error_explanation{background: #ffe5eb; padding: 20px; margin-bottom: 20px; border-radius: 5px}
307   -#error_explanation h2{margin: 0; margin-bottom: 20px; color: red}
308   -#error_explanation ul li{margin-bottom: 10px}
309   -#error_explanation ul li:last-child{margin-bottom: 0}
310   -.field_with_errors {
311   - input[type="text"],
312   - input[type="password"],
313   - textarea
314   - {
315   - border: 1px solid #D30 !important;
316   - }
317   -}
318   -/* eo Errors */
319   -
320   -/* Notices */
321   -#notice{background: #dfffe1; padding: 20px; margin-bottom: 20px; border-radius: 5px; color: green; font-size: 1.3em;}
322   -/* eo Notices */
323   -
324   -/* InfoBlock */
325   -#infoblock{
326   - background: #eeeeee;
327   - padding: 20px;
328   - margin-bottom: 20px;
329   - border-radius: 5px;
330   -}
331   -/* eo InfoBlock */
332   -
333   -/* Header */
334   -header{
335   - background: #474D57 url('bg-header.png') repeat-x bottom;
336   - z-index: 10000;
337   - height: 44px;
338   - padding: 10px 2% 6px 2%;
339   -}
340   -header a:hover{color: #f1f1f1}
341   -header h1{
342   - width: 65px;
343   -}
344   -header h1.logo{margin: 0; padding: 0}
345   -header h1.logo a{
346   - background: url('images.png') no-repeat -3px -7px;
347   - width: 65px;
348   - height: 26px;
349   - margin: 5px 0;
350   - padding: 0;
351   - display: block;
352   - float: left;
353   - text-indent: -1000em;
354   -}
355   -
356   -header nav{border-radius: 4px; box-shadow: 0 1px 2px black; width: 294px; margin: auto;
357   - background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #595d63), to(#31363e));
358   - background-image: -webkit-linear-gradient(#595d63 6.6%, #31363e);
359   - background-image: -moz-linear-gradient(#595d63 6.6%, #31363e);
360   - background-image: -o-linear-gradient(#595d63 6.6%, #31363e);
361   - margin-top: 2px;
362   - height:30px
363   -}
364   -header nav.shorter_nav{
365   - width: 207px;
366   -}
367   -header nav a{padding: 8px 12px 8px 34px; display: inline-block; color: #D6DADF; border-right: 1px solid #31363E; position: relative; box-shadow: 1px 0 0 rgba(255,255,255,.1); margin: 0}
368   -header nav a span{width: 20px; height: 20px; display: inline-block; background: red; position: absolute; left: 8px; top: 6px;}
369   -header nav a:last-child {border: 0; box-shadow: none}
370   -header nav a:hover, header nav a.current{
371   - background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #595d63), to(#2c2f35));
372   - background-image: -webkit-linear-gradient(#595d63 6.6%, #2c2f35);
373   - background-image: -moz-linear-gradient(#595d63 6.6%, #202227);
374   - background-image: -o-linear-gradient(#595d63 6.6%, #202227);
375   -}
376   -
377   -header nav a:active{
378   - box-shadow: 0 1px 4px rgba(0,0,0,.8) inset;
379   -}
380   -
381   -header nav a.dashboard {
382   - -webkit-border-top-left-radius: 4px;
383   - -webkit-border-bottom-left-radius: 4px;
384   - -moz-border-radius-topleft: 4px;
385   - -moz-border-radius-bottomleft: 4px;
386   - border-top-left-radius: 4px;
387   - border-bottom-left-radius: 4px;
388   -}
389   -
390   -header nav a.last_elem{
391   - -webkit-border-top-right-radius: 4px;
392   - -webkit-border-bottom-right-radius: 4px;
393   - -moz-border-radius-topright: 4px;
394   - -moz-border-radius-bottomright: 4px;
395   - border-top-right-radius: 4px;
396   - border-bottom-right-radius: 4px;
397   -}
398   -
399   -header .search{ display: inline-block; float: right; margin-right: 90px}
400   -
401   -header nav a span{width: 20px; height: 20px; display: inline-block; background: red; position: absolute; left: 8px; top: 6px;}
402   -
403   -header nav a.dashboard span{background: url('images.png') no-repeat -161px 0;}
404   -header nav a.admin span{background: url('images.png') no-repeat -184px 0;}
405   -header nav a.project span{background: url('images.png') no-repeat -209px -1px; top: 7px}
406   -header nav a.issues span{background: url('images.png') no-repeat -209px -1px; top: 7px}
407   -
408   -header .login-top{float: right; width: 180px;
409   - background-image: -webkit-gradient(linear, 0 0, 0 62, color-stop(0.032, #464c56), to(#363c45));
410   - background-image: -webkit-linear-gradient(#464c56 3.2%, #363c45);
411   - background-image: -moz-linear-gradient(#464c56 3.2%, #363c45);
412   - background-image: -o-linear-gradient(#464c56 3.2%, #363c45);
413   - padding: 0 10px;
414   - height: 44px;
415   -}
416   -header .login-top a{display: block;}
417   -header .login-top a.pic{float: left; margin-right: 10px;
418   - img{ height: 36px; width: 36px; border: 1px solid black}
419   -}
420   -header .login-top a.username{margin-bottom: 5px}
421   -header .login-top a.logout{color: #ccc}
422   -header{margin-bottom: 0; clear: both; position:relative;}
423   -
424   -.page-title{background-color: #f1f1f1;display: block; float: left; clear: both; width: 98%; padding: 1% 1%; border-bottom: 1px solid #ccc; box-shadow: 0 -1px 0 white inset; margin-bottom: 1.5em}
425   -.page-title h1{font-size: 20px; width: 400px; margin: 0; padding-top: 8px }
426   -.page-title a.grey-button{float: right;}
427   -.right{float: right;}
428   -
429   -/* Account box */
430   -header .account-box{
431   - position: absolute;
432   - right: 0;
433   - top: 8px;
434   - z-index: 10000;
435   - width: 128px;
436   - font-size: 11px;
437   - float: right;
438   - display: block;
439   - cursor: pointer;}
440   -header .account-box img{
441   - border-radius: 4px;
442   - right: 20px;
443   - position: absolute;
444   - width: 33px; height: 33px;
445   - display: block; top:0;}
446   -header .account-box img:after{
447   - content: " ";
448   - display: block;
449   - position: absolute;
450   - top: 0;
451   - right: 0;
452   -left: 0;
453   - bottom: 0;
454   -float: right;
455   - border-radius: 5px;
456   - border: 1px solid rgba(255, 255, 255, .1);
457   - border-bottom: 0;
458   - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(255, 255, 255, .15)), to(rgba(0, 0, 0, .25))), -webkit-gradient(linear, left top, right bottom, color-stop(0, rgba(255, 255, 255, 0)), color-stop(0.5, rgba(255, 255, 255, .1)), color-stop(0.501, rgba(255, 255, 255, 0)), color-stop(1, rgba(255, 255, 255, 0)));
459   - background: -moz-linear-gradient(top, rgba(255, 255, 255, .15), rgba(0, 0, 0, .25)), -moz-linear-gradient(left top, rgba(255, 255, 255, 0), rgba(255, 255, 255, .1) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0));
460   - background: linear-gradient(top, rgba(255, 255, 255, .15), rgba(0, 0, 0, .25)), linear-gradient(left top, rgba(255, 255, 255, 0), rgba(255, 255, 255, .1) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0));
461   - -webkit-background-origin: border-box;
462   - -moz-background-origin: border;
463   - background-origin: border-box;
464   -}
465   -
466   -.account-box.hover{height: 138px;}
467   -
468   -.account-box:hover > .account-links{display: block;}
469   -header .account-links{
470   - background: #79C3E0; display: none; border-radius: 5px; width: 100px; margin-top: 0; float: right; box-shadow: 0 1px 1px rgba(0,0,0,.2); position:relative;}
471   -header .account-links:before {
472   - content: ".";
473   - width:0;
474   - height:0;
475   - position:absolute;
476   - border:5px solid transparent;
477   - border-color:rgba(255,255,255,0);
478   - border-bottom-color:#fafafa;
479   - text-indent:-9999px;
480   - top:-10px;
481   - line-height:0;
482   - right:10px;
483   - z-index:10;
484   -}
485   -
486   -/* Inspired by http://maxvoltar.com/temp/nowplaying/ */
487   -header .account-links{background: white; display: none; z-index: 100000; border-radius: 5px; width: 100px; position: absolute; right: 20px; top: 46px; margin-top: 0; float: right; box-shadow: 0 1px 1px rgba(0,0,0,.2); }
488   -header .account-links a{color: #666; padding: 6px 10px; display: block; text-shadow: none; border-bottom: 1px solid #eee}
489   -header .account-links a:hover{
490   - background: #3aacec;
491   - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#39acec), to(#279ada), color-stop(.05, #4cbefe));
492   - background: -moz-linear-gradient(top, #39acec, #4cbefe 5%, #279ada);
493   - background: linear-gradient(top, #39acec, #4cbefe 5%, #279ada);
494   - color: #fff;
495   - text-shadow: #1488c8 0 -1px 0;
496   -}
497   -.account-box.hover .arrow-up{top: 41px; right: 6px; position: absolute}
498   -header .account-links a:first-child{
499   - -webkit-border-top-left-radius: 5px;
500   - -webkit-border-top-right-radius: 5px;
501   - -moz-border-radius-topleft: 5px;
502   - -moz-border-radius-topright: 5px;
503   - border-top-left-radius: 5px;
504   - border-top-right-radius: 5px;
505   -}
506   -
507   -header .account-links a:last-child{
508   - -webkit-border-bottom-right-radius: 5px;
509   - -webkit-border-bottom-left-radius: 5px;
510   - -moz-border-radius-bottomright: 5px;
511   - -moz-border-radius-bottomleft: 5px;
512   - border-bottom-right-radius: 5px;
513   - border-bottom-left-radius: 5px;
514   - border-bottom: 0;
515   -}
516   -
517   -.big-message{
518   - background-image: -webkit-gradient(linear, 0 48, 0 0, color-stop(0.041, #eccb40), to(#ffee4d));
519   - background-image: -webkit-linear-gradient(90deg, #eccb40 4.1%, #ffee4d);
520   - background-image: -moz-linear-gradient(90deg, #eccb40 4.1%, #ffee4d);
521   - background-image: -o-linear-gradient(90deg, #eccb40 4.1%, #ffee4d);
522   - text-align: center;
523   - font-weight: bold;
524   - padding: 10px 20px;
525   - text-shadow: 0 1px 0 rgba(255,255,255,.3);
526   - color: #333;
527   - color: rgba(0,0,0,.7);
528   - font-size: 14px;
529   - box-shadow: 0 1px 2px rgba(0,0,0,.7);
530   - z-index: 100000;
531   - margin-bottom: 2px;
532   -}
533   -
534   -.big-message a{color: #000; text-decoration: underline;}
535   -
536   -.big-message.error{
537   - background-color: #722523;
538   - background-image: -webkit-gradient(linear, 0 49, 0 0, color-stop(0.04, #722523), to(#ad4846));
539   - background-image: -webkit-linear-gradient(90deg, #9b403f 4%, #c16765);
540   - background-image: -moz-linear-gradient(90deg, #722523 4%, #ad4846);
541   - background-image: -o-linear-gradient(90deg, #722523 4%, #ad4846);
542   - color: #2E0D0C;
543   -}
544   -
545   -.big-message.success{
546   - background-color: #7a9339;
547   - background-image: -webkit-gradient(linear, 0 48, 0 0, color-stop(0.062, #7a9339), to(#93ae46));
548   - background-image: -webkit-linear-gradient(90deg, #7a9339 6.2%, #93ae46);
549   - background-image: -moz-linear-gradient(90deg, #7a9339 6.2%, #93ae46);
550   - background-image: -o-linear-gradient(90deg, #7a9339 6.2%, #93ae46)
551   -}
552   -
553   -.big-message.success{
554   - background-color: #7a9339;
555   - background-image: -webkit-gradient(linear, 0 48, 0 0, color-stop(0.062, #7a9339), to(#93ae46));
556   - background-image: -webkit-linear-gradient(90deg, #7a9339 6.2%, #93ae46);
557   - background-image: -moz-linear-gradient(90deg, #7a9339 6.2%, #93ae46);
558   - background-image: -o-linear-gradient(90deg, #7a9339 6.2%, #93ae46)
559   -}
560   -
561   -.big-message.notice{
562   - background-image: -webkit-gradient(linear, 0 49, 0 0, color-stop(0.061, #447790), color-stop(0.897, #5da2bf));
563   - background-image: -webkit-linear-gradient(90deg, #447790 6.1%, #5da2bf 89.7%);
564   - background-image: -moz-linear-gradient(90deg, #447790 6.1%, #5da2bf 89.7%);
565   - background-image: -o-linear-gradient(90deg, #447790 6.1%, #5da2bf 89.7%)
566   -}
567   -
568   -/* eo Account Box */
569   -input.search-input{
570   - float: left;
571   - text-shadow: none;
572   - width: 116px;
573   - background-image: url('icon-search.png') ;
574   - background-repeat: no-repeat;
575   - background-position: 10px;
576   - border-radius: 4px;
577   - border: 1px solid #AAA;
578   - background-color: #FFF;
579   - padding: 5px;
580   - padding-left: 26px;
581   - margin-top: 2px;
582   - margin-right: 10px;
583   -}
584   -/*input.search-input:focus{ background-color: white; width: 216px;}*/
585   -input.search-input::-webkit-input-placeholder {color: #666}
586   -/* eo Header */
587   -
588   -h2.icon{position: relative; padding-left: 40px; float: left; }
589   -/*h2 a{font-weight: normal;}*/
590   -h2.icon span{background: #E3E5EA url('images.png'); height: 32px; width: 32px; left: 0; top: -5px; border-radius: 4px; display: inline-block; position: absolute}
591   -
592   -/* Dashboard Page */
593   -html, body { height: 100%; }
594   -
595   -
596   -
597   -
598   -.grey-button.right{margin-top: 20px}
599   -
600   -/* Project Page */
601   -/* eo New Project Page */
602   -
603   -
604   -/* eo Project Page */
605   -
606   -/* Projects Page */
607   -body.projects-page h2.icon span{background-position: -31px -70px;}
608   -body.projects-page .project-box.ui-box .data .repository {margin-bottom: 20px}
609   -body.projects-page .project-box.ui-box .data .title span{ font-weight: bold;}
610   -body.projects-page .project-box{width: 100%; margin-bottom: 3em}
611   -body.projects-page .browse-code{margin-right: 10px}
612   -/* eo Projects Page */
613   -
614   -/* ==|== non-semantic helper classes ======================================== */
615   -.ir { display: block; border: 0; text-indent: -999em; overflow: hidden; background-color: transparent; background-repeat: no-repeat; text-align: left; direction: ltr; }
616   -.ir br { display: none; }
617   -.hidden { display: none !important; visibility: hidden; }
618   -.visuallyhidden { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
619   -.visuallyhidden.focusable:active, .visuallyhidden.focusable:focus { clip: auto; height: auto; margin: 0; overflow: visible; position: static; width: auto; }
620   -.invisible { visibility: hidden; }
621   -.clearfix:before, .clearfix:after { content: ""; display: table; }
622   -.clearfix:after { clear: both; }
623   -.clearfix { zoom: 1; }
624   -
625   -/* ==|== media queries ====================================================== */
626   -
627   -@media only screen and (min-width: 480px) {
628   -
629   -}
630   -
631   -@media only screen and (min-width: 768px) {
632   -
633   -}
634   -
635   -/* ==|== print styles ======================================================= */
636   -
637   -@media print {
638   - * { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important; -ms-filter: none !important; }
639   - a, a:visited { text-decoration: underline; }
640   - a[href]:after { content: " (" attr(href) ")"; }
641   - abbr[title]:after { content: " (" attr(title) ")"; }
642   - .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; }
643   - pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
644   - thead { display: table-header-group; }
645   - tr, img { page-break-inside: avoid; }
646   - img { max-width: 100% !important; }
647   - @page { margin: 0.5cm; }
648   - p, h2, h3 { orphans: 3; widows: 3; }
649   - h2, h3 { page-break-after: avoid; }
650   -}
651   -
652   -body, button, input, select, textarea {
653   - font-family: "helvetica", "arial", "freesans", "clean", sans-serif;
654   -}
655   -
656   -/** FORM INPUTS **/
657   -.new_merge_request,
658   -.edit_merge_request,
659   -.user_new,
660   -.new_key,
661   -.new_issue,
662   -.new_note,
663   -.edit_user,
664   -.edit_issue,
665   -.new_project,
666   -.new_snippet,
667   -.edit_snippet,
668   -.edit_project {
669   - input[type='text'],
670   - input[type='email'],
671   - input[type='password'],
672   - textarea {
673   - width:400px;
674   - padding:8px;
675   - font-size:14px;
676   - @include round-borders-all(4px);
677   - }
678   -}
679   -
680   -.text_field {
681   - width:400px;
682   - padding:8px;
683   - font-size:14px;
684   - @include round-borders-all(4px);
685   -}
686   -
687   -.input_button {
688   - padding:8px;
689   - font-size:14px;
690   - cursor:pointer;
691   - background-color: #F5F5F5;
692   - border-color: #EEEEEE #DEDEDE #DEDEDE #EEEEEE;
693   - border-right: 1px solid #DEDEDE;
694   - border-style: solid;
695   - border-width: 1px;
696   -}
697   -
698   -/** FLASH **/
699   -#flash_container {
700   - height:45px;
701   - position:fixed;
702   - z-index:10001;
703   - top:0px;
704   - width:100%;
705   - margin-bottom:15px;
706   - overflow:hidden;
707   - background:white;
708   - cursor:pointer;
709   - border-bottom:1px solid #777;
710   -
711   - h4 {
712   - color:#444;
713   - font-size:22px;
714   - padding-top:5px;
715   - margin:2px;
716   - }
717   -}
718   -
719   -
720   -.errors_holder {
721   - background:#D30;
722   - color:#fff;
723   - @include round-borders-all(4px);
724   - border:1px solid #a30;
725   - padding:5px;
726   - list-style:none;
727   - font-weight: bold;
728   - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
729   -
730   - li {
731   - padding:10px;
732   - }
733   -}
734   -
735   -.notice_holder {
736   - background:#DDF4FB;
737   - color:#444;
738   - border:1px solid #C6EDF9;
739   - @include round-borders-all(4px);
740   - padding:5px;
741   - list-style:none;
742   - font-weight: bold;
743   - text-shadow: 0 -1px 0 rgba(255, 255, 255, 0.25);
744   -
745   - li {
746   - padding:10px;
747   - }
748   -}
749   -
750   -.alert_holder {
751   - background:#FDF5D9;
752   - color:#444;
753   - border:1px solid #FCEEC1;
754   - @include round-borders-all(4px);
755   - padding:5px;
756   - list-style:none;
757   - font-weight: bold;
758   - text-shadow: 0 -1px 0 rgba(255, 255, 255, 0.25);
759   -
760   - li {
761   - padding:10px;
762   - }
763   -}
764   -
765   -.help_content {
766   - margin:20px;
767   - margin-top:71px;
768   -
769   - h2 {
770   - margin:0;
771   - padding:0;
772   - }
773   -
774   - .menu {
775   - float:left;
776   - width:20%;
777   -
778   - .active {
779   - color: $active_bd_color;
780   - }
781   - }
782   -
783   - .content {
784   - float:right;
785   - width:78%;
786   - }
787   -
788   - .bash {
789   - @include round-borders-all(4px);
790   - background:#eee;
791   - padding:5px;
792   - //overflow-x:scroll;
793   - pre{
794   - padding:0;
795   - line-height:2.0;
796   - margin:0;
797   - font-family: 'Courier New', 'andale mono','lucida console',monospace;
798   - color: #333;
799   - text-align:left;
800   - }
801   - }
802   -}
app/assets/stylesheets/tags.scss
... ... @@ -1,55 +0,0 @@
1   -.tag {
2   - @include round-borders-all(4px);
3   - padding:2px 4px;
4   - border:none;
5   - text-shadow:none;
6   -
7   - &.inline {
8   - display:inline;
9   - }
10   -
11   - &.high, &.closed {
12   - background: #D12F19;
13   - color:white;
14   - }
15   -
16   - &.today, &.open {
17   - background: #44aa22;
18   - color:white;
19   - }
20   -
21   - &.yours {
22   - background: #4466cc;
23   - color:white;
24   - }
25   - &.normal {
26   - background: #2c5ca6;
27   - color:white;
28   - }
29   - &.notes {
30   - background: #2c5c66;
31   - color:white;
32   - }
33   -
34   - &.note {
35   - background-image: -webkit-gradient(linear, 0 0, 0 26, color-stop(0.076, #fefefe), to(#F6F7F8));
36   - background-image: -webkit-linear-gradient(#fefefe 7.6%, #F6F7F8);
37   - background-image: -moz-linear-gradient(#fefefe 7.6%, #F6F7F8);
38   - background-image: -o-linear-gradient(#fefefe 7.6%, #F6F7F8);
39   - color: #777;
40   - border: 1px solid #DEDFE1;
41   - }
42   - &.issue {
43   - background: #D12F19;
44   - color:white;
45   - }
46   - &.commit {
47   - background-image: -webkit-gradient(linear, 0 0, 0 26, color-stop(0.076, #fefefe), to(#F6F7F8));
48   - background-image: -webkit-linear-gradient(#fefefe 7.6%, #F6F7F8);
49   - background-image: -moz-linear-gradient(#fefefe 7.6%, #F6F7F8);
50   - background-image: -o-linear-gradient(#fefefe 7.6%, #F6F7F8);
51   - color: #777;
52   - border: 1px solid #DEDFE1;
53   - }
54   -}
55   -
app/assets/stylesheets/top_panel.scss
1   -.main_links {
2   - width:130px;
3   - float:left;
4   -
5   - a {
6   - float:left;
7   - }
8   -}
9   -
10   -.dashboard_links {
11   - padding:7px;
12   - float:left;
13   - a {
14   - margin: 0 14px;
15   - float: left;
16   - font-size: 14px;
17   -
18   - &.active {
19   - color:$active_link_color;
20   - }
21   - &:hover {
22   - color:$active_link_color;
23   - }
24   - }
25   -}
26   -
27   -.top-tabs {
28   - margin: 0;
29   - padding: 5px;
30   - font-size: 14px;
31   - padding-bottom:10px;
32   - margin-bottom:20px;
33   - height:26px;
34   - border-bottom:1px solid #ccc;
35   -
36   - .tab {
37   - font-weight: bold;
38   - background:none;
39   - padding: 10px;
40   - float:left;
41   - padding-left:0px;
42   - padding-right:40px;
43   -
44   - &.active {
45   - color: $active_link_color;
46   - }
47   - }
48   -}
49   -
50 1 body header {
51 2 position:absolute;
52 3 width:100%;
... ... @@ -54,23 +5,20 @@ body header {
54 5 margin:0;
55 6 top:0;
56 7 left:0;
57   - background: #999; /* for non-css3 browsers */
58   - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#EAEAEA'); /* for IE */
59   - background: -webkit-gradient(linear, left top, left bottom, from(#FFFFFF), to(#EAEAEA)); /* for webkit browsers */
60   - background: -moz-linear-gradient(top, #FFFFFF, #EAEAEA); /* for firefox 3.6+ */
61   - background: -o-linear-gradient(top, #FFFFFF, #EAEAEA); /* for firefox 3.6+ */
  8 + background: #F1F1F1; /* for non-css3 browsers */
62 9 border-bottom: 1px solid #ccc;
  10 + box-shadow: 0 -1px 0 white inset;
  11 + -moz-box-shadow: 0 -1px 0 white inset;
  12 + -webkit-box-shadow: 0 -1px 0 white inset;
63 13  
64 14 height:50px;
65 15  
66 16 .wrapper {
67 17 margin:auto;
68   - width:$app_width;
  18 + min-width:$min_app_width;
  19 + max-width:$max_app_width;
69 20 position:relative;
70   -
71   - .top_panel_content {
72   - padding:10px $app_padding;
73   - }
  21 + padding:10px $app_padding;
74 22 }
75 23  
76 24 .project_name {
... ... @@ -102,45 +50,157 @@ body header {
102 50 border: 1px solid #AAA;
103 51 padding: 0 10px 0 30px;
104 52 background: transparent url('images.png') no-repeat 8px -42px;
105   - width: 160px;
  53 + width: 260px;
106 54 height:26px;
107 55 }
108 56 }
109 57 }
  58 +.main_links {
  59 + width:155px;
  60 + float:left;
110 61  
111   -.top_panel_holder .chzn-container {
112   - position:relative;
  62 + a {
  63 + float:left;
  64 + }
  65 +}
113 66  
114   - .chzn-drop {
115   - margin:7px 0;
116   - border: 1px solid #CCC;
117   - min-width: 300px;
  67 +.dashboard_links {
  68 + padding:7px;
  69 + float:left;
  70 + a {
  71 + margin: 0 14px;
  72 + float: left;
  73 + font-size: 14px;
118 74  
119   - .chzn-results {
120   - max-height:300px;
  75 + &.active {
  76 + color:$active_link_color;
  77 + }
  78 + &:hover {
  79 + color:$active_link_color;
121 80 }
122 81 }
  82 +}
123 83  
124   - .chzn-single {
125   - background:transparent;
126   - -moz-border-radius: 4px;
127   - border-radius: 4px;
  84 +.top-tabs {
  85 + margin: 0;
  86 + padding: 5px;
  87 + font-size: 14px;
  88 + padding-bottom:10px;
  89 + margin-bottom:20px;
  90 + height:26px;
  91 + border-bottom:1px solid #ccc;
128 92  
129   - div {
130   - background:transparent;
131   - border-left:none;
132   - }
  93 + .tab {
  94 + font-weight: bold;
  95 + background:none;
  96 + padding: 10px;
  97 + float:left;
  98 + padding-left:0px;
  99 + padding-right:40px;
133 100  
134   - span {
135   - font-weight: normal;
  101 + &.active {
  102 + color: $active_link_color;
136 103 }
137 104 }
138 105 }
139 106  
  107 +
140 108 .rss-icon {
141 109 margin:0 15px;
142 110 padding:3px;
143   - border:1px solid #AAA;
144 111 border-radius:3px;
145   - float:left;
  112 +}
  113 +
  114 +
  115 +
  116 +/* Account box */
  117 +header .account-box{
  118 + position: absolute;
  119 + right: 0;
  120 + top: 8px;
  121 + z-index: 10000;
  122 + width: 128px;
  123 + font-size: 11px;
  124 + float: right;
  125 + display: block;
  126 + cursor: pointer;}
  127 +header .account-box img{
  128 + border-radius: 4px;
  129 + right: 20px;
  130 + position: absolute;
  131 + width: 33px; height: 33px;
  132 + display: block; top:0;}
  133 +header .account-box img:after{
  134 + content: " ";
  135 + display: block;
  136 + position: absolute;
  137 + top: 0;
  138 + right: 0;
  139 +left: 0;
  140 + bottom: 0;
  141 +float: right;
  142 + border-radius: 5px;
  143 + border: 1px solid rgba(255, 255, 255, .1);
  144 + border-bottom: 0;
  145 + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(255, 255, 255, .15)), to(rgba(0, 0, 0, .25))), -webkit-gradient(linear, left top, right bottom, color-stop(0, rgba(255, 255, 255, 0)), color-stop(0.5, rgba(255, 255, 255, .1)), color-stop(0.501, rgba(255, 255, 255, 0)), color-stop(1, rgba(255, 255, 255, 0)));
  146 + background: -moz-linear-gradient(top, rgba(255, 255, 255, .15), rgba(0, 0, 0, .25)), -moz-linear-gradient(left top, rgba(255, 255, 255, 0), rgba(255, 255, 255, .1) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0));
  147 + background: linear-gradient(top, rgba(255, 255, 255, .15), rgba(0, 0, 0, .25)), linear-gradient(left top, rgba(255, 255, 255, 0), rgba(255, 255, 255, .1) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0));
  148 + -webkit-background-origin: border-box;
  149 + -moz-background-origin: border;
  150 + background-origin: border-box;
  151 +}
  152 +
  153 +.account-box.hover{height: 138px;}
  154 +.account-box:hover > .account-links{display: block;}
  155 +header .account-links{ background: #79C3E0; display: none; border-radius: 5px; width: 100px; margin-top: 0; float: right; box-shadow: 0 1px 1px rgba(0,0,0,.2); position:relative;}
  156 +
  157 +header .account-links:before {
  158 + content: ".";
  159 + width:0;
  160 + height:0;
  161 + position:absolute;
  162 + border:5px solid transparent;
  163 + border-color:rgba(255,255,255,0);
  164 + border-bottom-color:#333;
  165 + text-indent:-9999px;
  166 + top:-10px;
  167 + line-height:0;
  168 + right:10px;
  169 + z-index:10;
  170 +}
  171 +
  172 +header .account-links{
  173 + background: #333;
  174 + display: none;
  175 + z-index: 100000;
  176 + border-radius: 5px;
  177 + width: 100px;
  178 + position: absolute;
  179 + right: 20px;
  180 + top: 46px;
  181 + margin-top: 0;
  182 + float: right;
  183 + box-shadow: 0 1px 1px rgba(0,0,0,.2);
  184 +}
  185 +
  186 +header .account-links a{color: #EEE; padding: 6px 10px; display: block; text-shadow: none; border-bottom: 1px solid #555}
  187 +header .account-links a:hover{ background: #444;}
  188 +.account-box.hover .arrow-up{top: 41px; right: 6px; position: absolute}
  189 +header .account-links a:first-child{
  190 + -webkit-border-top-left-radius: 5px;
  191 + -webkit-border-top-right-radius: 5px;
  192 + -moz-border-radius-topleft: 5px;
  193 + -moz-border-radius-topright: 5px;
  194 + border-top-left-radius: 5px;
  195 + border-top-right-radius: 5px;
  196 +}
  197 +
  198 +header .account-links a:last-child{
  199 + -webkit-border-bottom-right-radius: 5px;
  200 + -webkit-border-bottom-left-radius: 5px;
  201 + -moz-border-radius-bottomright: 5px;
  202 + -moz-border-radius-bottomleft: 5px;
  203 + border-bottom-right-radius: 5px;
  204 + border-bottom-left-radius: 5px;
  205 + border-bottom: 0;
146 206 }
... ...
app/assets/stylesheets/tree.scss
... ... @@ -8,13 +8,10 @@
8 8 }
9 9  
10 10 .tree_progress {
11   - float:left;
12   - width:16px;
13   - height:16px;
14   - margin:2px 6px;
  11 + display:none;
  12 + margin:20px;
15 13 &.loading {
16   - background-position: 0px 0px;
17   - background: url("ajax-loader-facebook.gif") no-repeat;
  14 + display:block;
18 15 }
19 16 }
20 17  
... ... @@ -117,5 +114,15 @@ table.highlighttable .linenodiv pre {
117 114 .tree-item {
118 115 &:hover {
119 116 background: #FFFFCF;
  117 + cursor:pointer;
  118 + }
  119 +
  120 + .tree-item-file-name {
  121 + font-weight:bold;
  122 +
  123 + img {
  124 + position: relative;
  125 + top: 2px;
  126 + }
120 127 }
121 128 }
... ...
app/controllers/admin/projects_controller.rb
... ... @@ -52,6 +52,12 @@ class Admin::ProjectsController < ApplicationController
52 52 def update
53 53 @admin_project = Project.find_by_code(params[:id])
54 54  
  55 + owner_id = params[:project][:owner_id]
  56 +
  57 + if owner_id
  58 + @admin_project.owner = User.find(owner_id)
  59 + end
  60 +
55 61 if @admin_project.update_attributes(params[:project])
56 62 redirect_to [:admin, @admin_project], notice: 'Project was successfully updated.'
57 63 else
... ...
app/controllers/application_controller.rb
... ... @@ -95,4 +95,8 @@ class ApplicationController < ActionController::Base
95 95 response.headers["Pragma"] = "no-cache"
96 96 response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
97 97 end
  98 +
  99 + def render_full_content
  100 + @full_content = true
  101 + end
98 102 end
... ...
app/controllers/commits_controller.rb
... ... @@ -29,6 +29,8 @@ class CommitsController < ApplicationController
29 29  
30 30 @line_notes = project.commit_line_notes(@commit)
31 31  
  32 + render_full_content
  33 +
32 34 respond_to do |format|
33 35 format.html
34 36 format.js { respond_with_notes }
... ...
app/controllers/keys_controller.rb
1 1 class KeysController < ApplicationController
2 2 layout "profile"
3   - respond_to :js
  3 + respond_to :js, :html
4 4  
5 5 def index
6 6 @keys = current_user.keys.all
... ...
app/controllers/merge_requests_controller.rb
... ... @@ -39,6 +39,8 @@ class MergeRequestsController &lt; ApplicationController
39 39 @notes = @merge_request.notes.inc_author.order("created_at DESC").limit(20)
40 40 @note = @project.notes.new(:noteable => @merge_request)
41 41  
  42 + render_full_content
  43 +
42 44 respond_to do |format|
43 45 format.html
44 46 format.js { respond_with_notes }
... ...
app/controllers/projects_controller.rb
... ... @@ -68,7 +68,8 @@ class ProjectsController &lt; ApplicationController
68 68  
69 69 def show
70 70 return render "projects/empty" unless @project.repo_exists? && @project.has_commits?
71   - limit = (params[:limit] || 20).to_i
  71 + limit = (params[:limit] || 10).to_i
  72 +
72 73 @activities = @project.activities(limit)#updates_wo_repo(limit)
73 74 end
74 75  
... ...
app/controllers/refs_controller.rb
... ... @@ -8,16 +8,27 @@ class RefsController &lt; ApplicationController
8 8  
9 9 before_filter :ref
10 10 before_filter :define_tree_vars, :only => [:tree, :blob]
  11 + before_filter :render_full_content
  12 +
11 13 layout "project"
12 14  
13 15 def switch
14   - new_path = if params[:destination] == "tree"
15   - tree_project_ref_path(@project, params[:ref])
16   - else
17   - project_commits_path(@project, :ref => params[:ref])
18   - end
  16 + respond_to do |format|
  17 + format.html do
  18 + new_path = if params[:destination] == "tree"
  19 + tree_project_ref_path(@project, params[:ref])
  20 + else
  21 + project_commits_path(@project, :ref => params[:ref])
  22 + end
19 23  
20   - redirect_to new_path
  24 + redirect_to new_path
  25 + end
  26 + format.js do
  27 + @ref = params[:ref]
  28 + define_tree_vars
  29 + render "tree"
  30 + end
  31 + end
21 32 end
22 33  
23 34 #
... ...
app/controllers/team_members_controller.rb
... ... @@ -40,7 +40,7 @@ class TeamMembersController &lt; ApplicationController
40 40 @team_member.destroy
41 41  
42 42 respond_to do |format|
43   - format.html { redirect_to root_path }
  43 + format.html { redirect_to team_project_path(@project) }
44 44 format.js { render :nothing => true }
45 45 end
46 46 end
... ...
app/helpers/dashboard_helper.rb
... ... @@ -3,6 +3,7 @@ module DashboardHelper
3 3 case object.class.name.to_s
4 4 when "Issue" then project_issue_path(project, project.issues.find(object.id))
5 5 when "Commit" then project_commit_path(project, project.repo.commits(object.id).first)
  6 + when "MergeRequest" then project_merge_request_path(project, object.id)
6 7 when "Note"
7 8 then
8 9 note = object
... ... @@ -26,6 +27,7 @@ module DashboardHelper
26 27 when "Note" then markdown(object.note)
27 28 when "Issue" then object.title
28 29 when "Commit" then object.safe_message
  30 + when "MergeRequest" then object.title
29 31 else return "Project Wall"
30 32 end
31 33  
... ...
app/models/commit.rb
1 1 class Commit
  2 + include ActiveModel::Conversion
  3 + extend ActiveModel::Naming
2 4  
3 5 attr_accessor :commit
4 6 attr_accessor :head
... ... @@ -18,6 +20,10 @@ class Commit
18 20 :id,
19 21 :to => :commit
20 22  
  23 + def persisted?
  24 + false
  25 + end
  26 +
21 27 def initialize(raw_commit, head = nil)
22 28 @commit = raw_commit
23 29 @head = head
... ...
app/views/admin/projects/_form.html.haml
... ... @@ -6,34 +6,31 @@
6 6 - @admin_project.errors.full_messages.each do |msg|
7 7 %li= msg
8 8  
9   - .form-row
  9 + .clearfix
10 10 = f.label :name
11   - %br
12   - = f.text_field :name
13   - .form-row
  11 + .input= f.text_field :name
  12 + .clearfix
14 13 = f.label :code
15   - %br
16   - = f.text_field :code
17   - .form-row
  14 + .input= f.text_field :code
  15 + .clearfix
18 16 = f.label :path
19   - %br
20   - = f.text_field :path
  17 + .input= f.text_field :path
21 18  
22   - .form-row
23   - = f.label :tag_list
24   - %br
25   - = f.text_area :tag_list, :placeholder => "project tags", :style => "height:50px", :id => :tag_field
  19 + - unless @admin_project.new_record?
  20 + .clearfix
  21 + = f.label :owner_id
  22 + .input= f.select :owner_id, User.all.map { |user| [user.name, user.id] }
26 23  
27   - .form-row
  24 + .clearfix
28 25 = f.label :description
29   - %br
30   - = f.text_area :description
  26 + .input= f.text_area :description
31 27 .clear
32 28 %br
33 29 .actions
34   - = f.submit 'Save', :class => "grey-button"
  30 + = f.submit 'Save', :class => "btn"
35 31  
36 32 :javascript
37 33 $(function(){
38 34 taggifyForm();
  35 + $('#project_owner_id').chosen();
39 36 })
... ...
app/views/admin/projects/index.html.haml
... ... @@ -19,4 +19,4 @@
19 19 %td= link_to 'Destroy', [:admin, project], :confirm => 'Are you sure?', :method => :delete
20 20  
21 21 = paginate @admin_projects
22   -= link_to 'New Project', new_admin_project_path, :class => "grey-button"
  22 += link_to 'New Project', new_admin_project_path, :class => "btn"
... ...
app/views/admin/projects/show.html.haml
... ... @@ -31,7 +31,7 @@
31 31 = @admin_project.description
32 32 %tr
33 33 %td{:colspan => 2}
34   - = link_to 'Edit', edit_admin_project_path(@admin_project), :class => "grey-button"
  34 + = link_to 'Edit', edit_admin_project_path(@admin_project), :class => "btn"
35 35  
36 36  
37 37 .span-14
... ... @@ -53,7 +53,7 @@
53 53  
54 54 %tr
55 55 %td{ :colspan => 3 }
56   - = submit_tag 'Add', :class => "positive-button"
  56 + = submit_tag 'Add', :class => "btn primary"
57 57  
58 58 %table.round-borders
59 59 %thead
... ...
app/views/admin/team_members/_form.html.haml
... ... @@ -27,7 +27,7 @@
27 27 = f.select :repo_access, options_for_select(Repository.access_options, @admin_team_member.repo_access), {}, :class => "repo-access-select"
28 28 %br
29 29 .actions
30   - = f.submit 'Save', :class => "grey-button"
  30 + = f.submit 'Save', :class => "btn"
31 31  
32 32 :css
33 33 form select {
... ...
app/views/admin/team_members/index.html.haml
... ... @@ -25,4 +25,4 @@
25 25 %br
26 26  
27 27 = paginate @admin_team_members
28   -= link_to 'New Team Member', new_admin_team_member_path, :class => "grey-button"
  28 += link_to 'New Team Member', new_admin_team_member_path, :class => "btn"
... ...
app/views/admin/users/_form.html.haml
... ... @@ -2,48 +2,41 @@
2 2 = form_for [:admin, @admin_user] do |f|
3 3 -if @admin_user.errors.any?
4 4 #error_explanation
5   - %h2= "#{pluralize(@admin_user.errors.count, "error")} prohibited this admin_user from being saved:"
6 5 %ul
7 6 - @admin_user.errors.full_messages.each do |msg|
8 7 %li= msg
9 8  
10   - .form-row
  9 + .clearfix
11 10 = f.label :name
12   - %br
13   - = f.text_field :name
14   - .form-row
  11 + .input= f.text_field :name
  12 + .clearfix
15 13 = f.label :email
16   - %br
17   - = f.text_field :email
18   - .form-row
  14 + .input= f.text_field :email
  15 + .clearfix
19 16 = f.label :password
20   - %br
21   - = f.password_field :password
22   - .form-row
  17 + .input= f.password_field :password
  18 + .clearfix
23 19 = f.label :password_confirmation
24   - %br
25   - = f.password_field :password_confirmation
26   - .form-row
  20 + .input= f.password_field :password_confirmation
  21 + .clearfix
27 22 = f.check_box :admin
28 23 = f.label :admin
29 24  
30   - .form-row
31   - = f.text_field :projects_limit, :class => "small_input"
  25 + .clearfix
32 26 = f.label :projects_limit
  27 + .input= f.text_field :projects_limit, :class => "small_input"
33 28  
34   - .form-row
  29 + .clearfix
35 30 = f.label :skype
36   - %br
37   - = f.text_field :skype
38   - .form-row
  31 + .input= f.text_field :skype
  32 + .clearfix
39 33 = f.label :linkedin
40   - %br
41   - = f.text_field :linkedin
42   - .form-row
  34 + .input= f.text_field :linkedin
  35 + .clearfix
43 36 = f.label :twitter
44   - %br
45   - = f.text_field :twitter
  37 + .input= f.text_field :twitter
46 38 .clear
47 39 %br
48 40 .actions
49   - = f.submit 'Save', :class => "grey-button"
  41 + = f.submit 'Save', :class => "btn primary"
  42 + = link_to 'Cancel', admin_users_path, :class => "btn"
... ...
app/views/admin/users/index.html.haml
... ... @@ -18,4 +18,4 @@
18 18  
19 19 = paginate @admin_users
20 20 %br
21   -= link_to 'New User', new_admin_user_path, :class => "grey-button"
  21 += link_to 'New User', new_admin_user_path, :class => "btn"
... ...
app/views/admin/users/new.html.haml
1   -%h1 New user
2   -
  1 +%h2 New user
  2 +%hr
3 3 = render 'form'
4   -
5   -%br
6   -= link_to 'Back', admin_users_path, :class => ""
... ...
app/views/admin/users/show.html.haml
... ... @@ -41,7 +41,7 @@
41 41 = @admin_user.twitter
42 42 %tr
43 43 %td{:colspan => 2}
44   - = link_to 'Edit', edit_admin_user_path(@admin_user), :class => "grey-button"
  44 + = link_to 'Edit', edit_admin_user_path(@admin_user), :class => "btn"
45 45  
46 46 .span-14
47 47 %h2 Projects
... ... @@ -66,4 +66,4 @@
66 66 %td= link_to 'Edit', edit_admin_team_member_path(tm)
67 67 %td= link_to 'Cancel', admin_team_member_path(tm), :confirm => 'Are you sure?', :method => :delete
68 68  
69   - = link_to 'Add To Another Project', new_admin_team_member_path(:team_member => {:user_id => @admin_user.id}), :class => "grey-button"
  69 + = link_to 'Add To Another Project', new_admin_team_member_path(:team_member => {:user_id => @admin_user.id}), :class => "btn"
... ...
app/views/commits/_commits.html.haml
1 1 - @commits.group_by { |c| c.committed_date.to_date }.each do |day, commits|
2 2 %div{ :class => "commits-date ui-box ui-box-small ui-box-big" }
3 3 .day-commits-table
4   - %h3= day.stamp("28 Aug, 2010")
5   - .data
  4 + %h5.underlined= day.stamp("28 Aug, 2010")
  5 + %br
  6 + %ul.unstyled
6 7 - commits.each do |commit|
7   - %a{ :class => "commit", :href => project_commit_path(@project, :id => commit.id) }
8   - %span.commit-info
9   - %data.commit-button
10   - = truncate(commit.id.to_s, :length => 16)
11   - %i
12   - %data.commit-browse{ :onclick => "location.href='#{tree_project_ref_path(@project, commit.id)}';return false;"}
13   - Browse Code
14   - - if commit.author_email
15   - = image_tag gravatar_icon(commit.author_email), :class => "left", :width => 40, :style => "padding-right:5px;"
16   - - else
17   - = image_tag "no_avatar.png", :class => "left", :width => 40, :style => "padding-right:5px;"
18   - %span.commit-title
19   - %strong
20   - = truncate(commit.safe_message, :length => 70)
21   - %span.commit-author
22   - Authored by
23   - &nbsp;
24   - %strong= commit.author_name
25   - = time_ago_in_words(commit.authored_date)
26   - ago
27   - - if commit.author_name != commit.committer_name or commit.author_email != commit.committer_email or commit.authored_date != commit.committed_date
28   - %span.commit-committer
29   - Committed by
30   - &nbsp;
31   - %strong= commit.committer_name
32   - = time_ago_in_words(commit.committed_date)
33   - ago
  8 + %li.entry
  9 + = link_to project_commit_path(@project, :id => commit.id) do
  10 + %div
  11 + %strong
  12 + = truncate commit.id.to_s, :length => 10
  13 + &ndash;
  14 + = image_tag gravatar_icon(commit.author_email), :class => "", :width => 16
  15 + = truncate(commit.safe_message, :length => 50)
  16 +
  17 + %span.right.cgray
  18 + = time_ago_in_words(commit.committed_date)
  19 + ago
... ...
app/views/commits/index.html.haml
1   -- content_for(:body_class, "project-page commits-page")
2   -- if current_user.private_token
3   - = content_for :rss_icon do
4   - .rss-icon
  1 +%h3
  2 + Commits
  3 + - if current_user.private_token
  4 + %span.rss-icon
5 5 = link_to project_commits_path(@project, :atom, { :private_token => current_user.private_token, :ref => @ref }) do
6 6 = image_tag "Rss-UI.PNG", :width => 22, :title => "feed"
  7 + = form_tag switch_project_refs_path(@project), :method => :get, :class => "project-refs-form right" do
  8 + = select_tag "ref", grouped_options_refs, :onchange => "$(this.form).trigger('submit');", :class => "project-refs-select"
  9 + = hidden_field_tag :destination, "commits"
  10 +%hr
7 11  
8 12 - if params[:path]
9   - %h2
10   - = link_to project_commits_path(@project) do
11   - = @project.code
12   - \/
13   - %a{:href => "#"}= params[:path].split("/").join(" / ")
  13 + %ul.breadcrumb
  14 + %li
  15 + = link_to project_commits_path(@project) do
  16 + = @project.code
  17 + %span.divider
  18 + \/
  19 + %li
  20 + %a{:href => "#"}= params[:path].split("/").join(" / ")
14 21  
15 22 %div{:id => dom_id(@project)}
16 23 #commits_list= render "commits"
... ... @@ -23,3 +30,8 @@
23 30 $(function(){
24 31 CommitsList.init("#{@ref}", 20);
25 32 });
  33 +
  34 +:javascript
  35 + $(function(){
  36 + $('.project-refs-select').chosen();
  37 + });
... ...
app/views/commits/show.html.haml
1   -- content_for(:body_class, "project-page commits-page")
2 1 .commit
3 2 %span.commit-info
4   - = link_to tree_project_ref_path(@project, @commit.id) do
5   - %data.commit-button
6   - Browse Code
7   - %i
  3 + = link_to tree_project_ref_path(@project, @commit.id), :class => "btn right" do
  4 + Browse Code »
8 5 - if @commit.author_email
9 6 = image_tag gravatar_icon(@commit.author_email), :class => "left", :width => 40, :style => "padding-right:5px;"
10 7 - else
... ...
app/views/dashboard/_issues_feed.html.haml
1   -#feeds_content_holder
2   - - unless @issues.empty?
3   - .project-box.project-updates.ui-box.ui-box-small.ui-box-big
4   - .data
5   - - @issues.each do |update|
6   - %a.project-update{:href => dashboard_feed_path(update.project, update)}
7   - %strong.issue-number= "##{update.id}"
8   - %span.update-title
9   - = truncate update.title, :length => 35
10   - .right= truncate update.project.name
11   - %span.update-author
12   - %strong= update.author_name
13   - authored
14   - = time_ago_in_words(update.created_at)
15   - ago
16   - .right
17   - - if update.critical
18   - %span.tag.high critical
19   - - if update.today?
20   - %span.tag.today today
21   -
22   - - else
23   - %h2
24   - No assigned
25   - %span.tag.open open
26   - issues
  1 +- @issues.each do |issue|
  2 + .alert-message.entry
  3 + = link_to [issue.project, issue] do
  4 + %p
  5 + %strong
  6 + = issue.project.name
  7 + &ndash;
  8 + Issue #
  9 + = issue.id
  10 + = truncate issue.title, :length => 50
... ...
app/views/dashboard/_merge_requests_feed.html.haml
1   -#feeds_content_holder
2   - - unless @merge_requests.empty?
3   - .project-box.project-updates.ui-box.ui-box-small.ui-box-big
4   - .data
5   - - @merge_requests.each do |update|
6   - %a.project-update{:href => project_merge_request_path(update.project, update)}
7   - = image_tag gravatar_icon(update.author_email), :class => "left", :width => 40
8   - %span.update-title
9   - = truncate update.title, :length => 35
10   - .right= truncate update.project.name
11   - %span.update-author
12   - %strong= update.author_name
13   - authored
14   - = time_ago_in_words(update.created_at)
15   - ago
16   - .right
17   - %span.tag.commit= update.source_branch
18   - &rarr;
19   - %span.tag.commit= update.target_branch
20   - - else
21   - %h2
22   - No authored or assigned
23   - %span.tag.open open
24   - merge requests
  1 +- @merge_requests.each do |merge_request|
  2 + .alert-message.entry
  3 + = link_to [merge_request.project, merge_request] do
  4 + %p
  5 + %strong
  6 + = merge_request.project.name
  7 + &ndash;
  8 + Merge Request #
  9 + = merge_request.id
  10 + = truncate merge_request.title, :length => 50
... ...
app/views/dashboard/_projects_feed.html.haml
1   -#feeds_content_holder
2   - - @active_projects.first(3).each do |project|
3   - .project-box.project-updates.ui-box.ui-box-small.ui-box-big
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
  1 +- @active_projects.first(3).each do |project|
  2 + = link_to project do
  3 + %h4= project.name
  4 + - project.updates(3).each do |update|
  5 + %a.project-update{:href => dashboard_feed_path(project, update)}
  6 + = image_tag gravatar_icon(update.author_email), :class => "avatar", :width => 32
  7 + %div
  8 + = dashboard_feed_title(update)
  9 + %span.update-author
  10 + %strong= update.author_name
  11 + authored
  12 + = time_ago_in_words(update.created_at)
  13 + ago
  14 + .right
  15 + - klass = update.class.to_s.split("::").last.downcase
  16 + %span.tag{ :class => klass }= klass
20 17  
... ...
app/views/dashboard/_sidebar.html.haml
... ... @@ -1,15 +0,0 @@
1   -%aside
2   - %h4
3   - - if current_user.can_create_project?
4   - %a.button-small.button-green{:href => new_project_path} New Project
5   - Your Projects
6   - %ol.project-list
7   - - @projects.each do |project|
8   - %li
9   - %a{:href => project_path(project)}
10   - -#%span.arrow →
11   - %span.project-name= project.name
12   - %span.time
13   - %strong Last activity:
14   - = project.last_activity_date_cached ? time_ago_in_words(project.last_activity_date_cached) + " ago" : "Never"
15   -
app/views/dashboard/index.html.haml
1   -- content_for(:body_class, "dashboard-page")
2   -
3   -#dashboard-content.dashboard-content.content
4   - = render "dashboard/sidebar"
5   - #news-feed.news-feed= render "dashboard/projects_feed"
  1 +%h3 Activities
  2 +%hr
  3 +.news-feed= render "dashboard/projects_feed"
... ...
app/views/dashboard/issues.html.haml
1   -- content_for(:body_class, "dashboard-page")
  1 +%h3
  2 + Issues
  3 + %small ( assigned to you )
2 4  
3   -#dashboard-content.dashboard-content.content
4   - = render "dashboard/sidebar"
5   - #news-feed.news-feed= render "dashboard/issues_feed"
  5 +%hr
  6 += render "dashboard/issues_feed"
... ...
app/views/dashboard/merge_requests.html.haml
1   -- content_for(:body_class, "dashboard-page")
  1 +%h3
  2 + Merge Requests
  3 + %small ( authored or assigned to you )
2 4  
3   -#dashboard-content.dashboard-content.content
4   - = render "dashboard/sidebar"
5   - #news-feed.news-feed= render "dashboard/merge_requests_feed"
  5 +%hr
  6 += render "dashboard/merge_requests_feed"
... ...
app/views/deploy_keys/_form.html.haml
1 1 %div
2 2 = form_for [@project, @key], :url => project_deploy_keys_path do |f|
3 3 -if @key.errors.any?
4   - %ul.errors_holder
5   - - @key.errors.full_messages.each do |msg|
6   - %li= msg
7   -
8   - %table.no-borders
9   - %tr
10   - %td= f.label :title
11   - %td= f.text_field :title, :style => "width:300px"
12   - %tr
13   - %td= f.label :key
14   - %td= f.text_area :key, :style => "width:300px; height:130px"
15   - %br
16   - .merge-tabs
17   - = f.submit 'Save', :class => "positive-button"
  4 + .alert-message.block-message.error
  5 + %ul
  6 + - @key.errors.full_messages.each do |msg|
  7 + %li= msg
  8 +
  9 + .clearfix
  10 + = f.label :title
  11 + .input= f.text_field :title
  12 + .clearfix
  13 + = f.label :key
  14 + .input= f.text_area :key, :class => "xlarge"
  15 + .actions
  16 + = f.submit 'Save', :class => "primary btn"
  17 + = link_to "Cancel", project_deploy_keys_path(@project), :class => "btn"
18 18  
... ...
app/views/deploy_keys/index.html.haml
1 1 = render "repositories/head"
2   -
3   -%div#keys-table{ :class => "update-data ui-box ui-box-small ui-box-big" }
4   - .data
5   - - @keys.each do |key|
6   - = render(:partial => 'show', :locals => {:key => key})
7   -
8   -- if @keys.blank?
9   - .notice_holder
10   - %li Deploy Keys do not exist yet.
11   - - if can? current_user, :admin_project, @project
12   - %li You can add a new one by clicking on "Add New" button
13   -
14   -:javascript
15   - $('.delete-key').live('ajax:success', function() {
16   - $(this).closest('.update-item').fadeOut(); });
17   -
  2 +- if can? current_user, :admin_project, @project
  3 + .alert-message.block-message.info
  4 + Deploy keys allow read-only access to repository.
  5 + = link_to new_project_deploy_key_path(@project), :class => "btn small", :title => "New Deploy Key" do
  6 + Add Deploy Key
  7 +
  8 +%ul.unstyled
  9 + - @keys.each do |key|
  10 + %li= render(:partial => 'show', :locals => {:key => key})
... ...
app/views/deploy_keys/show.html.haml
1   -.ui-box.width-100p
2   - %h3= @key.title
3   - .data
4   - %pre= @key.key
5   - .clear
6   - .buttons
7   - = link_to 'Remove', project_deploy_key_path(@key.project, @key), :confirm => 'Are you sure?', :method => :delete, :class => "red-button delete-key right"
8   - .clear
9   -
10   -
  1 += render "repositories/head"
  2 +%h3= @key.title
  3 +%hr
  4 +%pre= @key.key
  5 +.actions
  6 + = link_to 'Remove', project_deploy_key_path(@key.project, @key), :confirm => 'Are you sure?', :method => :delete, :class => "danger btn delete-key"
  7 + .clear
... ...
app/views/devise/passwords/new.html.erb
... ... @@ -3,6 +3,6 @@
3 3 <%= devise_error_messages! %>
4 4 <%= f.email_field :email, :placeholder => "Email", :class => "text top" %>
5 5 <br/>
6   - <%= f.submit "Reset password", :class => "grey-button" %>
  6 + <%= f.submit "Reset password", :class => "primary btn" %>
7 7 <div class="right"> <%= render :partial => "devise/shared/links" %></div>
8 8 <% end %>
... ...
app/views/devise/sessions/new.html.erb
... ... @@ -4,10 +4,10 @@
4 4 <%= f.password_field :password, :class => "text bottom", :placeholder => "Password" %>
5 5  
6 6 <% if devise_mapping.rememberable? -%>
7   - <div><%= f.check_box :remember_me %> <%= f.label :remember_me %></div>
  7 + <div class="clearfix"> <%= f.label :remember_me %><%= f.check_box :remember_me %></div>
8 8 <% end -%>
9 9 <br/>
10   - <%= f.submit "Sign in", :class => "grey-button" %>
  10 + <%= f.submit "Sign in", :class => "primary btn" %>
11 11 <div class="right"> <%= render :partial => "devise/shared/links" %></div>
12 12 <% if ldap_enable? -%>
13 13 <p><%= link_to "via LDAP", user_omniauth_authorize_path(:ldap)%></p>
... ...
app/views/devise/shared/_links.erb
1 1 <%- if controller_name != 'sessions' %>
2   - <%= link_to "Sign in", new_session_path(resource_name) %><br />
  2 + <%= link_to "Sign in", new_session_path(resource_name), :class => "btn" %><br />
3 3 <% end -%>
4 4  
5 5 <%- if devise_mapping.registerable? && controller_name != 'registrations' %>
... ... @@ -7,7 +7,7 @@
7 7 <% end -%>
8 8  
9 9 <%- if devise_mapping.recoverable? && controller_name != 'passwords' %>
10   - <%= link_to "Forgot your password?", new_password_path(resource_name) %><br />
  10 +<%= link_to "Forgot your password?", new_password_path(resource_name), :class => "btn" %><br />
11 11 <% end -%>
12 12  
13 13 <%- if devise_mapping.confirmable? && controller_name != 'confirmations' %>
... ...
app/views/hooks/index.html.haml
1 1 = render "repositories/head"
2   -- unless @hooks.empty?
3   - %div.update-data.ui-box.ui-box-small
4   - .data
5   - - @hooks.each do |hook|
6   - %a.update-item{:href => project_hook_path(@project, hook)}
7   - %span.update-title{:style => "margin-bottom:0px;"}
8   - = hook.url
9   - %span.update-author.right
10   - Added
11   - = time_ago_in_words(hook.created_at)
12   - ago
13   -- else
14   - %h3 No hooks
15 2  
16   -.clear
17   -%hr
18   -%p
19   - Post receive hooks. For now only POST request allowed. We send some data with request. Example below
  3 +- if can? current_user, :admin_project, @project
  4 + .alert-message.block-message.info
  5 + Post receive hooks for binding events when someone push to repository.
  6 + = link_to new_project_hook_path(@project), :class => "btn small", :title => "New Web Hook" do
  7 + Add Post Receive Hook
20 8  
21   -.view_file
22   - .view_file_header
23   - %strong POST data passed
24   - .data.no-padding
25   - = render "data_ex"
  9 +%ul.unstyled
  10 + - @hooks.each do |hook|
  11 + %li
  12 + %a.update-item{:href => project_hook_path(@project, hook)}
  13 + = hook.url
  14 +
  15 +.alert-message.block-message.info
  16 + We send some data with POST request when someone makes git push
  17 +
  18 +.well= render "data_ex"
... ...
app/views/hooks/show.html.haml
1 1 = render "repositories/head"
2   -%h3
3   - %span.commit.tag POST
4   - = @hook.url
5   -
  2 +%pre= @hook.url
6 3  
7 4 - if can? current_user, :admin_project, @project
8   - .merge-tabs
9   - = link_to 'Test Hook', test_project_hook_path(@project, @hook), :class => "grey-button"
10   - .right
11   - = link_to 'Remove', project_hook_path(@project, @hook), :confirm => 'Are you sure?', :method => :delete, :class => "red-button"
  5 + .actions
  6 + = link_to 'Test Hook', test_project_hook_path(@project, @hook), :class => "btn"
  7 + = link_to 'Remove', project_hook_path(@project, @hook), :confirm => 'Are you sure?', :method => :delete, :class => "danger btn"
... ...
app/views/issues/_form.html.haml
1 1 %div.issue-form-holder
2 2 = form_for [@project, @issue], :remote => request.xhr? do |f|
3   - %div
4   - %span.entity-info
5   - - if request.xhr?
6   - = link_to "#back", :onclick => "backToIssues();" do
7   - .entity-button
8   - Issues
9   - %i
10   - - else
11   - - if @issue.new_record?
12   - = link_to project_issues_path(@project) do
13   - .entity-button
14   - Issues
15   - %i
16   - - else
17   - = link_to project_issue_path(@project, @issue) do
18   - .entity-button
19   - Show Issue
20   - %i
21   -
22   - %h2= @issue.new_record? ? "New Issue" : "Edit Issue ##{@issue.id}"
23   - %hr
  3 + %h3= @issue.new_record? ? "New Issue" : "Edit Issue ##{@issue.id}"
  4 + %hr
24 5 -if @issue.errors.any?
25   - %ul.errors_holder
26   - - @issue.errors.full_messages.each do |msg|
27   - %li= msg
  6 + .alert-message.block-message.error
  7 + %ul
  8 + - @issue.errors.full_messages.each do |msg|
  9 + %li= msg
28 10  
29   - %table.no-borders
30   - %tr
31   - %td= f.label :assignee_id
32   - %td= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { :include_blank => "Select user" })
  11 + .clearfix
  12 + = f.label :assignee_id
  13 + .input= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { :include_blank => "Select user" })
33 14  
34   - %tr
35   - %td= f.label :critical, "Critical"
36   - %td= f.check_box :critical
37   -
38   - - unless @issue.new_record?
39   - %tr
40   - %td= f.label :closed
41   - %td= f.check_box :closed
  15 + .clearfix
  16 + = f.label :critical, "Critical"
  17 + .input= f.check_box :critical
42 18  
43   - = f.text_area :title, :style => "width:718px; height:100px", :maxlength => 255
44   - %br
45   - %br
46   - .merge-tabs
47   - = f.submit 'Save', :class => "positive-button"
48   - &nbsp;
  19 + - unless @issue.new_record?
  20 + .clearfix
  21 + = f.label :closed
  22 + .input= f.check_box :closed
  23 +
  24 + .clearfix
  25 + = f.label :title
  26 + .input= f.text_area :title, :maxlength => 255, :class => "xlarge"
  27 + .actions
  28 + = f.submit 'Save', :class => "primary btn"
  29 +
  30 + - if request.xhr?
  31 + = link_to "Cancel", "#back", :onclick => "backToIssues();", :class => "btn"
  32 + - else
  33 + - if @issue.new_record?
  34 + = link_to "Cancel", project_issues_path(@project), :class => "btn"
  35 + - else
  36 + = link_to "Cancel", project_issue_path(@project, @issue), :class => "btn"
  37 +
  38 +
49 39 - unless @issue.new_record?
50 40 .right
51   - = link_to 'Remove', [@project, @issue], :confirm => 'Are you sure?', :method => :delete, :class => "red-button"
  41 + = link_to 'Remove', [@project, @issue], :confirm => 'Are you sure?', :method => :delete, :class => "danger btn"
... ...
app/views/issues/_head.html.haml
1   -.top-tabs
2   - = link_to project_issues_path(@project), :class => "tab #{'active' if current_page?(project_issues_path(@project)) }" do
3   - %span
4   - Issues
5   -
6   - -#= link_to project_issues_path(@project), :class => "tab" do
7   - %span
8   - Milestones
9   -
10   - - if current_page?(project_issues_path(@project))
11   - - if can? current_user, :write_issue, @project
12   - = link_to new_project_issue_path(@project), :class => "add_new", :title => "New Issue", :remote => true do
13   - Add new
14   -
  1 +.tabs
  2 + %li{:class => "#{'active' if current_page?(project_issues_path(@project))}"}
  3 + = link_to project_issues_path(@project), :class => "tab" do
  4 + Issues
... ...
app/views/issues/_show.html.haml
1   -%tr{ :id => dom_id(issue), :class => "issue #{issue.critical ? "critical" : ""}", :url => project_issue_path(issue.project, issue) }
2   - %td
3   - %strong.issue-number{:class => sort_class}= "##{issue.id}"
4   - %span
5   - = truncate(html_escape(issue.title), :length => 100)
6   - %br
7   - %br
8   - %div.note-author
9   - %strong= issue.assignee.name
10   - %cite.cgray
11   - = time_ago_in_words(issue.created_at)
12   - ago
13   - - if issue.critical
14   - %span.tag.high critical
15   - - if issue.today?
16   - %span.tag.today today
17   - .right.action-links
18   - - if can? current_user, :write_issue, issue
19   - - if issue.closed
20   - = link_to 'Reopen', project_issue_path(issue.project, issue, :issue => {:closed => false }, :status_only => true), :method => :put, :class => "cgray", :remote => true
21   - - else
22   - = link_to 'Resolve', project_issue_path(issue.project, issue, :issue => {:closed => true }, :status_only => true), :method => :put, :class => "cgray", :remote => true
23   - - if can? current_user, :write_issue, issue
24   - = link_to 'Edit', edit_project_issue_path(issue.project, issue), :class => "cgray edit-issue-link", :remote => true
25   - - if can?(current_user, :admin_issue, @project) || issue.author == current_user
26   - = link_to 'Remove', [issue.project, issue], :confirm => 'Are you sure?', :method => :delete, :remote => true, :class => "cred delete-issue negative", :id => "destroy_issue_#{issue.id}"
  1 +%li.wll{ :id => dom_id(issue), :class => "issue #{issue.critical ? "critical" : ""}", :url => project_issue_path(issue.project, issue) }
  2 + = image_tag gravatar_icon(issue.assignee_email), :class => "avatar"
  3 + %span.update-author
  4 + assigned to
  5 + %strong
  6 + = link_to project_team_member_path(@project, @project.team_member_by_id(issue.author_id)), :class => "author_link" do
  7 + = issue.assignee_name
  8 + - if issue.critical
  9 + %span.label.important critical
  10 + - if issue.today?
  11 + %span.label.success today
  12 +
  13 + .right
  14 + - if can? current_user, :write_issue, issue
  15 + - if issue.closed
  16 + = link_to 'Reopen', project_issue_path(issue.project, issue, :issue => {:closed => false }, :status_only => true), :method => :put, :class => "btn small", :remote => true
  17 + - else
  18 + = link_to 'Resolve', project_issue_path(issue.project, issue, :issue => {:closed => true }, :status_only => true), :method => :put, :class => "success btn small", :remote => true
  19 + - if can? current_user, :write_issue, issue
  20 + = link_to 'Edit', edit_project_issue_path(issue.project, issue), :class => "btn small edit-issue-link", :remote => true
  21 + -#- if can?(current_user, :admin_issue, @project) || issue.author == current_user
  22 + = link_to 'Remove', [issue.project, issue], :confirm => 'Are you sure?', :method => :delete, :remote => true, :class => "danger btn small delete-issue", :id => "destroy_issue_#{issue.id}"
  23 +
  24 +
  25 + = link_to project_issue_path(issue.project, issue) do
  26 + %p
  27 + Issue ##{issue.id}:
  28 + = truncate(issue.title, :length => 50)
  29 +
  30 +
  31 +
  32 +
... ...
app/views/issues/index.html.haml
1   -= render "issues/head"
2   -- if current_user.private_token
3   - = content_for :rss_icon do
4   - .rss-icon
  1 +.issues_content
  2 + %h3
  3 + Issues
  4 + %span.rss-icon
5 5 = link_to project_issues_path(@project, :atom, { :private_token => current_user.private_token }) do
6 6 = image_tag "Rss-UI.PNG", :width => 22, :title => "feed"
7 7  
8   -%div#issues-table-holder
9   - .top_panel_issues
10   - = form_tag search_project_issues_path(@project), :method => :get, :remote => true, :class => :right, :id => "issue_search_form" do
11   - = hidden_field_tag :project_id, @project.id, { :id => 'project_id' }
12   - = search_field_tag :issue_search, nil, { :placeholder => 'Search', :class => 'issue_search' }
  8 + - if can? current_user, :write_issue, @project
  9 + = link_to new_project_issue_path(@project), :class => "right btn small", :title => "New Issue", :remote => true do
  10 + New Issue
  11 + %hr
  12 + %div#issues-table-holder
  13 + .row
  14 + .span8
  15 + %ul.pills.left
  16 + %li{:class => ("active" if (params[:f] == "0" || !params[:f]))}
  17 + = link_to project_issues_path(@project, :f => 0) do
  18 + Open
  19 + %li{:class => ("active" if params[:f] == "2")}
  20 + = link_to project_issues_path(@project, :f => 2) do
  21 + Closed
  22 + %li{:class => ("active" if params[:f] == "3")}
  23 + = link_to project_issues_path(@project, :f => 3) do
  24 + To Me
  25 + %li{:class => ("active" if params[:f] == "1")}
  26 + = link_to project_issues_path(@project, :f => 1) do
  27 + All
13 28  
14   - .left.issues_filter
15   - = form_tag project_issues_path(@project), :method => :get do
16   - .left
17   - = radio_button_tag :f, 0, (params[:f] || "0") == "0", :onclick => "setIssueFilter(this.form, 0)", :id => "open_issues", :class => "status"
18   - = label_tag "open_issues" do
19   - %span.tag.open Open
20   - .left
21   - = radio_button_tag :f, 2, params[:f] == "2", :onclick => "setIssueFilter(this.form, 2)", :id => "closed_issues", :class => "status"
22   - = label_tag "closed_issues" do
23   - %span.tag.closed Closed
24   - .left
25   - = radio_button_tag :f, 3, params[:f] == "3", :onclick => "setIssueFilter(this.form, 3)", :id => "my_issues", :class => "status"
26   - = label_tag "my_issues","To Me"
27   - .left
28   - = radio_button_tag :f, 1, params[:f] == "1", :onclick => "setIssueFilter(this.form, 1)", :id => "all_issues", :class => "status"
29   - = label_tag "all_issues","All"
  29 + .span2.right
  30 + = form_tag search_project_issues_path(@project), :method => :get, :remote => true, :id => "issue_search_form", :class => :right do
  31 + = hidden_field_tag :project_id, @project.id, { :id => 'project_id' }
  32 + = hidden_field_tag :status, params[:f]
  33 + = search_field_tag :issue_search, nil, { :placeholder => 'Search', :class => 'issue_search' }
  34 +
  35 + %hr
  36 + %ul#issues-table.unstyled= render "issues"
30 37  
31   - .clear
32   - %hr
33   - %table.no-borders#issues-table
34   - = render "issues"
35   - %br
36 38 :javascript
37 39 var href = $('.issue_search').parent().attr('action');
38 40 var last_terms = '';
39 41  
40   - var setIssueFilter = function(form, value){
41   - $.cookie('issue_filter', value, { expires: 140 });
42   - form.submit();
43   - }
44   -
45 42 $('.issue_search').keyup(function() {
46 43 var terms = $(this).val();
47 44 var project_id = $('#project_id').val();
48   - var status = $('.status:checked').val();
  45 + var status = $('#status').val();
49 46 if (terms != last_terms) {
50 47 last_terms = terms;
51 48  
52 49 if (terms.length >= 2 || terms.length == 0) {
53 50 $.get(href, { 'status': status, 'terms': terms, project: project_id }, function(response) {
54   - $('#issues-table tbody').html(response);
  51 + $('#issues-table').html(response);
55 52 setSortable();
56 53 });
57 54 }
... ... @@ -62,7 +59,7 @@
62 59 $(this).closest('tr').fadeOut(); updatePage();});
63 60  
64 61 function setSortable(){
65   - $('#issues-table>tbody').sortable({
  62 + $('#issues-table').sortable({
66 63 axis: 'y',
67 64 dropOnEmpty: false,
68 65 handle: '.handle',
... ... @@ -73,10 +70,10 @@
73 70 update: function(){
74 71 $.ajax({
75 72 type: 'post',
76   - data: $('#issues-table>tbody').sortable('serialize'),
  73 + data: $('#issues-table').sortable('serialize'),
77 74 dataType: 'script',
78 75 complete: function(request){
79   - $('#issues-table>tbody').effect('highlight');
  76 + $('#issues-table').effect('highlight');
80 77 },
81 78 url: "#{sort_project_issues_path(@project)}"})
82 79 }
... ...
app/views/issues/index.js.haml
1 1 :plain
2   - $('#issues-table tbody').html("#{escape_javascript(render('issues'))}");
  2 + $('#issues-table').html("#{escape_javascript(render('issues'))}");
3 3 setSortable();
... ...
app/views/issues/show.html.haml
1   -%div
2   - %span.entity-info
  1 +%h3
  2 + Issue ##{@issue.id}
  3 + %small
  4 + created at
  5 + = @issue.created_at.stamp("Aug 21, 2011")
  6 +
  7 + %span.right
  8 + - if can?(current_user, :admin_project, @project) || @issue.author == current_user
  9 + - if @issue.closed
  10 + = link_to 'Reopen', project_issue_path(@project, @issue, :issue => {:closed => false }, :status_only => true), :method => :put, :class => "btn"
  11 + - else
  12 + = link_to 'Close', project_issue_path(@project, @issue, :issue => {:closed => true }, :status_only => true), :method => :put, :class => "btn", :title => "Close merge request"
3 13 - if can?(current_user, :admin_project, @project) || @issue.author == current_user
4   - = link_to edit_project_issue_path(@project, @issue) do
5   - .entity-button
6   - Edit Issue
7   - %i
8   - = image_tag gravatar_icon(@issue.author_email), :class => "left", :width => 40, :style => "padding-right:5px;"
9   - %span.commit-title
10   - %strong
11   - = "Issue ##{@issue.id}:"
12   - %span.commit-author
13   - %strong
14   - = link_to project_team_member_path(@project, @project.team_member_by_id(@issue.author.id)) do
15   - %span.author= @issue.author_name
16   - - if @issue.author != @issue.assignee
17   - &rarr;
18   - = link_to project_team_member_path(@project, @project.team_member_by_id(@issue.assignee.id)) do
19   - %span.author= @issue.assignee_name
20   - &nbsp;
21   -
22   - &nbsp;
23   - = @issue.created_at.stamp("Aug 21, 2011 9:23pm")
24   -
25   - %hr
26   - %br
27   - %h3
28   - = simple_format @issue.title
29   -
30   -.clear
31   -%br
32   -%br
33   -
34   -.merge-tabs
35   - = link_to "#notes", :class => "merge-notes-tab active tab" do
36   - %span
37   - Notes
38   - .right
39   - - if @issue.closed
40   - = link_to 'Reopen', project_issue_path(@project, @issue, :issue => {:closed => false }, :status_only => true), :method => :put, :class => "red-button"
41   - - else
42   - = link_to 'Close', project_issue_path(@project, @issue, :issue => {:closed => true }, :status_only => true), :method => :put, :class => "positive-button"
43   -
44   -.merge-request-notes
45   - .issue_notes= render "notes/notes"
46   - .loading{ :style => "display:none;"}
47   - %center= image_tag "ajax-loader.gif"
48   - .clear
  14 + = link_to edit_project_issue_path(@project, @issue), :class => "btn small" do
  15 + Edit
  16 +
  17 +%hr
  18 +- if @issue.closed
  19 + .alert-message.error Closed
  20 +- else
  21 + .alert-message.success Open
  22 +
  23 +
  24 +%div.well
  25 + %div
  26 + %cite.cgray Created by
  27 + = image_tag gravatar_icon(@issue.author_email), :width => 16, :class => "lil_av"
  28 + = link_to project_team_member_path(@project, @project.team_member_by_id(@issue.author.id)) do
  29 + %strong.author= @issue.author_name
  30 +
  31 + %cite.cgray and currently assigned to
  32 + = image_tag gravatar_icon(@issue.assignee_email), :width => 16, :class => "lil_av"
  33 + = link_to project_team_member_path(@project, @project.team_member_by_id(@issue.assignee.id)) do
  34 + %strong.author= @issue.assignee_name
  35 +
  36 + %hr
  37 +
  38 + %div= simple_format @issue.title
  39 +
  40 +
  41 +.issue_notes= render "notes/notes"
49 42  
... ...
app/views/keys/_form.html.haml
1 1 %div
2   - = form_for @key, :remote => true do |f|
  2 + = form_for @key do |f|
3 3 -if @key.errors.any?
4   - %ul
5   - - @key.errors.full_messages.each do |msg|
6   - %li= msg
  4 + .alert-message.block-message.error
  5 + %ul
  6 + - @key.errors.full_messages.each do |msg|
  7 + %li= msg
7 8  
8   - .form-row
  9 + .clearfix
9 10 = f.label :title
10   - = f.text_field :title, :style => "width:300px"
11   - .form-row
  11 + .input= f.text_field :title
  12 + .clearfix
12 13 = f.label :key
13   - = f.text_area :key, :style => "width:300px; height:130px"
14   - .form-row
15   - = f.submit 'Save', :class => "grey-button"
  14 + .input= f.text_area :key, :class => "xlarge"
  15 + .actions
  16 + = f.submit 'Save', :class => "primary btn"
  17 + = link_to "Cancel", keys_path, :class => "btn"
16 18  
... ...
app/views/keys/_show.html.haml
1   -%a.update-item{:href => key_path(key)}
2   - %span.update-title
3   - = key.title
4   - %span.update-author
5   - Added
6   - = time_ago_in_words(key.created_at)
7   - ago
  1 +%li.entry
  2 + = link_to key_path(key) do
  3 + %strong= key.title
  4 + %span.right.cgray
  5 + Added
  6 + = time_ago_in_words(key.created_at)
  7 + ago
... ...
app/views/keys/index.html.haml
1   -%h2.icon
2   - %span>
  1 +%h3
3 2 SSH Keys
4   -%div#new-key-holder.right
5   - = link_to "Add new", new_key_path, :remote => true, :class => "grey-button"
6   -%br
  3 + = link_to "Add new", new_key_path, :class => "btn small right"
  4 +
  5 +%hr
7 6  
8 7 %div#keys-table{ :class => "update-data ui-box ui-box-small ui-box-big" }
9   - .data
  8 + %ul.unstyled
10 9 - @keys.each do |key|
11 10 = render(:partial => 'show', :locals => {:key => key})
12   -
13   -:javascript
14   - $('.delete-key').live('ajax:success', function() {
15   - $(this).closest('.update-item').fadeOut(); });
16   -
... ...
app/views/keys/new.html.haml
1   -%h1 New key
2   -
  1 +%h3 New key
  2 +%hr
3 3 = render 'form'
4   -
5   -= link_to 'Back', keys_path
... ...
app/views/keys/show.html.haml
1   -.ui-box.width-100p
2   - %h3= @key.title
3   - .data
4   - %pre= @key.key
5   - .clear
6   - .buttons
7   - = link_to 'Remove', @key, :confirm => 'Are you sure?', :method => :delete, :class => "red-button delete-key right"
8   - .clear
  1 +%h3= @key.title
  2 +%hr
  3 +%pre= @key.key
  4 +.actions
  5 + = link_to 'Remove', @key, :confirm => 'Are you sure?', :method => :delete, :class => "btn danger delete-key"
9 6  
10 7  
... ...
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/_flash.html.haml
... ... @@ -10,7 +10,7 @@
10 10 $("#flash_container").click(function(){
11 11 $(this).slideUp("slow");
12 12 });
13   - setTimeout("hideFlash()",2000);
  13 + setTimeout("hideFlash()",3000);
14 14 });
15 15  
16 16 function hideFlash(){
... ...
app/views/layouts/_head_panel.html.haml
... ... @@ -11,23 +11,7 @@
11 11 = truncate @project.name, :length => 28
12 12 .git_url_wrapper
13 13 %input.git-url.text{:id => "", :name => "", :readonly => "", :type => "text", :value => @project.url_to_repo, :class => "one_click_select"}
14   - - if @project.repo_exists?
15   - .left{:style => "margin-left:5px;"}
16   - = render :partial => "projects/refs", :locals => { :destination => controller.controller_name == "commits" ? "commits" : "tree" }
17   - = yield :rss_icon
18 14  
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 15  
32 16 .account-box
33 17 = link_to profile_path, :class => "pic" do
... ... @@ -36,16 +20,3 @@
36 20 = link_to profile_path, :class => "username" do
37 21 My profile
38 22 = 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/_project_side.html.haml
... ... @@ -6,14 +6,14 @@
6 6  
7 7 - if @project.repo_exists?
8 8 = link_to "Repository", project_repository_path(@project), :class => repository_tab_class
9   - = link_to "Tree", tree_project_ref_path(@project, @ref || @project.root_ref), :class => tree_tab_class
10   - = link_to "Commits", project_commits_path(@project, :ref => (@ref || @project.root_ref)), :class => (controller.controller_name == "commits") ? "current" : nil
  9 + = link_to "Code", tree_project_ref_path(@project, @project.root_ref), :class => tree_tab_class
  10 + = link_to "Commits", project_commits_path(@project), :class => (controller.controller_name == "commits") ? "current" : nil
11 11 = link_to "Network", graph_project_path(@project), :class => current_page?(:controller => "projects", :action => "graph", :id => @project) ? "current" : nil
12 12 = link_to project_issues_filter_path(@project), :class => (controller.controller_name == "issues") ? "current" : nil do
13 13 Issues
  14 + = link_to project_merge_requests_path(@project), :class => (controller.controller_name == "merge_requests") ? "current" : nil do
  15 + Merge Requests
14 16 = link_to wall_project_path(@project), :class => current_page?(:controller => "projects", :action => "wall", :id => @project) ? "current" : nil do
15   - Wall
  17 + @Wall
16 18 - if @project.common_notes.today.count > 0
17   - %span{ :class => "number" }= @project.common_notes.today.count
18   - = link_to project_merge_requests_path(@project), :class => (controller.controller_name == "merge_requests") ? "current" : nil do
19   - Requests
  19 + %span.label= @project.common_notes.today.count
... ...
app/views/layouts/_project_side_right.html.haml 0 → 100644
... ... @@ -0,0 +1,46 @@
  1 +%aside.project-right
  2 + - if content_for? :sidebar_all
  3 + = render :sidebar_all
  4 + - else
  5 + - if content_for? :sidebar_top_block
  6 + = yield :sidebar_top_block
  7 + - else
  8 + - if can? current_user, :write_project, @project
  9 + .alert-message.block-message.info
  10 + You have access to create new issue or merge request.
  11 + %div
  12 + = link_to new_project_issue_path(@project), :title => "New Issue", :class => "btn small" do
  13 + New Issue »
  14 + %div
  15 + = link_to new_project_merge_request_path(@project), :title => "New Merge Request", :class => "btn small" do
  16 + New Merge Request »
  17 +
  18 + - if current_user.projects.count > 0
  19 + %div.entry
  20 + %h5
  21 + Recent Projects:
  22 + %ul
  23 + - current_user.projects.order("id DESC").limit(5).each do |project|
  24 + %li
  25 + = link_to project_path(project) do
  26 + = project.name
  27 + = link_to "More » ", projects_path
  28 +
  29 + -#%h4
  30 + -#Recent Issues:
  31 + -#%ul
  32 + -#- current_user.assigned_issues.order("id DESC").limit(5).each do |issue|
  33 + -#%li
  34 + -#= link_to project_issue_path(issue.project, issue) do
  35 + -#= truncate issue.title
  36 +
  37 +
  38 + -#%h4
  39 + -#Recent Requests:
  40 + -#%ul
  41 + -#- current_user.assigned_merge_requests.order("id DESC").limit(5).each do |issue|
  42 + -#%li
  43 + -#= link_to project_merge_request_path(issue.project, issue) do
  44 + -#= truncate issue.title
  45 +
  46 +
... ...
app/views/layouts/_projects_side.html.haml 0 → 100644
... ... @@ -0,0 +1,38 @@
  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 + - if current_user.projects.count > 0
  11 + %div.entry
  12 + %h5
  13 + Recent Projects:
  14 + %ul
  15 + - current_user.projects.order("id DESC").limit(5).each do |project|
  16 + %li
  17 + = link_to project_path(project) do
  18 + = project.name
  19 + = link_to "More » ", projects_path
  20 +
  21 + -#%h5
  22 + -#Your Issues:
  23 + -#%ul
  24 + -#- current_user.assigned_issues.order("id DESC").limit(5).each do |issue|
  25 + -#%li
  26 + -#= link_to project_issue_path(issue.project, issue) do
  27 + -#= truncate issue.title
  28 +
  29 +
  30 + -#%h5
  31 + -#Your Merge Requests:
  32 + -#%ul
  33 + -#- current_user.assigned_merge_requests.order("id DESC").limit(5).each do |issue|
  34 + -#%li
  35 + -#= link_to project_merge_request_path(issue.project, issue) do
  36 + -#= truncate issue.title
  37 +
  38 +
... ...
app/views/layouts/admin.html.haml
1 1 !!!
2 2 %html
3 3 %head
  4 + %meta{:charset => "utf-8"}
4 5 %title
5 6 GitLab #{" - #{@project.name}" if @project && !@project.new_record?}
6 7 = favicon_link_tag 'favicon.ico'
... ... @@ -10,19 +11,17 @@
10 11 = javascript_tag do
11 12 REQ_URI = "#{request.env["REQUEST_URI"]}";
12 13 REQ_REFFER = "#{request.env["HTTP_REFERER"]}";
13   - %body{ :class => body_class('project-page'), :id => yield(:boyd_id)}
  14 + %body.admin
14 15 = render :partial => "layouts/flash"
15   - #container
16   - = render :partial => "layouts/head_panel"
17   - .project-container
18   - .project-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"
  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"
26 26  
27   - .project-content
28   - = yield
  27 + .content= yield
... ...
app/views/layouts/application.html.haml
1 1 !!!
2 2 %html
3 3 %head
  4 + %meta{:charset => "utf-8"}
4 5 %title
5 6 GitLab
6 7 = favicon_link_tag 'favicon.ico'
7 8 = stylesheet_link_tag "application"
8 9 = javascript_include_tag "application"
9 10 = csrf_meta_tags
10   - = javascript_tag do
11   - REQ_URI = "#{request.env["REQUEST_URI"]}";
12   - REQ_REFFER = "#{request.env["HTTP_REFERER"]}";
13   - %body{ :class => body_class, :id => yield(:boyd_id)}
  11 + %body.application
14 12 = render :partial => "layouts/flash"
15   - #container
16   - = render :partial => "layouts/head_panel"
17   - = render :partial => "layouts/page_title"
18   - = yield
  13 + = render :partial => "layouts/head_panel"
  14 + .container-fluid
  15 + .sidebar
  16 + = render :partial => "layouts/app_side"
  17 + .content
  18 + .row
  19 + .span10= yield
  20 + .span4= render "layouts/projects_side"
... ...
app/views/layouts/devise.html.haml
1 1 !!!
2 2 %html
3 3 %head
  4 + %meta{:charset => "utf-8"}
4 5 %title
5 6 GitLab #{" - #{@project.name}" if @project && !@project.new_record?}
6 7 = favicon_link_tag 'favicon.ico'
... ... @@ -12,4 +13,4 @@
12 13 REQ_REFFER = "#{request.env["HTTP_REFERER"]}";
13 14 %body.login-page
14 15 = render :partial => "layouts/flash"
15   - = yield
  16 + .container-fluid= yield
... ...
app/views/layouts/profile.html.haml
1 1 !!!
2 2 %html
3 3 %head
  4 + %meta{:charset => "utf-8"}
4 5 %title
5 6 GitLab #{" - #{@project.name}" if @project && !@project.new_record?}
6 7 = favicon_link_tag 'favicon.ico'
7 8 = stylesheet_link_tag "application"
8 9 = javascript_include_tag "application"
9 10 = csrf_meta_tags
10   - = javascript_tag do
11   - REQ_URI = "#{request.env["REQUEST_URI"]}";
12   - REQ_REFFER = "#{request.env["HTTP_REFERER"]}";
13   - %body{ :class => body_class('project-page'), :id => yield(:boyd_id)}
  11 + %body.profile
14 12 = render :partial => "layouts/flash"
15   - #container
16   - = render :partial => "layouts/head_panel"
17   - .project-container
18   - .project-sidebar
19   - .fixed
20   - %aside
21   - = link_to "Profile", profile_path, :class => current_page?(:controller => "profile", :action => :show) ? "current" : nil
22   - = link_to "Password & token", profile_password_path, :class => current_page?(:controller => "profile", :action => :password) ? "current" : nil
23   - = link_to "Design", profile_design_path, :class => current_page?(:controller => "profile", :action => :design) ? "current" : nil
24   - = link_to keys_path, :class => controller.controller_name == "keys" ? "current" : nil do
25   - Keys
26   - - unless current_user.keys.empty?
27   - %span{ :class => "number" }= current_user.keys.count
28   -
29   - .project-content
30   - = yield
  13 + = render :partial => "layouts/head_panel"
  14 + .container-fluid
  15 + .sidebar
  16 + %aside
  17 + = link_to "Profile", profile_path, :class => current_page?(:controller => "profile", :action => :show) ? "current" : nil
  18 + = link_to "Password & token", profile_password_path, :class => current_page?(:controller => "profile", :action => :password) ? "current" : nil
  19 + = link_to "Design", profile_design_path, :class => current_page?(:controller => "profile", :action => :design) ? "current" : nil
  20 + = link_to keys_path, :class => controller.controller_name == "keys" ? "current" : nil do
  21 + Keys
  22 + - unless current_user.keys.empty?
  23 + %span.label= current_user.keys.count
  24 + .content
  25 + .row
  26 + .span10= yield
  27 + .span4= render "layouts/projects_side"
... ...
app/views/layouts/project.html.haml
1 1 !!!
2 2 %html
3 3 %head
  4 + %meta{:charset => "utf-8"}
4 5 %title
5   - GitLab #{" - #{@project.name}" if @project && !@project.new_record?}
  6 + GitLab
  7 + = " - #{@project.name}" if @project && !@project.new_record?
6 8 = favicon_link_tag 'favicon.ico'
7 9 = stylesheet_link_tag "application"
8 10 = javascript_include_tag "application"
... ... @@ -11,14 +13,16 @@
11 13 - if request.path == project_issues_path(@project)
12 14 = auto_discovery_link_tag(:atom, project_issues_url(@project, :atom, :private_token => current_user.private_token), :title => "#{@project.name} issues")
13 15 = csrf_meta_tags
14   - = javascript_tag do
15   - REQ_URI = "#{request.env["REQUEST_URI"]}";
16   - REQ_REFFER = "#{request.env["HTTP_REFERER"]}";
17   - %body{ :class => body_class('project-page'), :id => yield(:boyd_id)}
  16 + %body.project
18 17 = render :partial => "layouts/flash"
19   - #container
20   - = render :partial => "layouts/head_panel"
21   - .project-container
22   - = render :partial => "layouts/project_side"
23   - .project-content
  18 + = render :partial => "layouts/head_panel"
  19 + .container-fluid
  20 + .sidebar= render :partial => "layouts/project_side"
  21 + .content
  22 + - if @full_content
24 23 = yield
  24 + - else
  25 + .row
  26 + .span10= yield
  27 + .span4= render "layouts/project_side_right"
  28 +
... ...
app/views/merge_requests/_commits.html.haml
1 1 - if @commits.size > 0
2   - .merge-request-commits.ui-box.width-100p
  2 + .merge-request-commits
3 3 - @commits.each do |commit|
4   - %a{ :class => "commit", :href => project_commit_path(@project, :id => commit.id) }
5   - - if commit.author_email
6   - = image_tag gravatar_icon(commit.author_email), :class => "left", :width => 40, :style => "padding-right:5px;"
7   - - else
8   - = image_tag "no_avatar.png", :class => "left", :width => 40, :style => "padding-right:5px;"
9   - %span.update-title
10   - = truncate commit.safe_message, :length => 60
11   - %span.update-author
12   - %strong= commit.author_name
13   - authored
14   - = time_ago_in_words(commit.created_at)
15   - ago
16   - .clear
  4 + .entry
  5 + = link_to project_commit_path(@project, :id => commit.id) do
  6 + %strong
  7 + = truncate(commit.id.to_s, :length => 10)
  8 + = image_tag gravatar_icon(commit.author_email), :class => "", :width => 16
  9 + %span= truncate(commit.safe_message, :length => 40)
  10 + %span.right
  11 + = time_ago_in_words(commit.committed_date)
  12 + ago
17 13  
18 14 - if @commits.empty?
19 15 %p.cgray Nothing to merge
... ...
app/views/merge_requests/_form.html.haml
1 1 = form_for [@project, @merge_request] do |f|
2   - %div
3   - %span.entity-info
4   - - if @merge_request.new_record?
5   - = link_to project_merge_requests_path(@project) do
6   - .entity-button
7   - Merge Requests
8   - %i
9   - - else
10   - = link_to project_merge_request_path(@project, @merge_request) do
11   - .entity-button
12   - Show Merge Request
13   - %i
  2 + -if @merge_request.errors.any?
  3 + .alert-message.block-message.error
  4 + %ul
  5 + - @merge_request.errors.full_messages.each do |msg|
  6 + %li= msg
14 7  
15   - %h2= @merge_request.new_record? ? "New Merge Request" : "Edit Merge Request ##{@merge_request.id}"
  8 + .clearfix
  9 + = f.label :source_branch, "From"
  10 + .input= f.select(:source_branch, @project.heads.map(&:name), { :include_blank => "Select branch" }, :style => "width:250px")
  11 + .clearfix
  12 + = f.label :target_branch, "To"
  13 + .input= f.select(:target_branch, @project.heads.map(&:name), { :include_blank => "Select branch" }, :style => "width:250px")
  14 + .clearfix
  15 + = f.label :assignee_id, "Assign to"
  16 + .input= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { :include_blank => "Select user" }, :style => "width:250px")
16 17  
17   - %hr
18   - %table.no-borders
19   - -if @merge_request.errors.any?
20   - %tr
21   - %td{:colspan => 2}
22   - #error_explanation
23   - - @merge_request.errors.full_messages.each do |msg|
24   - %span= msg
25   - %br
26   - %tr
27   - %td= f.label :source_branch, "From"
28   - %td= f.select(:source_branch, @project.heads.map(&:name), { :include_blank => "Select branch" }, :style => "width:250px")
29   - %tr
30   - %td= f.label :target_branch, "To"
31   - %td= f.select(:target_branch, @project.heads.map(&:name), { :include_blank => "Select branch" }, :style => "width:250px")
32   - %tr
33   - %td= f.label :assignee_id, "Assign to"
34   - %td= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { :include_blank => "Select user" }, :style => "width:250px")
35   - = f.text_area :title, :style => "width:718px; height:100px", :maxlength => 255
36   - %br
37   - %br
38   - .merge-tabs
39   - = f.submit 'Save', :class => "positive-button"
  18 + .clearfix
  19 + = f.label :title
  20 + .input= f.text_area :title, :class => "xlarge", :maxlength => 255, :rows => 5
  21 + .actions
  22 + = f.submit 'Save', :class => "primary btn"
  23 + - if @merge_request.new_record?
  24 + = link_to project_merge_requests_path(@project), :class => "btn" do
  25 + Cancel
  26 + - else
  27 + = link_to project_merge_request_path(@project, @merge_request), :class => "btn" do
  28 + Cancel
40 29 &nbsp;
41 30 - unless @merge_request.new_record?
42 31 .right
43   - = link_to 'Remove', [@project, @merge_request], :confirm => 'Are you sure?', :method => :delete, :class => "red-button"
  32 + = link_to 'Remove', [@project, @merge_request], :confirm => 'Are you sure?', :method => :delete, :class => "btn danger"
44 33  
45 34  
46 35  
... ...
app/views/merge_requests/_head.html.haml
... ... @@ -2,11 +2,4 @@
2 2 = link_to project_merge_requests_path(@project), :class => "tab #{'active' if current_page?(project_merge_requests_path(@project)) }" do
3 3 %span
4 4 Merge Requests
5   -
6   -
7   - - if current_page?(project_merge_requests_path(@project))
8   - - if can? current_user, :write_merge_request, @project
9   - = link_to new_project_merge_request_path(@project), :class => "add_new", :title => "New Merge request" do
10   - Add new
11   -
12 5  
... ...
app/views/merge_requests/_merge_request.html.haml
1   -%a.update-item{:href => project_merge_request_path(merge_request.project, merge_request)}
2   - = image_tag gravatar_icon(merge_request.author_email), :class => "left", :width => 40
3   - %span.update-title
4   - = truncate(merge_request.title, :length => 60)
  1 +%li.wll
  2 + = image_tag gravatar_icon(merge_request.author_email), :class => "avatar"
5 3 %span.update-author
6   - %strong= merge_request.author_name
  4 + %strong
  5 + = link_to project_team_member_path(@project, @project.team_member_by_id(merge_request.author_id)), :class => "author_link" do
  6 + = merge_request.author_name
7 7 authored
8 8 = time_ago_in_words(merge_request.created_at)
9 9 ago
10 10 .right
11   - %span.tag.commit= merge_request.source_branch
  11 + %span.label= merge_request.source_branch
12 12 &rarr;
13   - %span.tag.commit= merge_request.target_branch
14   -
  13 + %span.label= merge_request.target_branch
  14 + = link_to project_merge_request_path(merge_request.project, merge_request) do
  15 + %p
  16 + Merge Request ##{merge_request.id}:
  17 + = truncate(merge_request.title, :length => 50)
... ...
app/views/merge_requests/edit.html.haml
  1 +%h3
  2 + = "Edit merge request #{@merge_request.id}"
  3 +%hr
1 4 = render 'form'
... ...
app/views/merge_requests/index.html.haml
1   -= render "merge_requests/head"
  1 +%h3
  2 + Merge Requests
  3 + - if can? current_user, :write_issue, @project
  4 + = link_to new_project_merge_request_path(@project), :class => "right btn small", :title => "New Merge Request" do
  5 + New Merge Request
2 6  
3   -.left.issues_filter
4   - = form_tag project_merge_requests_path(@project), :method => :get do
5   - .left
6   - = radio_button_tag :f, 0, (params[:f] || "0") == "0", :onclick => "this.form.submit()", :id => "open_merge_requests", :class => "status"
7   - = label_tag "open_merge_requests" do
8   - %span.tag.open Open
9   - .left
10   - = radio_button_tag :f, 2, params[:f] == "2", :onclick => "this.form.submit()", :id => "closed_merge_requests", :class => "status"
11   - = label_tag "closed_merge_requests" do
12   - %span.tag.closed Closed
13   -
14   -.clear
15 7 %hr
16 8  
17   -- if @merge_requests.count > 0
18   - %div{ :class => "update-data ui-box ui-box-small ui-box-big" }
19   - .data
20   - = render @merge_requests
21   -
22   - .clear
23   - %br
  9 +%ul.pills
  10 + %li{:class => ("active" if (params[:f] == "0" || !params[:f]))}
  11 + = link_to project_merge_requests_path(@project, :f => 0) do
  12 + Open
  13 + %li{:class => ("active" if params[:f] == "2")}
  14 + = link_to project_merge_requests_path(@project, :f => 2) do
  15 + Closed
24 16  
25   -- unless @merge_requests.count > 0 || params[:f] == "2"
26   - .notice_holder
27   - %li Merge Requests do not exist yet.
28   - - if can? current_user, :write_merge_request, @project
29   - %li You can add a new one by clicking on "Add New" button
  17 +%hr
  18 +%ul.unstyled= render @merge_requests
30 19  
... ...
app/views/merge_requests/new.html.haml
  1 +%h3 New Merge Request
  2 +%hr
1 3 = render 'form'
... ...
app/views/merge_requests/show.html.haml
1   -%div
2   - %span.entity-info
  1 +%h3
  2 + = "Merge Request ##{@merge_request.id}:"
  3 + &nbsp;
  4 + %span.label= @merge_request.source_branch
  5 + &rarr;
  6 + %span.label= @merge_request.target_branch
  7 +
  8 + %small
  9 + created at
  10 + = @merge_request.created_at.stamp("Aug 21, 2011")
  11 +
  12 + %span.right
  13 + - if can?(current_user, :admin_project, @project) || @merge_request.author == current_user
  14 + - if @merge_request.closed
  15 + = link_to 'Reopen', project_merge_request_path(@project, @merge_request, :merge_request => {:closed => false }, :status_only => true), :method => :put, :class => "btn"
  16 + - else
  17 + = link_to 'Close', project_merge_request_path(@project, @merge_request, :merge_request => {:closed => true }, :status_only => true), :method => :put, :class => "btn", :title => "Close merge request"
3 18 - if can?(current_user, :admin_project, @project) || @merge_request.author == current_user
4   - = link_to edit_project_merge_request_path(@project, @merge_request) do
5   - .entity-button
6   - Edit Merge Request
7   - %i
8   - = image_tag gravatar_icon(@merge_request.author_email), :class => "left", :width => 40, :style => "padding-right:5px;"
9   - %span.commit-title
10   - %strong
11   - = "Merge Request ##{@merge_request.id}:"
12   - &nbsp;
13   - .tag.commit.inline= @merge_request.source_branch
14   - &rarr;
15   - .tag.commit.inline= @merge_request.target_branch
16   - %span.commit-author
17   - %strong
18   - = link_to project_team_member_path(@project, @project.team_member_by_id(@merge_request.author.id)) do
19   - %span.author= @merge_request.author_name
20   - &rarr;
21   - = link_to project_team_member_path(@project, @project.team_member_by_id(@merge_request.assignee.id)) do
22   - %span.author= @merge_request.assignee_name
  19 + = link_to edit_project_merge_request_path(@project, @merge_request), :class => "btn small" do
  20 + Edit
23 21  
24   - &nbsp;
25   - &nbsp;
26   - = @merge_request.created_at.stamp("Aug 21, 2011 9:23pm")
  22 +%hr
  23 +- if @merge_request.closed
  24 + .alert-message.error Closed
  25 +- else
  26 + .alert-message.success Open
27 27  
28   - %hr
29   - %br
30   - %h3
31   - = simple_format @merge_request.title
32 28  
33   -.clear
34   -%br
35   -%br
  29 +%div.well
  30 + %div
  31 + %cite.cgray Created by
  32 + = image_tag gravatar_icon(@merge_request.author_email), :width => 16, :class => "lil_av"
  33 + = link_to project_team_member_path(@project, @project.team_member_by_id(@merge_request.author.id)) do
  34 + %strong.author= @merge_request.author_name
36 35  
37   -.merge-tabs
38   - = link_to "#notes", :class => "merge-notes-tab active tab" do
39   - %span
40   - Notes
41   - = link_to "#commits", "data-url" => commits_project_merge_request_path(@project, @merge_request), :class => "merge-commits-tab tab" do
42   - %span
43   - Commits
44   - = link_to "#diffs", "data-url" => diffs_project_merge_request_path(@project, @merge_request), :class => "merge-diffs-tab tab" do
45   - %span
46   - Diff
  36 + %cite.cgray and currently assigned to
  37 + = image_tag gravatar_icon(@merge_request.assignee_email), :width => 16, :class => "lil_av"
  38 + = link_to project_team_member_path(@project, @project.team_member_by_id(@merge_request.assignee.id)) do
  39 + %strong.author= @merge_request.assignee_name
  40 +
  41 + %hr
  42 +
  43 +
  44 + %div= simple_format @merge_request.title
  45 +
  46 +
  47 +.tabs
  48 + %li.active
  49 + = link_to "#notes", :class => "merge-notes-tab tab" do
  50 + Notes
  51 + %li
  52 + = link_to "#commits", "data-url" => commits_project_merge_request_path(@project, @merge_request), :class => "merge-commits-tab tab" do
  53 + Commits
  54 + %li
  55 + = link_to "#diffs", "data-url" => diffs_project_merge_request_path(@project, @merge_request), :class => "merge-diffs-tab tab" do
  56 + Diff
47 57  
48   - - if can?(current_user, :admin_project, @project) || @merge_request.author == current_user
49   - .right
50   - - if @merge_request.closed
51   - = link_to 'Reopen', project_merge_request_path(@project, @merge_request, :merge_request => {:closed => false }, :status_only => true), :method => :put, :class => "red-button"
52   - - else
53   - = link_to 'Close', project_merge_request_path(@project, @merge_request, :merge_request => {:closed => true }, :status_only => true), :method => :put, :class => "positive-button", :title => "Close merge request"
54 58 %img{:src => "/assets/ajax-loader-facebook.gif", :class => "dashboard-loader"}
55 59  
56 60 .merge-request-notes
57   - .issue_notes= render "notes/notes"
  61 + .merge_request_notes= render "notes/notes"
58 62 .loading{ :style => "display:none;"}
59 63 %center= image_tag "ajax-loader.gif"
60 64 .clear
... ...
app/views/notes/_form.html.haml
1   -%div
2   - = form_for [@project, @note], :remote => "true", :multipart => true do |f|
3   - -if @note.errors.any?
4   - .errors.error
5   - - @note.errors.full_messages.each do |msg|
6   - %div= msg
  1 += form_for [@project, @note], :remote => "true", :multipart => true do |f|
  2 + %h3 Leave a note
  3 + -if @note.errors.any?
  4 + .alert-message.block-message.error
  5 + - @note.errors.full_messages.each do |msg|
  6 + %div= msg
7 7  
8   - = f.hidden_field :noteable_id
9   - = f.hidden_field :noteable_type
  8 + = f.hidden_field :noteable_id
  9 + = f.hidden_field :noteable_type
  10 + = f.text_area :note, :size => 255
10 11  
11   - %div
12   - = f.label :note
13   - %cite.cgray markdown supported
14   - %br
15   - %br
16   - = f.text_area :note, :size => 255
17   -
18   - %div.attach_holder
19   - %br
20   - = f.label :attachment
21   - %cite.cgray (less than 10 MB)
22   - &nbsp;
23   - = f.file_field :attachment
24   -
25   - %p.notify_controls
26   - %span Notify:
27   - = check_box_tag :notify, 1, @note.noteable_type != "Commit"
28   - = label_tag :notify, "Project team"
  12 + .row
  13 + .span4
  14 + %h5 Notify via email:
  15 + .clearfix
  16 + = label_tag :notify do
  17 + = check_box_tag :notify, 1, @note.noteable_type != "Commit"
  18 + %span Project team
29 19  
30 20 -if @note.noteable_type == "Commit"
31   - = check_box_tag :notify_author, 1 , @note.noteable_type == "Commit"
32   - = label_tag :notify_author, "Commit author"
  21 + = label_tag :notify_author do
  22 + = check_box_tag :notify_author, 1 , @note.noteable_type == "Commit"
  23 + %span Commit author
  24 + .span4.right
  25 + %h5 Attachment:
  26 + .clearfix
  27 + = f.label :attachment, "Any file, < 10 MB"
  28 + .input= f.file_field :attachment, :class => "input-file"
  29 +
33 30  
34   - .clear
35   - %br
36   - = f.submit 'Add note', :class => "positive-button", :id => "submit_note"
  31 + = f.submit 'Add note', :class => "btn primary", :id => "submit_note"
... ...
app/views/notes/_per_line_form.html.haml
1 1 %table{:style => "display:none;"}
2 2 %tr.per_line_form
3 3 %td{:colspan => 3 }
4   - %div
  4 + %div.well
5 5 = form_for [@project, @note], :remote => "true", :multipart => true do |f|
  6 + %h3 Leave a note
6 7 -if @note.errors.any?
7   - .errors.error
  8 + .alert-message.block-message.error
8 9 - @note.errors.full_messages.each do |msg|
9 10 %div= msg
10 11  
11 12 = f.hidden_field :noteable_id
12 13 = f.hidden_field :noteable_type
13 14 = f.hidden_field :line_code
14   -
15   - %div
16   - = f.label :note
17   - %cite.cgray markdown supported
18   - %br
19   - %br
20   - = f.text_area :note, :size => 255
21   -
22   - .clear
23   - %br
24   - = f.submit 'Add note', :class => "positive-button", :id => "submit_note"
25   - .right
26   - = link_to "Close", "#", :class => "grey-button hide-button"
  15 + = f.text_area :note, :size => 255
  16 + .prepend-top-10
  17 + = f.submit 'Add note', :class => "btn primary", :id => "submit_note"
  18 + .right
  19 + = link_to "Close", "#", :class => "btn hide-button"
27 20  
28 21 :javascript
29 22 $(function(){
... ...
app/views/profile/design.html.haml
1   -.ui-box.width-100p
2   - %h3 Design
3   - = form_for @user, :url => profile_update_path, :method => :put do |f|
4   - .data
5   - .left.dark_scheme_box
6   - %label{:for => "user_dark_scheme_false"}
7   - = image_tag "white.png", :width => 310, :height => 212
8   - %center
9   - %h4
10   - = f.radio_button :dark_scheme, false
11   - White code preview
12   - .right.dark_scheme_box
13   - %label{:for => "user_dark_scheme_true"}
14   - = image_tag "dark.png", :width => 310, :height => 212
15   - %center
16   - %h4
17   - = f.radio_button :dark_scheme, true
18   - Dark code preview
19   - .clear
20   - .buttons
21   - = f.submit 'Save', :class => "grey-button"
  1 +%h3 Design
  2 +%hr
  3 += form_for @user, :url => profile_update_path, :method => :put do |f|
  4 + .row
  5 + %label.span4{:for => "user_dark_scheme_false"}
  6 + = image_tag "white.png", :width => 210
  7 + %center
  8 + %h4
  9 + = f.radio_button :dark_scheme, false
  10 + White code preview
  11 + %label.span4{:for => "user_dark_scheme_true"}
  12 + = image_tag "dark.png", :width => 210
  13 + %center
  14 + %h4
  15 + = f.radio_button :dark_scheme, true
  16 + Dark code preview
  17 + .clearfix
  18 + .actions
  19 + = f.submit 'Save', :class => "btn"
22 20  
... ...
app/views/profile/password.html.haml
1   -.ui-box.width-100p.append-bottom-20
2   - %h3 Password
3   - = form_for @user, :url => profile_password_path, :method => :put do |f|
4   - .data
5   - %p After successfull password update you will be redirected to login page where you should login with new password
6   - -if @user.errors.any?
7   - #error_explanation
8   - %ul
9   - - @user.errors.full_messages.each do |msg|
10   - %li= msg
  1 +%h3 Password
  2 +%hr
  3 += form_for @user, :url => profile_password_path, :method => :put do |f|
  4 + .data
  5 + %p After successfull password update you will be redirected to login page where you should login with new password
  6 + -if @user.errors.any?
  7 + #error_explanation
  8 + %ul
  9 + - @user.errors.full_messages.each do |msg|
  10 + %li= msg
11 11  
12   - .form-row
13   - = f.label :password
14   - %br
15   - = f.password_field :password
16   - .form-row
17   - = f.label :password_confirmation
18   - %br
19   - = f.password_field :password_confirmation
20   - .buttons
21   - = f.submit 'Save', :class => "grey-button"
22   -.clear
23   -
24   -.ui-box.width-100p
25   - %h3
26   - Private token
27   - %em.cred.right
28   - keep it in secret!
29   - = form_for @user, :url => profile_reset_private_token_path, :method => :put do |f|
30   - .data
31   - %p Private token used to access application resources without authentication.
32   - %p For example its required to access commits feed.
33   - %hr
34   - %p.cgray
35   - - if current_user.private_token
36   - = text_field_tag "token", current_user.private_token
37   - - else
38   - You don`t have one yet. Click generate to fix it.
39   - .buttons
  12 + .clearfix
  13 + = f.label :password
  14 + .input= f.password_field :password
  15 + .clearfix
  16 + = f.label :password_confirmation
  17 + .input= f.password_field :password_confirmation
  18 + .actions
  19 + = f.submit 'Save', :class => "btn"
  20 +
  21 +%h3
  22 + Private token
  23 + %span.cred.right
  24 + keep it in secret!
  25 +%hr
  26 += form_for @user, :url => profile_reset_private_token_path, :method => :put do |f|
  27 + .data
  28 + %p Private token used to access application resources without authentication.
  29 + %p For example its required to access commits feed.
  30 + %hr
  31 + %p.cgray
40 32 - if current_user.private_token
41   - = f.submit 'Reset', :confirm => "Are you sure?", :class => "grey-button"
  33 + = text_field_tag "token", current_user.private_token
42 34 - else
43   - = f.submit 'Generate', :class => "positive-button"
  35 + You don`t have one yet. Click generate to fix it.
  36 + .actions
  37 + - if current_user.private_token
  38 + = f.submit 'Reset', :confirm => "Are you sure?", :class => "btn"
  39 + - else
  40 + = f.submit 'Generate', :class => "btn"
44 41  
... ...
app/views/profile/show.html.haml
1   -.ui-box.width-100p
2   - %h3= @user.name
3   - = form_for @user, :url => profile_update_path, :method => :put do |f|
4   - .data
5   - .left
6   - -if @user.errors.any?
7   - #error_explanation
8   - %ul
9   - - @user.errors.full_messages.each do |msg|
10   - %li= msg
  1 +.media-grid
  2 + = link_to "#" do
  3 + = image_tag gravatar_icon(@user.email, 90), :class => "thumbnail"
  4 + %h3.media_h= @user.name
11 5  
12   - .form-row
13   - = f.label :name
14   - %br
15   - = f.text_field :name
16   - .form-row
17   - = f.label :email
18   - %br
19   - = f.text_field :email
20   - .form-row
21   - = f.label :skype
22   - %br
23   - = f.text_field :skype
24   - .form-row
25   - = f.label :linkedin
26   - %br
27   - = f.text_field :linkedin
28   - .form-row
29   - = f.label :twitter
30   - %br
31   - = f.text_field :twitter
  6 +%hr
32 7  
33   - .right
34   - = image_tag gravatar_icon(current_user.email,64), :width => 64, :style => "margin:5px; border:5px solid #eee;"
35   - .clear
36   - .buttons
37   - = f.submit 'Save', :class => "grey-button"
  8 += form_for @user, :url => profile_update_path, :method => :put do |f|
  9 + -if @user.errors.any?
  10 + %div.alert-message.block-message.error
  11 + %ul
  12 + - @user.errors.full_messages.each do |msg|
  13 + %li= msg
  14 +
  15 + .clearfix
  16 + = f.label :name
  17 + .input= f.text_field :name
  18 + .clearfix
  19 + = f.label :email
  20 + .input= f.text_field :email
  21 + .clearfix
  22 + = f.label :skype
  23 + .input= f.text_field :skype
  24 + .clearfix
  25 + = f.label :linkedin
  26 + .input= f.text_field :linkedin
  27 + .clearfix
  28 + = f.label :twitter
  29 + .input= f.text_field :twitter
  30 +
  31 + = f.submit 'Save', :class => "primary btn"
38 32  
... ...
app/views/projects/_feed.html.haml
1   -- if update.kind_of?(Note)
2   - %a.project-update.titled{:href => dashboard_feed_path(project, update)}
3   - = image_tag gravatar_icon(update.author_email), :class => "left", :width => 40
4   - %span.update-title
5   - = dashboard_feed_title(update)
6   - %span.update-author
7   - %strong= update.author_name
8   - = time_ago_in_words(update.created_at)
9   - ago
10   - - noteable = update.target
11   - - if noteable.kind_of?(MergeRequest)
12   - .title-block
13   - %span.update-title
14   - %span.commit.tag
15   - Merge Request #
16   - = noteable.id
17   - %span.update-author
18   - %span= noteable.source_branch
  1 +%li.wll
  2 + .row
  3 + .span9
  4 + = image_tag gravatar_icon(update.author_email), :class => "avatar thumb"
  5 + %p
  6 + %strong.author= update.author_name
  7 + %span
  8 + &ndash;
  9 + authored
  10 + = time_ago_in_words(update.created_at)
  11 + ago
  12 + - if update.kind_of? MergeRequest
  13 + = link_to project_merge_request_path(@project, update) do
  14 + = "Opened merge request ##{update.id}."
  15 + %span.label= update.source_branch
19 16 &rarr;
20   - %span= noteable.target_branch
21   -
22   - - elsif noteable.kind_of?(Issue)
23   - .title-block
24   - %span.update-title
25   - %span.commit.tag
26   - Issue #
27   - = noteable.id
28   - %span.update-author
29   - .left= truncate noteable.title
30   -
31   - - elsif noteable.kind_of?(Commit)
32   - .title-block
33   - %span.update-title
34   - %span.commit.tag
35   - commit
36   - %span.update-author
37   - .left= truncate noteable.id
38   - - else
39   - .title-block
40   - %span.update-title
41   - %span.commit.tag
42   - Project Wall
43   -
44   -
45   -- elsif update.kind_of?(MergeRequest)
46   - %a.project-update.titled{:href => project_merge_request_path(project, update)}
47   - = image_tag gravatar_icon(update.author_email), :class => "left", :width => 40
48   - %span.update-title
49   - Opened merge request
50   - %span.update-author
51   - %strong= update.author_name
52   - = time_ago_in_words(update.created_at)
53   - ago
54   - .title-block
55   - %span.update-title
56   - %span.commit.tag
57   - Merge Request #
58   - = update.id
59   - %span.update-author
60   - %span= update.source_branch
61   - &rarr;
62   - %span= update.target_branch
63   -
64   -- elsif update.kind_of?(Issue)
65   - %a.project-update.titled{:href => dashboard_feed_path(project, update)}
66   - = image_tag gravatar_icon(update.author_email), :class => "left", :width => 40
67   - %span.update-title
68   - Created new Issue
69   - %span.update-author
70   - %strong= update.author_name
71   - = time_ago_in_words(update.created_at)
72   - ago
73   - .title-block
74   - %span.update-title
75   - %span.commit.tag
76   - Issue #
77   - = update.id
78   - %span.update-author
79   - .left= truncate update.title
  17 + %span.label= update.target_branch
  18 + - elsif update.kind_of? Issue
  19 + = link_to project_issue_path(@project, update) do
  20 + Opened new
  21 + %span.label.important= "issue ##{update.id}"
  22 + = truncate update.title
  23 + - else
  24 + = link_to [@project, update.target] do
  25 + %p
  26 + = update.target.class.name.titleize
  27 + = truncate(update.target.id.to_s, :length => 10)
  28 + &nbsp;
  29 + = dashboard_feed_title(update)
... ...
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:210px;")
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 &amp; repository. Please wait for few minutes
46   - - else
47   - %h3.prepend-top Updating project &amp; repository. Please wait for few minutes
  31 + %br
48 32  
49   - .merge-tabs
50   - = f.submit 'Save', :class => "grey-button"
51   - &nbsp;
  33 + .actions
  34 + = f.submit 'Save', :class => "btn primary"
  35 + = link_to 'Cancel', @project, :class => "btn"
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 danger"
... ...
app/views/projects/_project_head.html.haml
1   -.top-tabs
2   - = link_to project_path(@project), :class => "activities-tab tab #{'active' if current_page?(project_path(@project)) }" do
3   - %span
4   - Activities
5   - = link_to info_project_path(@project), :class => "stat-tab tab #{'active' if current_page?(info_project_path(@project)) || current_page?(edit_project_path(@project)) }" do
6   - %span
7   - Info
8   - = link_to team_project_path(@project), :class => "team-tab tab #{'active' if current_page?(team_project_path(@project)) }" do
9   - %span
10   - Team
11   - = link_to files_project_path(@project), :class => "files-tab tab #{'active' if current_page?(files_project_path(@project)) }" do
12   - %span
13   - Files
14   - = link_to project_snippets_path(@project), :class => "snippets-tab tab #{'active' if current_page?(project_snippets_path(@project)) }" do
15   - %span
16   - Snippets
  1 +%ul.tabs
  2 + %li{ :class => "#{'active' if current_page?(project_path(@project)) }" }
  3 + = link_to project_path(@project), :class => "activities-tab tab" do
  4 + Activities
  5 + %li{ :class => "#{'active' if current_page?(info_project_path(@project)) || current_page?(edit_project_path(@project)) }" }
  6 + = link_to info_project_path(@project), :class => "stat-tab tab " do
  7 + Info
  8 +
  9 + %li{ :class => " #{'active' if current_page?(team_project_path(@project)) }" }
  10 + = link_to team_project_path(@project), :class => "team-tab tab" do
  11 + Team
  12 + %li{ :class => "#{'active' if current_page?(files_project_path(@project)) }" }
  13 + = link_to files_project_path(@project), :class => "files-tab tab " do
  14 + Files
  15 + %li{ :class => " #{'active' if current_page?(project_snippets_path(@project)) }" }
  16 + = link_to project_snippets_path(@project), :class => "snippets-tab tab" do
  17 + Snippets
17 18  
18 19 - if current_page?(project_snippets_path(@project))
19 20 - if can? current_user, :write_snippet, @project
20   - = link_to new_project_snippet_path(@project), :class => "add_new", :title => "New Snippet" do
21   - Add new
  21 + %li
  22 + = link_to new_project_snippet_path(@project), :class => "add_new", :title => "New Snippet" do
  23 + Add new
22 24  
23 25  
24 26 - if current_page?(team_project_path(@project))
25 27 - if can? current_user, :admin_team_member, @project
26   - = link_to new_project_team_member_path(@project), :class => "add_new", :title => "New Team Member" do
27   - Add New
  28 + %li
  29 + = link_to new_project_team_member_path(@project), :class => "add_new", :title => "New Team Member" do
  30 + Add New
... ...
app/views/projects/_team.html.haml
1   -%table.no-borders#team-table
2   - %thead
3   - %th Name
4   - %th Project
5   - %th Repository
6   - - if can? current_user, :admin_team_member, @project
7   - %th Actions
  1 +%ul.media-grid
8 2 - @project.users_projects.each do |up|
9 3 = render(:partial => 'team_members/show', :locals => {:member => up})
10 4  
... ... @@ -15,5 +9,7 @@
15 9 });
16 10 })
17 11  
  12 + /*
18 13 $('.delete-team-member').live('ajax:success', function() {
19 14 $(this).closest('tr').fadeOut(); });
  15 + */
... ...
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();
... ...