Commit 762946995ea9d477f00fea19e5040bf4dd437cb9
Exists in
master
and in
4 other branches
Merge remote-tracking branch 'origin/master' into network_graph
Conflicts: app/assets/stylesheets/projects.css.scss lib/commit_ext.rb
Showing
18 changed files
with
206 additions
and
305 deletions
Show diff stats
app/assets/stylesheets/application.css
@@ -8,3 +8,34 @@ | @@ -8,3 +8,34 @@ | ||
8 | *= require_self | 8 | *= require_self |
9 | *= require_tree . | 9 | *= require_tree . |
10 | */ | 10 | */ |
11 | + | ||
12 | +/** COLORS **/ | ||
13 | +.cgray { color:gray; } | ||
14 | +.cred { color:#D12F19; } | ||
15 | +.cgreen { color:#44aa22; } | ||
16 | + | ||
17 | +/** COMMON STYLES **/ | ||
18 | +.left { | ||
19 | + float:left; | ||
20 | +} | ||
21 | +.right { | ||
22 | + float:right; | ||
23 | +} | ||
24 | +.width-50p{ | ||
25 | + width:50%; | ||
26 | +} | ||
27 | +.width-49p{ | ||
28 | + width:49%; | ||
29 | +} | ||
30 | +.width-30p{ | ||
31 | + width:30%; | ||
32 | +} | ||
33 | +.width-65p{ | ||
34 | + width:65%; | ||
35 | +} | ||
36 | +.append-bottom-10 { | ||
37 | + margin-bottom:10px; | ||
38 | +} | ||
39 | +.prepend-top-10 { | ||
40 | + margin-top:10px; | ||
41 | +} |
app/assets/stylesheets/commits.css.scss
app/assets/stylesheets/issues.css.scss
@@ -10,14 +10,13 @@ | @@ -10,14 +10,13 @@ | ||
10 | color: #444; | 10 | color: #444; |
11 | } | 11 | } |
12 | 12 | ||
13 | -#issues-table-holder .issue:hover .action-links { display:block; } | ||
14 | - | ||
15 | .issues_filter { | 13 | .issues_filter { |
16 | margin-top:10px; | 14 | margin-top:10px; |
17 | .left { | 15 | .left { |
18 | margin-right:15px; | 16 | margin-right:15px; |
19 | } | 17 | } |
20 | } | 18 | } |
19 | + | ||
21 | .top_panel_issues{ | 20 | .top_panel_issues{ |
22 | #issue_search_form { | 21 | #issue_search_form { |
23 | margin:5px 0; | 22 | margin:5px 0; |
@@ -36,3 +35,14 @@ | @@ -36,3 +35,14 @@ | ||
36 | } | 35 | } |
37 | } | 36 | } |
38 | } | 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 | + | ||
48 | + |
app/assets/stylesheets/projects.css.scss
1 | -// Place all the styles related to the Projects controller here. | ||
2 | -// They will automatically be included in application.css. | ||
3 | -// You can use Sass (SCSS) here: http://sass-lang.com/ | ||
4 | - | 1 | +/** MIXINS **/ |
5 | @mixin round-borders-bottom($radius) { | 2 | @mixin round-borders-bottom($radius) { |
6 | border-top: 1px solid #eaeaea; | 3 | border-top: 1px solid #eaeaea; |
7 | -moz-border-radius-bottomright: $radius; | 4 | -moz-border-radius-bottomright: $radius; |
@@ -29,18 +26,6 @@ | @@ -29,18 +26,6 @@ | ||
29 | border-radius: $radius; | 26 | border-radius: $radius; |
30 | } | 27 | } |
31 | 28 | ||
32 | -@mixin hover-color { | ||
33 | - background-color:#FFFFCF; | ||
34 | -} | ||
35 | - | ||
36 | -@mixin panel-color { | ||
37 | - background: #111 !important; | ||
38 | - background: -webkit-gradient(linear,left top,left bottom,from(#333),to(#111)) !important; | ||
39 | - background: -moz-linear-gradient(top,#333,#111) !important; | ||
40 | - background: transparent 9 !important; | ||
41 | -} | ||
42 | - | ||
43 | - | ||
44 | /** File stat **/ | 29 | /** File stat **/ |
45 | .file_stats { | 30 | .file_stats { |
46 | margin-bottom:10px; | 31 | margin-bottom:10px; |
@@ -66,24 +51,16 @@ | @@ -66,24 +51,16 @@ | ||
66 | @include round-borders-all(4px); | 51 | @include round-borders-all(4px); |
67 | padding: 4px 0px; | 52 | padding: 4px 0px; |
68 | } | 53 | } |
54 | + | ||
69 | table.round-borders { | 55 | table.round-borders { |
70 | float:left; | 56 | float:left; |
71 | } | 57 | } |
72 | 58 | ||
73 | - | ||
74 | -#content-container{ | ||
75 | - min-height:250px; | ||
76 | - background: #fff; | ||
77 | - @include round-borders-bottom(8px); | ||
78 | - borders:2px solid #eaeaea; | ||
79 | - border-top: none; | ||
80 | - padding:20px; | ||
81 | -} | ||
82 | - | ||
83 | a { | 59 | a { |
84 | color: #111; | 60 | color: #111; |
85 | } | 61 | } |
86 | 62 | ||
63 | +/** FILE CONTENT VIEW **/ | ||
87 | .view_file_content{ | 64 | .view_file_content{ |
88 | .old_line, .new_line { | 65 | .old_line, .new_line { |
89 | background:#ECECEC; | 66 | background:#ECECEC; |
@@ -122,10 +99,34 @@ a { | @@ -122,10 +99,34 @@ a { | ||
122 | } | 99 | } |
123 | } | 100 | } |
124 | 101 | ||
125 | -.back_small.button{ | 102 | +td.code { |
103 | + width: 100%; | ||
104 | + .highlight { | ||
105 | + margin-left: 55px; | ||
106 | + overflow:auto; | ||
107 | + overflow-y:hidden; | ||
108 | + } | ||
109 | +} | ||
110 | +.highlight pre { | ||
111 | + white-space: pre; | ||
112 | + word-wrap:normal; | ||
113 | +} | ||
126 | 114 | ||
115 | +.highlighttable tr:hover { | ||
116 | + background:white; | ||
117 | +} | ||
118 | +table.highlighttable pre{ | ||
119 | + line-height:16px !important; | ||
120 | + font-size:12px !important; | ||
121 | +} | ||
122 | + | ||
123 | + | ||
124 | +table.highlighttable .linenodiv pre { | ||
125 | + text-align: right; | ||
126 | + padding-right: 4px; | ||
127 | } | 127 | } |
128 | 128 | ||
129 | +/** PROJECTS **/ | ||
129 | input.ssh_project_url { | 130 | input.ssh_project_url { |
130 | padding:5px; | 131 | padding:5px; |
131 | margin:0px; | 132 | margin:0px; |
@@ -149,38 +150,7 @@ input.ssh_project_url { | @@ -149,38 +150,7 @@ input.ssh_project_url { | ||
149 | clear: both; | 150 | clear: both; |
150 | } | 151 | } |
151 | 152 | ||
152 | -.top_project_menu { | ||
153 | - a { | ||
154 | - border-right: 1px solid #FFFFFF; | ||
155 | - box-shadow: -1px 0 #DDDDDD inset; | ||
156 | - color: #666; | ||
157 | - display: block; | ||
158 | - font-size: 16px; | ||
159 | - text-decoration: none; | ||
160 | - line-height: 20px; | ||
161 | - padding: 11px 26px 12px 24px; | ||
162 | - text-shadow: 0 1px 0 #FFFFFF; | ||
163 | - float:left; | ||
164 | - | ||
165 | - &.current { | ||
166 | - background-color: #FFFFFF; | ||
167 | - color: #222222; | ||
168 | - } | ||
169 | - } | ||
170 | -} | ||
171 | - | ||
172 | -.top_bar { | ||
173 | - margin-top:50px; | ||
174 | - background-color: #F4F4F4; | ||
175 | - @include round-borders-top(8px); | ||
176 | - box-shadow: 0 1px #FFFFFF inset, 0 -1px #DDDDDD inset; | ||
177 | - height: 43px; | ||
178 | - overflow: hidden; | ||
179 | - width:990px; | ||
180 | -} | ||
181 | - | ||
182 | /** FORM INPUTS **/ | 153 | /** FORM INPUTS **/ |
183 | - | ||
184 | .user_new, | 154 | .user_new, |
185 | .new_key, | 155 | .new_key, |
186 | .new_issue, | 156 | .new_issue, |
@@ -202,7 +172,6 @@ input.ssh_project_url { | @@ -202,7 +172,6 @@ input.ssh_project_url { | ||
202 | } | 172 | } |
203 | 173 | ||
204 | .input_button { | 174 | .input_button { |
205 | - //@include round-borders-all(4px); | ||
206 | padding:8px; | 175 | padding:8px; |
207 | font-size:14px; | 176 | font-size:14px; |
208 | cursor:pointer; | 177 | cursor:pointer; |
@@ -214,7 +183,6 @@ input.ssh_project_url { | @@ -214,7 +183,6 @@ input.ssh_project_url { | ||
214 | } | 183 | } |
215 | 184 | ||
216 | /** FLASH **/ | 185 | /** FLASH **/ |
217 | - | ||
218 | #flash_container { | 186 | #flash_container { |
219 | height:40px; | 187 | height:40px; |
220 | position:fixed; | 188 | position:fixed; |
@@ -236,7 +204,6 @@ input.ssh_project_url { | @@ -236,7 +204,6 @@ input.ssh_project_url { | ||
236 | } | 204 | } |
237 | 205 | ||
238 | /** Buttons **/ | 206 | /** Buttons **/ |
239 | - | ||
240 | .lbutton, | 207 | .lbutton, |
241 | .lite_button { | 208 | .lite_button { |
242 | display:block; | 209 | display:block; |
@@ -273,126 +240,10 @@ input.ssh_project_url { | @@ -273,126 +240,10 @@ input.ssh_project_url { | ||
273 | width: 60px; | 240 | width: 60px; |
274 | } | 241 | } |
275 | 242 | ||
276 | -.project_thumb { | ||
277 | - margin:20px 0; | ||
278 | - width: 250px; | ||
279 | - float:left; | ||
280 | - padding:20px; | ||
281 | - text-align:center; | ||
282 | - p, h4 { | ||
283 | - text-align:left; | ||
284 | - } | ||
285 | - .lbutton { | ||
286 | - float:left; | ||
287 | - } | ||
288 | -} | ||
289 | - | ||
290 | .handle:hover{ | 243 | .handle:hover{ |
291 | cursor: move; | 244 | cursor: move; |
292 | } | 245 | } |
293 | 246 | ||
294 | -.handle{ | ||
295 | - width: 12px; | ||
296 | - height: 12px; | ||
297 | - padding: 10px; | ||
298 | -} | ||
299 | - | ||
300 | - | ||
301 | -.tag { | ||
302 | - @include round-borders-all(4px); | ||
303 | - padding:2px 4px; | ||
304 | - border:none; | ||
305 | - text-shadow:none; | ||
306 | - | ||
307 | - &.high { | ||
308 | - background: #D12F19; | ||
309 | - color:white; | ||
310 | - } | ||
311 | - | ||
312 | - &.today { | ||
313 | - background: #44aa22; | ||
314 | - color:white; | ||
315 | - } | ||
316 | - | ||
317 | - &.yours { | ||
318 | - background: #4466cc; | ||
319 | - color:white; | ||
320 | - } | ||
321 | - &.normal { | ||
322 | - background: #2c5ca6; | ||
323 | - color:white; | ||
324 | - } | ||
325 | - &.notes { | ||
326 | - background: #2c5c66; | ||
327 | - color:white; | ||
328 | - } | ||
329 | -} | ||
330 | - | ||
331 | - | ||
332 | -.left { | ||
333 | - float:left; | ||
334 | -} | ||
335 | -.right { | ||
336 | - float:right; | ||
337 | -} | ||
338 | - | ||
339 | -.width-50p{ | ||
340 | - width:50%; | ||
341 | -} | ||
342 | -.width-49p{ | ||
343 | - width:49%; | ||
344 | -} | ||
345 | -.width-30p{ | ||
346 | - width:30%; | ||
347 | -} | ||
348 | -.width-65p{ | ||
349 | - width:65%; | ||
350 | -} | ||
351 | -pre.commit_message { | ||
352 | - white-space: pre-wrap; | ||
353 | -} | ||
354 | - | ||
355 | -#container { | ||
356 | -/* min-height:100%;*/ | ||
357 | -} | ||
358 | -.ui-selectmenu{ | ||
359 | - @include round-borders-all(4px); | ||
360 | - margin-right:10px; | ||
361 | - font-size:1.5em; | ||
362 | - height:auto; | ||
363 | - font-weight:bold; | ||
364 | - .ui-selectmenu-status { | ||
365 | - padding:3px 10px; | ||
366 | - } | ||
367 | -} | ||
368 | - | ||
369 | -td.code { | ||
370 | - width: 100%; | ||
371 | - .highlight { | ||
372 | - margin-left: 55px; | ||
373 | - overflow:auto; | ||
374 | - overflow-y:hidden; | ||
375 | - } | ||
376 | -} | ||
377 | -.highlight pre { | ||
378 | - white-space: pre; | ||
379 | - word-wrap:normal; | ||
380 | -} | ||
381 | - | ||
382 | -.highlighttable tr:hover { | ||
383 | - background:white; | ||
384 | -} | ||
385 | -table.highlighttable pre{ | ||
386 | - line-height:16px !important; | ||
387 | - font-size:12px !important; | ||
388 | -} | ||
389 | - | ||
390 | - | ||
391 | -table.highlighttable .linenodiv pre { | ||
392 | - text-align: right; | ||
393 | - padding-right: 4px; | ||
394 | -} | ||
395 | - | ||
396 | .project-refs-form { | 247 | .project-refs-form { |
397 | span { | 248 | span { |
398 | background: none !important; | 249 | background: none !important; |
@@ -408,11 +259,6 @@ table.highlighttable .linenodiv pre { | @@ -408,11 +259,6 @@ table.highlighttable .linenodiv pre { | ||
408 | 259 | ||
409 | .filter .left { margin-right:15px; } | 260 | .filter .left { margin-right:15px; } |
410 | 261 | ||
411 | - | ||
412 | -.cgray { color:gray; } | ||
413 | -.cred { color:#D12F19; } | ||
414 | -.cgreen { color:#44aa22; } | ||
415 | - | ||
416 | body.project-page table .commit { | 262 | body.project-page table .commit { |
417 | a.tree-commit-link { | 263 | a.tree-commit-link { |
418 | color:gray; | 264 | color:gray; |
@@ -422,56 +268,114 @@ body.project-page table .commit { | @@ -422,56 +268,114 @@ body.project-page table .commit { | ||
422 | } | 268 | } |
423 | } | 269 | } |
424 | 270 | ||
271 | +/** NEW PROJECT **/ | ||
272 | +.new-project-hodler { | ||
273 | + .icon span { background-position: -31px -70px; } | ||
274 | + td { border-bottom: 1px solid #DEE2E3; } | ||
275 | +} | ||
276 | + | ||
277 | +/** Feed entry **/ | ||
278 | +.commit, | ||
279 | +.snippet, | ||
280 | +.message { | ||
281 | + .title { | ||
282 | + color:#666; | ||
283 | + a { color:#666 !important; } | ||
284 | + p { margin-top:0px; } | ||
285 | + } | ||
286 | + .author { color: #999 } | ||
287 | +} | ||
425 | 288 | ||
426 | -.snippet .action-links, | ||
427 | -#issues-table-holder .issue .action-links { | 289 | +/** JQuery UI **/ |
290 | +.ui-autocomplete { @include round-borders-all(5px); } | ||
291 | +.ui-menu-item { cursor: pointer } | ||
292 | +.ui-selectmenu{ | ||
293 | + @include round-borders-all(4px); | ||
294 | + margin-right:10px; | ||
295 | + font-size:1.5em; | ||
296 | + height:auto; | ||
297 | + font-weight:bold; | ||
298 | + .ui-selectmenu-status { | ||
299 | + padding:3px 10px; | ||
300 | + } | ||
301 | +} | ||
302 | + | ||
303 | +/** Snippets **/ | ||
304 | +.new_snippet textarea, | ||
305 | +.edit_snippet textarea { | ||
306 | + height:300px; | ||
307 | + padding: 8px; | ||
308 | + width: 95%; | ||
309 | +} | ||
310 | +.snippet .action-links { | ||
428 | display:none; | 311 | display:none; |
429 | a { | 312 | a { |
430 | margin-left:10px; | 313 | margin-left:10px; |
431 | } | 314 | } |
432 | } | 315 | } |
433 | - | ||
434 | .snippet:hover .action-links { display:block; } | 316 | .snippet:hover .action-links { display:block; } |
435 | 317 | ||
318 | +/** ISSUES TAGS **/ | ||
319 | +.tag { | ||
320 | + @include round-borders-all(4px); | ||
321 | + padding:2px 4px; | ||
322 | + border:none; | ||
323 | + text-shadow:none; | ||
436 | 324 | ||
437 | - | ||
438 | -/** NEW PROJECT **/ | ||
439 | -.new-project-hodler { | ||
440 | - .icon span { | ||
441 | - background-position: -31px -70px; | ||
442 | - } | ||
443 | - td { | ||
444 | - border-bottom: 1px solid #DEE2E3; | 325 | + &.high { |
326 | + background: #D12F19; | ||
327 | + color:white; | ||
445 | } | 328 | } |
446 | -} | ||
447 | - | ||
448 | -//.message .note-title p { margin-bottom:0px; } | ||
449 | 329 | ||
450 | -.commit, | ||
451 | -.snippet, | ||
452 | -.message { | ||
453 | - .title { | ||
454 | - color:#666; | ||
455 | - a { | ||
456 | - color:#666 !important; | ||
457 | - } | ||
458 | - p { | ||
459 | - margin-top:0px; | ||
460 | - } | 330 | + &.today { |
331 | + background: #44aa22; | ||
332 | + color:white; | ||
461 | } | 333 | } |
462 | 334 | ||
463 | - .author { | ||
464 | - color: #999 | 335 | + &.yours { |
336 | + background: #4466cc; | ||
337 | + color:white; | ||
338 | + } | ||
339 | + &.normal { | ||
340 | + background: #2c5ca6; | ||
341 | + color:white; | ||
342 | + } | ||
343 | + &.notes { | ||
344 | + background: #2c5c66; | ||
345 | + color:white; | ||
346 | + } | ||
347 | + &.note { | ||
348 | + background: #2c5c66; | ||
349 | + color:white; | ||
350 | + } | ||
351 | + &.issue { | ||
352 | + background: #D12F19; | ||
353 | + color:white; | ||
354 | + } | ||
355 | + &.commit { | ||
356 | + background: #44aacc; | ||
357 | + color:white; | ||
465 | } | 358 | } |
466 | } | 359 | } |
467 | 360 | ||
468 | -/** UI autocomplete **/ | ||
469 | -.ui-autocomplete { @include round-borders-all(5px); } | ||
470 | -.ui-menu-item { cursor: pointer } | ||
471 | - | ||
472 | #holder { | 361 | #holder { |
473 | border: solid 1px #999; | 362 | border: solid 1px #999; |
474 | cursor: move; | 363 | cursor: move; |
475 | height: 70%; | 364 | height: 70%; |
476 | overflow: hidden; | 365 | overflow: hidden; |
477 | } | 366 | } |
367 | + | ||
368 | +/* Project Dashboard Page */ | ||
369 | +html, body { height: 100%; } | ||
370 | + | ||
371 | +body.dashboard.project-page .news-feed h2{float: left;} | ||
372 | +body.dashboard.project-page .news-feed .project-updates {margin-bottom: 20px; display: block; width: 100%;} | ||
373 | +body.dashboard.project-page .news-feed .project-updates .data{ padding: 0} | ||
374 | +body.dashboard.project-page .news-feed .project-updates a.project-update {padding: 10px; border-bottom: 1px solid #eee; overflow: hidden; display: block;} | ||
375 | +body.dashboard.project-page .news-feed .project-updates a.project-update:last-child{border-bottom: 0} | ||
376 | +body.dashboard.project-page .news-feed .project-updates a.project-update img{float: left; margin-right: 10px;} | ||
377 | +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;} | ||
378 | +body.dashboard.project-page .news-feed .project-updates a.project-update span.update-title{margin-bottom: 10px} | ||
379 | +body.dashboard.project-page .news-feed .project-updates a.project-update span.update-author{color: #999; font-weight: normal; font-style: italic;} | ||
380 | +body.dashboard.project-page .news-feed .project-updates a.project-update span.update-author strong{font-weight: bold; font-style: normal;} | ||
381 | +/* eo Dashboard Page */ |
app/controllers/projects_controller.rb
@@ -66,21 +66,8 @@ class ProjectsController < ApplicationController | @@ -66,21 +66,8 @@ class ProjectsController < ApplicationController | ||
66 | 66 | ||
67 | def show | 67 | def show |
68 | return render "projects/empty" unless @project.repo_exists? | 68 | return render "projects/empty" unless @project.repo_exists? |
69 | - @date = case params[:view] | ||
70 | - when "week" then Date.today - 7.days | ||
71 | - when "day" then Date.today | ||
72 | - else nil | ||
73 | - end | ||
74 | - | ||
75 | - if @date | ||
76 | - @date = @date.at_beginning_of_day | ||
77 | - | ||
78 | - @commits = @project.commits_since(@date) | ||
79 | - @messages = project.notes.since(@date).order("created_at DESC") | ||
80 | - else | ||
81 | - @commits = @project.fresh_commits | ||
82 | - @messages = project.notes.fresh.limit(10) | ||
83 | - end | 69 | + limit = (params[:limit] || 40).to_i |
70 | + @activities = @project.updates(limit) | ||
84 | end | 71 | end |
85 | 72 | ||
86 | # | 73 | # |
app/models/repository.rb
@@ -73,7 +73,7 @@ class Repository | @@ -73,7 +73,7 @@ class Repository | ||
73 | 73 | ||
74 | def fresh_commits(n = 10) | 74 | def fresh_commits(n = 10) |
75 | commits = heads.map do |h| | 75 | commits = heads.map do |h| |
76 | - repo.commits(h.name, n) | 76 | + repo.commits(h.name, n).each { |c| c.head = h } |
77 | end.flatten.uniq { |c| c.id } | 77 | end.flatten.uniq { |c| c.id } |
78 | 78 | ||
79 | commits.sort! do |x, y| | 79 | commits.sort! do |x, y| |
@@ -85,7 +85,7 @@ class Repository | @@ -85,7 +85,7 @@ class Repository | ||
85 | 85 | ||
86 | def commits_since(date) | 86 | def commits_since(date) |
87 | commits = heads.map do |h| | 87 | commits = heads.map do |h| |
88 | - repo.log(h.name, nil, :since => date) | 88 | + repo.log(h.name, nil, :since => date).each { |c| c.head = h } |
89 | end.flatten.uniq { |c| c.id } | 89 | end.flatten.uniq { |c| c.id } |
90 | 90 | ||
91 | commits.sort! do |x, y| | 91 | commits.sort! do |x, y| |
app/views/dashboard/index.html.haml
@@ -27,6 +27,8 @@ | @@ -27,6 +27,8 @@ | ||
27 | %a.project-update{:href => dashboard_feed_path(project, update)} | 27 | %a.project-update{:href => dashboard_feed_path(project, update)} |
28 | = image_tag gravatar_icon(update.author_email), :class => "left", :width => 40 | 28 | = image_tag gravatar_icon(update.author_email), :class => "left", :width => 40 |
29 | %span.update-title | 29 | %span.update-title |
30 | + - if update.kind_of?(Grit::Commit) | ||
31 | + %span.right.tag.commit= update.head.name | ||
30 | = dashboard_feed_title(update) | 32 | = dashboard_feed_title(update) |
31 | %span.update-author | 33 | %span.update-author |
32 | %strong= update.author_name | 34 | %strong= update.author_name |
app/views/layouts/project.html.haml
@@ -19,7 +19,7 @@ | @@ -19,7 +19,7 @@ | ||
19 | .git_url_wrapper | 19 | .git_url_wrapper |
20 | %input.git-url.text{:id => "", :name => "", :readonly => "", :type => "text", :value => @project.url_to_repo, :class => "one_click_select"} | 20 | %input.git-url.text{:id => "", :name => "", :readonly => "", :type => "text", :value => @project.url_to_repo, :class => "one_click_select"} |
21 | %aside | 21 | %aside |
22 | - = link_to "History", project_path(@project), :class => current_page?(:controller => "projects", :action => "show", :id => @project) ? "current" : nil | 22 | + = link_to "Activities", project_path(@project), :class => current_page?(:controller => "projects", :action => "show", :id => @project) ? "current" : nil |
23 | = link_to "Tree", tree_project_path(@project), :class => current_page?(:controller => "projects", :action => "tree", :id => @project) ? "current" : nil | 23 | = link_to "Tree", tree_project_path(@project), :class => current_page?(:controller => "projects", :action => "tree", :id => @project) ? "current" : nil |
24 | = link_to "Commits", project_commits_path(@project), :class => current_page?(:controller => "commits", :action => "index", :project_id => @project) ? "current" : nil | 24 | = link_to "Commits", project_commits_path(@project), :class => current_page?(:controller => "commits", :action => "index", :project_id => @project) ? "current" : nil |
25 | = link_to "Network graph", graph_project_path(@project), :class => current_page?(:controller => "projects", :action => "graph", :id => @project) ? "current" : nil | 25 | = link_to "Network graph", graph_project_path(@project), :class => current_page?(:controller => "projects", :action => "graph", :id => @project) ? "current" : nil |
app/views/notes/_form.html.haml
@@ -0,0 +1,15 @@ | @@ -0,0 +1,15 @@ | ||
1 | +%a.project-update{:href => dashboard_feed_path(project, update)} | ||
2 | + = image_tag gravatar_icon(update.author_email), :class => "left", :width => 40 | ||
3 | + %span.update-title | ||
4 | + = dashboard_feed_title(update) | ||
5 | + %span.update-author | ||
6 | + %strong= update.author_name | ||
7 | + authored | ||
8 | + = time_ago_in_words(update.created_at) | ||
9 | + ago | ||
10 | + .right | ||
11 | + - klass = update.class.to_s.split("::").last.downcase | ||
12 | + %span.tag{ :class => klass }= klass | ||
13 | + - if update.kind_of?(Grit::Commit) | ||
14 | + %span.tag.commit= update.head.name | ||
15 | + |
app/views/projects/_recent_commits.html.haml
@@ -1,32 +0,0 @@ | @@ -1,32 +0,0 @@ | ||
1 | -%table | ||
2 | - %thead | ||
3 | - %th | ||
4 | - Commits | ||
5 | - .filter.right | ||
6 | - = form_tag project_path(@project), :method => :get, :class => "right" do | ||
7 | - .left | ||
8 | - = radio_button_tag :view, "recent", (params[:view] || "recent") == "recent", :onclick => "this.form.submit()", :id => "recent_view" | ||
9 | - = label_tag "recent_view","Recent" | ||
10 | - .left | ||
11 | - = radio_button_tag :view, "day", params[:view] == "day", :onclick => "this.form.submit()", :id => "day_view" | ||
12 | - = label_tag "day_view","Today" | ||
13 | - .left | ||
14 | - = radio_button_tag :view, "week", params[:view] == "week", :onclick => "this.form.submit()", :id => "week_view" | ||
15 | - = label_tag "week_view","Week" | ||
16 | - - @commits.each do |commit| | ||
17 | - %tr | ||
18 | - %td | ||
19 | - %div.commit | ||
20 | - - if commit.author.email | ||
21 | - = image_tag gravatar_icon(commit.author.email), :class => "left", :width => 40, :style => "padding-right:5px;" | ||
22 | - - else | ||
23 | - = image_tag "no_avatar.png", :class => "left", :width => 40, :style => "padding-right:5px;" | ||
24 | - .title | ||
25 | - %p= link_to truncate(commit.safe_message, :length => 40), project_commit_path(@project, :id => commit.id) | ||
26 | - | ||
27 | - %span | ||
28 | - %span.author | ||
29 | - %strong= commit.author.name.force_encoding("UTF-8") | ||
30 | - %cite.cgray | ||
31 | - = time_ago_in_words(commit.committed_date) | ||
32 | - ago |
app/views/projects/_recent_messages.html.haml
@@ -1,27 +0,0 @@ | @@ -1,27 +0,0 @@ | ||
1 | -- @messages.group_by{ |x| [x.noteable_id, x.noteable_type]}.each do |item, notes| | ||
2 | - - id, type = item[0], item[1] | ||
3 | - - parent = load_note_parent(id, type, @project) | ||
4 | - - next unless parent | ||
5 | - | ||
6 | - %table | ||
7 | - %thead | ||
8 | - %th | ||
9 | - %div{ :class => "recent_message_parent"} | ||
10 | - = link_to(truncate(dashboard_feed_title(parent), :length => 40 ), dashboard_feed_path(@project, parent)) | ||
11 | - - notes.sort {|x,y| y.updated_at <=> x.updated_at }.each do |note| | ||
12 | - %tr | ||
13 | - %td | ||
14 | - %div.message | ||
15 | - = image_tag gravatar_icon(note.author_email), :class => "left", :width => 40, :style => "padding-right:5px;" | ||
16 | - %div.title | ||
17 | - = link_to markdown(truncate(note.note, :length => 40)), dashboard_feed_path(@project, parent) + "#note_#{note.id}" | ||
18 | - - if note.attachment.url | ||
19 | - %br | ||
20 | - Attachment: | ||
21 | - = link_to note.attachment_identifier, note.attachment.url | ||
22 | - %div.author | ||
23 | - %strong= note.author_name | ||
24 | - %cite.cgray | ||
25 | - = time_ago_in_words(note.updated_at) | ||
26 | - ago | ||
27 | - %br |
app/views/projects/show.html.haml
1 | -.left.width-49p | ||
2 | - =render "projects/recent_commits" | 1 | +- content_for(:body_class, "project-page dashboard") |
3 | 2 | ||
4 | -.right.width-49p | ||
5 | - =render "projects/recent_messages" | 3 | +#news-feed.news-feed |
4 | + %h2.icon | ||
5 | + %span> | ||
6 | + Activities | ||
7 | + .project-box.project-updates.ui-box.ui-box-small.ui-box-big | ||
8 | + - @activities.each do |update| | ||
9 | + = render "projects/feed", :update => update, :project => @project | ||
6 | 10 | ||
7 | :javascript | 11 | :javascript |
8 | function updateDashboard(){ | 12 | function updateDashboard(){ |
app/views/snippets/_form.html.haml
@@ -19,7 +19,8 @@ | @@ -19,7 +19,8 @@ | ||
19 | %td{:colspan => 2} | 19 | %td{:colspan => 2} |
20 | = f.label :content, "Code" | 20 | = f.label :content, "Code" |
21 | %br | 21 | %br |
22 | - = f.text_area :content, :style => "height:240px;width:932px;" | 22 | + %br |
23 | + = f.text_area :content | ||
23 | 24 | ||
24 | .actions.prepend-top | 25 | .actions.prepend-top |
25 | - = f.submit 'Save', :class => "lbutton vm" | 26 | + = f.submit 'Save', :class => "button" |
app/views/snippets/index.html.haml
1 | %div | 1 | %div |
2 | - if can? current_user, :write_snippet, @project | 2 | - if can? current_user, :write_snippet, @project |
3 | - .left= link_to 'New Snippet', new_project_snippet_path(@project), :class => "lbutton vm" | 3 | + = link_to 'New Snippet', new_project_snippet_path(@project), :class => "button append-bottom-10" |
4 | 4 | ||
5 | %table.round-borders#snippets-table | 5 | %table.round-borders#snippets-table |
6 | %thead | 6 | %thead |
lib/commit_ext.rb
spec/requests/dashboard_spec.rb
@@ -22,6 +22,7 @@ describe "Dashboard" do | @@ -22,6 +22,7 @@ describe "Dashboard" do | ||
22 | 22 | ||
23 | it "should have news feed" do | 23 | it "should have news feed" do |
24 | within "#news-feed" do | 24 | within "#news-feed" do |
25 | + page.should have_content("master") | ||
25 | page.should have_content(@project.commit.author.name) | 26 | page.should have_content(@project.commit.author.name) |
26 | page.should have_content(@project.commit.safe_message) | 27 | page.should have_content(@project.commit.safe_message) |
27 | end | 28 | end |
spec/requests/projects_spec.rb
@@ -72,10 +72,13 @@ describe "Projects" do | @@ -72,10 +72,13 @@ describe "Projects" do | ||
72 | current_path.should == project_path(@project) | 72 | current_path.should == project_path(@project) |
73 | end | 73 | end |
74 | 74 | ||
75 | - it "should beahave like dashboard" do | ||
76 | - page.should have_content("History") | 75 | + it "should beahave like activities page" do |
76 | + within ".project-update" do | ||
77 | + page.should have_content("master") | ||
78 | + page.should have_content(@project.commit.author.name) | ||
79 | + page.should have_content(@project.commit.safe_message) | ||
80 | + end | ||
77 | end | 81 | end |
78 | - | ||
79 | end | 82 | end |
80 | 83 | ||
81 | describe "GET /projects/team" do | 84 | describe "GET /projects/team" do |