Commit 796784c7c8d385b72cd1e4b5a8f0885d630586fb
Exists in
master
and in
4 other branches
Merge branch 'events' of dev.gitlabhq.com:gitlabhq into events
Showing
23 changed files
with
471 additions
and
47 deletions
Show diff stats
Gemfile
Gemfile.lock
... | ... | @@ -232,9 +232,9 @@ GEM |
232 | 232 | ffi (~> 1.0.9) |
233 | 233 | multi_json (~> 1.0.4) |
234 | 234 | rubyzip |
235 | - shoulda (3.0.0.beta2) | |
236 | - shoulda-context (~> 1.0.0.beta1) | |
237 | - shoulda-matchers (~> 1.0.0.beta1) | |
235 | + shoulda (3.0.0) | |
236 | + shoulda-context (~> 1.0.0) | |
237 | + shoulda-matchers (~> 1.0.0) | |
238 | 238 | shoulda-context (1.0.0) |
239 | 239 | shoulda-matchers (1.0.0) |
240 | 240 | simplecov (0.5.4) |
... | ... | @@ -322,7 +322,7 @@ DEPENDENCIES |
322 | 322 | rspec-rails |
323 | 323 | sass-rails (= 3.2.3) |
324 | 324 | seed-fu |
325 | - shoulda (~> 3.0.0.beta2) | |
325 | + shoulda (= 3.0.0) | |
326 | 326 | simplecov |
327 | 327 | six |
328 | 328 | sqlite3 | ... | ... |
app/assets/images/Gear-UI.PNG
940 Bytes
556 Bytes
app/assets/stylesheets/common.scss
... | ... | @@ -40,6 +40,7 @@ a { |
40 | 40 | .cred { color:#D12F19; } |
41 | 41 | .cgreen { color:#44aa22; } |
42 | 42 | .cblack { color:#111; } |
43 | +.cwhite { color:#fff !important } | |
43 | 44 | |
44 | 45 | /** COMMON STYLES **/ |
45 | 46 | .left { |
... | ... | @@ -75,6 +76,10 @@ a { |
75 | 76 | .no-borders { |
76 | 77 | border:none; |
77 | 78 | } |
79 | +table.no-borders { | |
80 | + border:none; | |
81 | + tr, td { border:none } | |
82 | +} | |
78 | 83 | .no-padding { |
79 | 84 | padding:0 !important; |
80 | 85 | } |
... | ... | @@ -433,7 +438,7 @@ input.git_clone_url { |
433 | 438 | } |
434 | 439 | |
435 | 440 | .project_list_url { |
436 | - width:270px; | |
441 | + width:250px; | |
437 | 442 | background:#fff !important; |
438 | 443 | } |
439 | 444 | |
... | ... | @@ -441,7 +446,7 @@ input.git_clone_url { |
441 | 446 | @include shade; |
442 | 447 | @include round-borders-all(4px); |
443 | 448 | margin-bottom:20px; |
444 | - width:338px; | |
449 | + width:298px; | |
445 | 450 | float:left; |
446 | 451 | margin-left:20px; |
447 | 452 | border: 1px solid #DDD; |
... | ... | @@ -600,3 +605,24 @@ p.time { |
600 | 605 | font-size: 90%; |
601 | 606 | margin: 30px 3px 3px 2px; |
602 | 607 | } |
608 | + | |
609 | + | |
610 | +.dashboard_category { | |
611 | + margin-bottom:30px; | |
612 | + | |
613 | + .dashboard_block { | |
614 | + width:700px; | |
615 | + margin:auto; | |
616 | + | |
617 | + .wll { | |
618 | + border:none; | |
619 | + &:hover { | |
620 | + background:none; | |
621 | + } | |
622 | + | |
623 | + h4 { | |
624 | + color:#666; | |
625 | + } | |
626 | + } | |
627 | + } | |
628 | +} | ... | ... |
app/assets/stylesheets/main.scss
... | ... | @@ -71,6 +71,11 @@ $hover: #FDF5D9; |
71 | 71 | @import "ui_basic.scss"; |
72 | 72 | |
73 | 73 | /** |
74 | + * UI mars theme | |
75 | + */ | |
76 | +@import "ui_mars.scss"; | |
77 | + | |
78 | +/** | |
74 | 79 | * Most of application styles placed here. |
75 | 80 | * This file represent common UI that should not be changed between themes |
76 | 81 | * or project restyling like form width or user avatar class or commit title | ... | ... |
app/assets/stylesheets/ui_basic.scss
... | ... | @@ -57,11 +57,30 @@ |
57 | 57 | text-shadow: 0 1px 1px #FFF; |
58 | 58 | } |
59 | 59 | |
60 | - img { | |
61 | - float: left; | |
62 | - position: relative; | |
63 | - top: -9px; | |
64 | - width:46px; | |
60 | + &.home { | |
61 | + img { | |
62 | + float: left; | |
63 | + position: relative; | |
64 | + top: -9px; | |
65 | + width:46px; | |
66 | + | |
67 | + } | |
68 | + } | |
69 | + &.admin_link { | |
70 | + width:16px; | |
71 | + height:16px; | |
72 | + padding: 5px; | |
73 | + border: 1px solid #ccc; | |
74 | + border-radius: 4px; | |
75 | + margin: 0px; | |
76 | + background: #eee; | |
77 | + margin-left:20px; | |
78 | + &:hover { | |
79 | + background:#f7f7f7; | |
80 | + } | |
81 | + img { | |
82 | + width:16px; | |
83 | + } | |
65 | 84 | } |
66 | 85 | } |
67 | 86 | } | ... | ... |
... | ... | @@ -0,0 +1,316 @@ |
1 | +/** | |
2 | + * This file represent some UI that can be changed | |
3 | + * during web app restyle or theme select. | |
4 | + * | |
5 | + * Next items should be placed there | |
6 | + * - link colors | |
7 | + * - header styles | |
8 | + * - main menu styles | |
9 | + * | |
10 | + */ | |
11 | +.ui_mars { | |
12 | + | |
13 | + /* | |
14 | + * Common styles | |
15 | + * | |
16 | + */ | |
17 | + a { | |
18 | + color: $link_color; | |
19 | + &:hover { | |
20 | + text-decoration:none; | |
21 | + color: $style_color; | |
22 | + } | |
23 | + } | |
24 | + | |
25 | + | |
26 | + /* | |
27 | + * Application Header | |
28 | + * | |
29 | + */ | |
30 | + header { | |
31 | + width:100%; | |
32 | + padding:0; | |
33 | + margin:0; | |
34 | + top:1px; | |
35 | + left:0; | |
36 | + | |
37 | + | |
38 | + background: #474D57 url('bg-header.png') repeat-x bottom; | |
39 | + | |
40 | + z-index:10; | |
41 | + height:60px; | |
42 | + | |
43 | + .search-input { | |
44 | + background:#474D57; | |
45 | + border-color:#888; | |
46 | + } | |
47 | + .app_logo { | |
48 | + width:230px; | |
49 | + float:left; | |
50 | + position:relative; | |
51 | + top:-4px; | |
52 | + | |
53 | + a { | |
54 | + float:left; | |
55 | + | |
56 | + h1 { | |
57 | + | |
58 | + background: url('images.png') no-repeat -3px -7px; | |
59 | + width: 65px; | |
60 | + height: 26px; | |
61 | + margin: 5px 0; | |
62 | + padding: 0; | |
63 | + display: block; | |
64 | + float: left; | |
65 | + text-indent: -1000em; | |
66 | + | |
67 | + } | |
68 | + | |
69 | + &.home { | |
70 | + img { | |
71 | + display:none | |
72 | + | |
73 | + } | |
74 | + } | |
75 | + &.admin_link { | |
76 | + width:16px; | |
77 | + height:16px; | |
78 | + padding: 5px; | |
79 | + border: 1px solid #888; | |
80 | + border-radius: 4px; | |
81 | + margin: 0px; | |
82 | + background:#474D57 ; | |
83 | + margin-left:20px; | |
84 | + margin-top:4px; | |
85 | + &:hover { | |
86 | + background:#f7f7f7; | |
87 | + } | |
88 | + img { | |
89 | + width:16px; | |
90 | + } | |
91 | + } | |
92 | + } | |
93 | + } | |
94 | + .wrapper { | |
95 | + margin:auto; | |
96 | + min-width:$min_app_width; | |
97 | + max-width:$max_app_width; | |
98 | + position:relative; | |
99 | + padding:15px 0; | |
100 | + | |
101 | + .top_panel_content { | |
102 | + margin:0 $app_padding; | |
103 | + } | |
104 | + } | |
105 | + | |
106 | + .project_name { | |
107 | + float:left; | |
108 | + width:400px; | |
109 | + margin:0; | |
110 | + margin-right:30px; | |
111 | + font-size:20px; | |
112 | + line-height:34px; | |
113 | + font-weight:bold; | |
114 | + color:#fff; | |
115 | + text-shadow: 0 1px 1px #111; | |
116 | + } | |
117 | + | |
118 | + .git_url_wrapper { | |
119 | + padding:0px; | |
120 | + margin:0px; | |
121 | + float:left; | |
122 | + | |
123 | + .git-url { | |
124 | + padding:0px; | |
125 | + margin:0px; | |
126 | + font-size: 12px; | |
127 | + margin-right:10px; | |
128 | + border-radius: 4px; | |
129 | + -moz-border-radius: 4px; | |
130 | + color: #666; | |
131 | + border: 1px solid #AAA; | |
132 | + padding: 0 10px 0 30px; | |
133 | + background: transparent url('images.png') no-repeat 8px -42px; | |
134 | + width: 260px; | |
135 | + height:26px; | |
136 | + } | |
137 | + } | |
138 | + | |
139 | + /* Account box */ | |
140 | + .account-box { | |
141 | + position: absolute; | |
142 | + right: 0; | |
143 | + top: 13px; | |
144 | + z-index: 10000; | |
145 | + width: 128px; | |
146 | + font-size: 11px; | |
147 | + float: right; | |
148 | + display: block; | |
149 | + cursor: pointer; | |
150 | + img { | |
151 | + border-radius: 4px; | |
152 | + right: 20px; | |
153 | + position: absolute; | |
154 | + width: 33px; | |
155 | + height: 33px; | |
156 | + display: block; | |
157 | + top: 0; | |
158 | + &:after { | |
159 | + content: " "; | |
160 | + display: block; | |
161 | + position: absolute; | |
162 | + top: 0; | |
163 | + right: 0; | |
164 | + left: 0; | |
165 | + bottom: 0; | |
166 | + float: right; | |
167 | + border-radius: 5px; | |
168 | + border: 1px solid rgba(255, 255, 255, 0.1); | |
169 | + border-bottom: 0; | |
170 | + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(255, 255, 255, 0.15)), to(rgba(0, 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, 0.1)), color-stop(0.501, rgba(255, 255, 255, 0)), color-stop(1, rgba(255, 255, 255, 0))); | |
171 | + background: -moz-linear-gradient(top, rgba(255, 255, 255, 0.15), rgba(0, 0, 0, 0.25)), -moz-linear-gradient(left top, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.1) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0)); | |
172 | + background: linear-gradient(top, rgba(255, 255, 255, 0.15), rgba(0, 0, 0, 0.25)), linear-gradient(left top, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.1) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0)); | |
173 | + -webkit-background-origin: border-box; | |
174 | + -moz-background-origin: border; | |
175 | + background-origin: border-box; } } } | |
176 | + | |
177 | + .account-box { | |
178 | + &.hover { | |
179 | + height: 138px; } | |
180 | + &:hover > .account-links { | |
181 | + display: block; } } | |
182 | + | |
183 | + .account-links { | |
184 | + background: #79C3E0; | |
185 | + display: none; | |
186 | + border-radius: 5px; | |
187 | + width: 100px; | |
188 | + margin-top: 0; | |
189 | + float: right; | |
190 | + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); | |
191 | + position: relative; | |
192 | + &:before { | |
193 | + content: "."; | |
194 | + width: 0; | |
195 | + height: 0; | |
196 | + position: absolute; | |
197 | + border: 5px solid transparent; | |
198 | + border-color: rgba(255, 255, 255, 0); | |
199 | + border-bottom-color: #333; | |
200 | + text-indent: -9999px; | |
201 | + top: -10px; | |
202 | + line-height: 0; | |
203 | + right: 10px; | |
204 | + z-index: 10; } | |
205 | + background: #333; | |
206 | + display: none; | |
207 | + z-index: 100000; | |
208 | + border-radius: 5px; | |
209 | + width: 100px; | |
210 | + position: absolute; | |
211 | + right: 20px; | |
212 | + top: 46px; | |
213 | + margin-top: 0; | |
214 | + float: right; | |
215 | + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); | |
216 | + a { | |
217 | + color: #EEE; | |
218 | + padding: 6px 10px; | |
219 | + display: block; | |
220 | + text-shadow: none; | |
221 | + border-bottom: 1px solid #555; | |
222 | + &:hover { | |
223 | + background: #444; } } } | |
224 | + | |
225 | + .account-box.hover .arrow-up { | |
226 | + top: 41px; | |
227 | + right: 6px; | |
228 | + position: absolute; } | |
229 | + | |
230 | + .account-links a { | |
231 | + &:first-child { | |
232 | + -webkit-border-top-left-radius: 5px; | |
233 | + -webkit-border-top-right-radius: 5px; | |
234 | + -moz-border-radius-topleft: 5px; | |
235 | + -moz-border-radius-topright: 5px; | |
236 | + border-top-left-radius: 5px; | |
237 | + border-top-right-radius: 5px; } | |
238 | + &:last-child { | |
239 | + -webkit-border-bottom-right-radius: 5px; | |
240 | + -webkit-border-bottom-left-radius: 5px; | |
241 | + -moz-border-radius-bottomright: 5px; | |
242 | + -moz-border-radius-bottomleft: 5px; | |
243 | + border-bottom-right-radius: 5px; | |
244 | + border-bottom-left-radius: 5px; | |
245 | + border-bottom: 0; } } | |
246 | + | |
247 | + } | |
248 | + /* | |
249 | + * End of Application Header | |
250 | + * | |
251 | + */ | |
252 | + | |
253 | + /* | |
254 | + * Main Menu of Application | |
255 | + * | |
256 | + */ | |
257 | + nav.main_menu { | |
258 | + overflow:hidden; | |
259 | + border-radius: 4px; | |
260 | + margin: auto; | |
261 | + margin:30px $app_padding; | |
262 | + background:#eee; | |
263 | + border:1px solid #ccc; | |
264 | + height:38px; | |
265 | + background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf)); | |
266 | + background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf); | |
267 | + background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf); | |
268 | + background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf); | |
269 | + @include shade; | |
270 | + .count { | |
271 | + color:#aaa; | |
272 | + margin-left:3px; | |
273 | + } | |
274 | + .label { | |
275 | + background:$hover; | |
276 | + text-shadow:none; | |
277 | + color:$style_color; | |
278 | + } | |
279 | + a { | |
280 | + font-weight:bold; | |
281 | + &:first-child{ | |
282 | + -webkit-border-top-left-radius: 4px; | |
283 | + -webkit-border-bottom-left-radius: 4px; | |
284 | + -moz-border-radius-topleft: 4px; | |
285 | + -moz-border-radius-bottomleft: 4px; | |
286 | + border-top-left-radius: 4px; | |
287 | + border-bottom-left-radius: 4px; | |
288 | + } | |
289 | + padding: 10px 25px; | |
290 | + display: inline-block; | |
291 | + color: $style_color; | |
292 | + border-right: 1px solid #d5d5d5; | |
293 | + position: relative; | |
294 | + box-shadow: 1px 0 0 rgba(255, 255, 255, 0.1); | |
295 | + margin: 0; | |
296 | + float:left; | |
297 | + text-shadow:0 1px 1px white; | |
298 | + &.home { | |
299 | + background: url(home_icon.PNG) no-repeat center center; | |
300 | + text-indent:-9999px; | |
301 | + min-width:40px; | |
302 | + img { | |
303 | + position:relative; | |
304 | + top:4px; | |
305 | + } | |
306 | + } | |
307 | + &.current { | |
308 | + background-color:#DDD; | |
309 | + } | |
310 | + } | |
311 | + } | |
312 | + /* | |
313 | + * End of Main Menu | |
314 | + * | |
315 | + */ | |
316 | +} | ... | ... |
app/controllers/dashboard_controller.rb
... | ... | @@ -3,7 +3,14 @@ class DashboardController < ApplicationController |
3 | 3 | |
4 | 4 | def index |
5 | 5 | @projects = current_user.projects.all |
6 | + | |
6 | 7 | @active_projects = @projects.select(&:repo_exists?).select(&:last_activity_date_cached).sort_by(&:last_activity_date_cached).reverse |
8 | + | |
9 | + @merge_requests = MergeRequest.where("author_id = :id or assignee_id = :id", :id => current_user.id).opened.order("created_at DESC").limit(10) | |
10 | + | |
11 | + @user = current_user | |
12 | + @issues = current_user.assigned_issues.opened.order("created_at DESC").limit(10) | |
13 | + @issues = @issues.includes(:author, :project) | |
7 | 14 | end |
8 | 15 | |
9 | 16 | # Get authored or assigned open merge requests | ... | ... |
app/views/dashboard/_projects_feed.html.haml
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 | |
17 | - | |
1 | +- @active_projects.first(5).each do |project| | |
2 | + .wll | |
3 | + = link_to project do | |
4 | + %h4 | |
5 | + = project.name | |
6 | + %small | |
7 | + last activity at | |
8 | + = project.last_activity_date_cached.stamp("Aug 25, 2011") | ... | ... |
app/views/dashboard/index.html.haml
1 | -%h3 Activities | |
2 | -%hr | |
3 | -.news-feed= render "dashboard/projects_feed" | |
1 | +- if current_user.require_ssh_key? | |
2 | + .alert-message.warning | |
3 | + %p | |
4 | + You wont be able to pull/push project code unless you | |
5 | + = link_to new_key_path, :class => "vlink" do | |
6 | + add new key | |
7 | + to your profile | |
8 | + | |
9 | +%div.dashboard_category | |
10 | + %h3 | |
11 | + Projects | |
12 | + %small | |
13 | + ( most recent ) | |
14 | + | |
15 | + %strong.right | |
16 | + = link_to projects_path do | |
17 | + Projects list → | |
18 | + %hr | |
19 | + .row | |
20 | + .dashboard_block | |
21 | + .row | |
22 | + .span9= render "dashboard/projects_feed" | |
23 | + .span3.right | |
24 | + - if current_user.can_create_project? | |
25 | + .alert-message.block-message.warning | |
26 | + You can create up to | |
27 | + = current_user.projects_limit | |
28 | + projects. Click on link below to add a new one | |
29 | + .link_holder | |
30 | + = link_to new_project_path, :class => "" do | |
31 | + New Project » | |
32 | + | |
33 | + | |
34 | +- unless @merge_requests.blank? | |
35 | + %div.dashboard_category | |
36 | + %h3 | |
37 | + Merge Requests | |
38 | + %small ( authored or assigned to you ) | |
39 | + %strong.right | |
40 | + = link_to dashboard_merge_requests_path do | |
41 | + Vist merge requests page → | |
42 | + %hr | |
43 | + .row | |
44 | + .dashboard_block= render "dashboard/merge_requests_feed" | |
45 | + | |
46 | +- unless @issues.blank? | |
47 | + %div.dashboard_category | |
48 | + %h3 | |
49 | + Issues | |
50 | + %small ( assigned to you ) | |
51 | + %strong.right | |
52 | + = link_to dashboard_merge_requests_path do | |
53 | + Vist issues page → | |
54 | + %hr | |
55 | + .row | |
56 | + .dashboard_block= render "dashboard/issues_feed" | ... | ... |
app/views/dashboard/issues.html.haml
app/views/dashboard/merge_requests.html.haml
app/views/errors/access_denied.html.haml
... | ... | @@ -2,4 +2,4 @@ |
2 | 2 | %h3 Access Denied |
3 | 3 | %hr |
4 | 4 | %p Youre not allowed to access this page |
5 | - %p Ream more about project permissions #{link_to "here", help_permissions_path, :class => "vlink"} | |
5 | + %p Read more about project permissions #{link_to "here", help_permissions_path, :class => "vlink"} | ... | ... |
app/views/layouts/_app_menu.html.haml
1 | 1 | %nav.main_menu |
2 | 2 | = render "layouts/const_menu_links" |
3 | - -#= link_to "Projects", projects_path, :class => "#{"current" if current_page?(projects_path) || current_page?(root_path)}" | |
3 | + = link_to "Projects", projects_path, :class => "#{"current" if current_page?(projects_path)}" | |
4 | 4 | = link_to "Issues", dashboard_issues_path, :class => "#{"current" if current_page?(dashboard_issues_path)}", :id => "issues_slide" |
5 | 5 | = link_to "Requests", dashboard_merge_requests_path, :class => "#{"current" if current_page?(dashboard_merge_requests_path)}", :id => "merge_requests_slide" |
6 | 6 | = link_to "Help", help_path, :class => "#{"current" if controller.controller_name == "help"}" | ... | ... |
app/views/layouts/_const_menu_links.html.haml
app/views/layouts/_head_panel.html.haml
... | ... | @@ -5,7 +5,12 @@ |
5 | 5 | %div.app_logo |
6 | 6 | = link_to root_path, :class => "home", :title => "Home" do |
7 | 7 | = image_tag "logo_tr.png", :width => 50 |
8 | - %h1 GITLAB | |
8 | + %h1 | |
9 | + GITLAB | |
10 | + | |
11 | + - if current_user.is_admin? | |
12 | + = link_to admin_projects_path, :class => "admin_link", :title => "Admin area" do | |
13 | + = image_tag "admin.PNG", :width => 16 | |
9 | 14 | |
10 | 15 | %h1.project_name= title |
11 | 16 | .search= text_field_tag "search", nil, :placeholder => "Search", :class => "search-input" | ... | ... |
app/views/layouts/application.html.haml
app/views/projects/_tile.html.haml
app/views/projects/empty.html.haml
1 | 1 | - if current_user.require_ssh_key? |
2 | 2 | .alert-message.block-message.error |
3 | 3 | %ul |
4 | - %li You have no ssh keys added yo tour profile. | |
4 | + %li You have no ssh keys added to your profile. | |
5 | 5 | %li You wont be able to pull/push repository. |
6 | 6 | %li Visit profile → keys and add public key of every machine you want to use for work with gitlabhq. |
7 | 7 | ... | ... |
app/views/projects/index.html.haml
app/views/protected_branches/index.html.haml
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 | %ul |
7 | 7 | %li keep stable branches secured |
8 | 8 | %li forced code review before merge to protected branches |
9 | - %p Ream more about project permissions #{link_to "here", help_permissions_path, :class => "vlink"} | |
9 | + %p Read more about project permissions #{link_to "here", help_permissions_path, :class => "vlink"} | |
10 | 10 | |
11 | 11 | |
12 | 12 | ... | ... |