Commit 4a5a130a18313ae34a3a765176ae8037eb8662bc
Exists in
master
and in
4 other branches
Merge branch 'improve/ui' of /home/git/repositories/gitlab/gitlabhq
Showing
14 changed files
with
216 additions
and
161 deletions
Show diff stats
app/assets/javascripts/project.js.coffee
... | ... | @@ -6,10 +6,10 @@ class Project |
6 | 6 | |
7 | 7 | @initEvents() |
8 | 8 | |
9 | - | |
9 | + | |
10 | 10 | initEvents: -> |
11 | 11 | disableButtonIfEmptyField '#project_name', '.project-submit' |
12 | - | |
12 | + | |
13 | 13 | $('#project_issues_enabled').change -> |
14 | 14 | if ($(this).is(':checked') == true) |
15 | 15 | $('#project_issues_tracker').removeAttr('disabled') |
... | ... | @@ -29,7 +29,7 @@ class Project |
29 | 29 | |
30 | 30 | $ -> |
31 | 31 | # Git clone panel switcher |
32 | - scope = $ '.project_clone_holder' | |
32 | + scope = $ '.git-clone-holder' | |
33 | 33 | if scope.length > 0 |
34 | 34 | $('a, button', scope).click -> |
35 | 35 | $('a, button', scope).removeClass 'active' | ... | ... |
app/assets/stylesheets/common.scss
app/assets/stylesheets/gitlab_bootstrap/buttons.scss
app/assets/stylesheets/gitlab_bootstrap/common.scss
... | ... | @@ -88,6 +88,13 @@ pre.well-pre { |
88 | 88 | @include box-shadow(inset 0 2px 4px rgba(0,0,0,.15)); |
89 | 89 | } |
90 | 90 | |
91 | +.label { | |
92 | + padding: 2px 4px; | |
93 | + font-size: 12px; | |
94 | + font-style: normal; | |
95 | + font-weight: normal; | |
96 | +} | |
97 | + | |
91 | 98 | /** Big Labels **/ |
92 | 99 | .state-label { |
93 | 100 | font-size: 14px; | ... | ... |
app/assets/stylesheets/sections/projects.scss
... | ... | @@ -14,25 +14,76 @@ |
14 | 14 | } |
15 | 15 | } |
16 | 16 | |
17 | -.project_clone_panel { | |
17 | +.project-home-panel { | |
18 | + border-bottom: 1px solid #DDD; | |
19 | + padding-bottom: 30px; | |
20 | + margin-bottom: 30px; | |
21 | + | |
22 | + .project-home-title { | |
23 | + font-size: 18px; | |
24 | + color: #777; | |
25 | + margin: 0; | |
26 | + line-height: 2; | |
27 | + } | |
28 | + .project-home-dropdown { | |
29 | + margin-left: 10px; | |
30 | + float: right; | |
31 | + } | |
32 | + .project-home-extra { | |
33 | + margin-top: 15px; | |
34 | + | |
35 | + .project-home-desc { | |
36 | + float: left; | |
37 | + color: #999; | |
38 | + } | |
39 | + | |
40 | + .project-home-links { | |
41 | + float: right; | |
42 | + a { | |
43 | + margin-left: 10px; | |
44 | + } | |
45 | + } | |
46 | + } | |
47 | + | |
48 | + .public-label { | |
49 | + font-size: 14px; | |
50 | + background: #f1f1f1; | |
51 | + padding: 6px 10px; | |
52 | + border-radius: 4px; | |
53 | + margin-left: 10px; | |
54 | + color: #888; | |
55 | + text-shadow: 0 1px 1px #FFF; | |
56 | + } | |
57 | +} | |
58 | + | |
59 | +.git-clone-holder { | |
60 | + float: right; | |
61 | + border: 1px solid #E1E1E1; | |
18 | 62 | @include border-radius(4px); |
19 | - @include bg-gray-gradient; | |
20 | - padding: 4px 7px; | |
21 | - border: 1px solid #CCC; | |
22 | - margin-bottom: 20px; | |
23 | 63 | |
24 | 64 | .btn { |
25 | - padding: 4px 12px; | |
65 | + margin-left: 3px; | |
66 | + border: none; | |
67 | + background: none; | |
68 | + box-shadow: none; | |
69 | + color: #29b; | |
70 | + padding: 6px; | |
71 | + | |
72 | + &.active { | |
73 | + color: #333; | |
74 | + font-weight: bold; | |
75 | + } | |
26 | 76 | } |
27 | -} | |
28 | 77 | |
29 | -.project_clone_holder { | |
30 | 78 | input[type="text"] { |
79 | + margin-left: 2px; | |
80 | + border: none; | |
81 | + border-radius: 0; | |
82 | + border-left: 1px solid #E1E1E1; | |
31 | 83 | @extend .monospace; |
32 | - border: 1px solid #BBB; | |
33 | 84 | box-shadow: none; |
34 | - margin-left: -1px; | |
35 | - background: #FFF; | |
85 | + background: #FAFAFA; | |
86 | + padding: 6px 10px; | |
36 | 87 | } |
37 | 88 | } |
38 | 89 | |
... | ... | @@ -81,16 +132,16 @@ ul.nav.nav-projects-tabs { |
81 | 132 | |
82 | 133 | .my-projects { |
83 | 134 | li { |
84 | - .project-title { | |
85 | - font-size: 14px; | |
86 | - } | |
87 | - | |
88 | 135 | .project-info { |
89 | 136 | margin-bottom: 10px; |
90 | 137 | } |
91 | 138 | |
92 | - .access-icon i { | |
139 | + .access-icon { | |
93 | 140 | color: #AAA; |
141 | + margin-left: 10px; | |
142 | + i { | |
143 | + color: #AAA; | |
144 | + } | |
94 | 145 | } |
95 | 146 | } |
96 | 147 | } | ... | ... |
app/views/dashboard/projects.html.haml
... | ... | @@ -56,13 +56,12 @@ |
56 | 56 | - @projects.each do |project| |
57 | 57 | %li |
58 | 58 | %h4.project-title |
59 | - %span.access-icon | |
60 | - - if project.public | |
61 | - = public_icon | |
62 | - - else | |
63 | - = private_icon | |
64 | 59 | = link_to project_path(project), class: dom_class(project) do |
65 | - %strong= project.name_with_namespace | |
60 | + = project.name_with_namespace | |
61 | + - if project.public | |
62 | + %small.access-icon | |
63 | + = public_icon | |
64 | + Public | |
66 | 65 | |
67 | 66 | - if project.forked_from_project |
68 | 67 | %small.pull-right | ... | ... |
app/views/projects/_clone_panel.html.haml
... | ... | @@ -1,56 +0,0 @@ |
1 | -.project_clone_panel | |
2 | - .row | |
3 | - .span8 | |
4 | - .form-horizontal= render "shared/clone_panel" | |
5 | - .span3.pull-right | |
6 | - .pull-right | |
7 | - - unless @project.empty_repo? | |
8 | - - if current_user && can?(current_user, :fork_project, @project) && @project.namespace != current_user.namespace | |
9 | - - if current_user.already_forked?(@project) | |
10 | - = link_to project_path(current_user.fork_of(@project)), class: 'btn grouped disabled' do | |
11 | - %i.icon-code-fork | |
12 | - Forked | |
13 | - - else | |
14 | - = link_to fork_project_path(@project), title: "Fork", class: "btn grouped", method: "POST" do | |
15 | - %i.icon-code-fork | |
16 | - Fork | |
17 | - - if can? current_user, :download_code, @project | |
18 | - = link_to archive_project_repository_path(@project), class: "btn grouped" do | |
19 | - %i.icon-download-alt | |
20 | - %span.only-wide Download | |
21 | - | |
22 | - - if current_user | |
23 | - .dropdown.pull-right | |
24 | - %a.dropdown-toggle.btn{href: '#', "data-toggle" => "dropdown"} | |
25 | - %i.icon-plus-sign-alt | |
26 | - %span.only-wide New | |
27 | - %b.caret | |
28 | - %ul.dropdown-menu | |
29 | - - if @project.issues_enabled && can?(current_user, :write_issue, @project) | |
30 | - %li | |
31 | - = link_to url_for_new_issue, title: "New Issue" do | |
32 | - Issue | |
33 | - - if @project.merge_requests_enabled && can?(current_user, :write_merge_request, @project) | |
34 | - %li | |
35 | - = link_to new_project_merge_request_path(@project), title: "New Merge Request" do | |
36 | - Merge Request | |
37 | - - if @project.snippets_enabled && can?(current_user, :write_snippet, @project) | |
38 | - %li | |
39 | - = link_to new_project_snippet_path(@project), title: "New Snippet" do | |
40 | - Snippet | |
41 | - - if can? current_user, :push_code, @project | |
42 | - %li.divider | |
43 | - %li | |
44 | - = link_to new_project_branch_path(@project) do | |
45 | - %i.icon-code-fork | |
46 | - Git branch | |
47 | - %li | |
48 | - = link_to new_project_tag_path(@project) do | |
49 | - %i.icon-tag | |
50 | - Git tag | |
51 | - | |
52 | - - if can?(current_user, :admin_team_member, @project) | |
53 | - %li.divider | |
54 | - %li | |
55 | - = link_to new_project_team_member_path(@project), title: "New project member" do | |
56 | - Project member |
... | ... | @@ -0,0 +1,34 @@ |
1 | +- if current_user | |
2 | + .dropdown.pull-right | |
3 | + %a.dropdown-toggle.btn.btn-new{href: '#', "data-toggle" => "dropdown"} | |
4 | + %i.icon-reorder | |
5 | + %ul.dropdown-menu | |
6 | + - if @project.issues_enabled && can?(current_user, :write_issue, @project) | |
7 | + %li | |
8 | + = link_to url_for_new_issue, title: "New Issue" do | |
9 | + Issue | |
10 | + - if @project.merge_requests_enabled && can?(current_user, :write_merge_request, @project) | |
11 | + %li | |
12 | + = link_to new_project_merge_request_path(@project), title: "New Merge Request" do | |
13 | + Merge Request | |
14 | + - if @project.snippets_enabled && can?(current_user, :write_snippet, @project) | |
15 | + %li | |
16 | + = link_to new_project_snippet_path(@project), title: "New Snippet" do | |
17 | + Snippet | |
18 | + - if can? current_user, :push_code, @project | |
19 | + %li.divider | |
20 | + %li | |
21 | + = link_to new_project_branch_path(@project) do | |
22 | + %i.icon-code-fork | |
23 | + Git branch | |
24 | + %li | |
25 | + = link_to new_project_tag_path(@project) do | |
26 | + %i.icon-tag | |
27 | + Git tag | |
28 | + | |
29 | + - if can?(current_user, :admin_team_member, @project) | |
30 | + %li.divider | |
31 | + %li | |
32 | + = link_to new_project_team_member_path(@project), title: "New project member" do | |
33 | + Project member | |
34 | + | ... | ... |
app/views/projects/empty.html.haml
app/views/projects/labels/_label.html.haml
1 | 1 | - frequency = @project.issues.tagged_with(label.name).count |
2 | 2 | %li |
3 | - %strong | |
4 | - %span{class: "label #{label_css_class(label.name)}"} | |
5 | - %i.icon-tag | |
6 | - - if frequency.zero? | |
7 | - %span.light= label.name | |
8 | - - else | |
9 | - = label.name | |
3 | + %span{class: "label #{label_css_class(label.name)}"} | |
4 | + %i.icon-tag | |
5 | + - if frequency.zero? | |
6 | + %span.light= label.name | |
7 | + - else | |
8 | + = label.name | |
10 | 9 | .pull-right |
11 | 10 | - unless frequency.zero? |
12 | 11 | = link_to project_issues_path(label_name: label.name) do |
13 | - %strong | |
14 | - = pluralize(frequency, 'issue') | |
15 | - = "»" | |
12 | + = pluralize(frequency, 'issue') | |
13 | + = "»" | ... | ... |
app/views/projects/show.html.haml
1 | -= render 'clone_panel' | |
1 | +.project-home-panel | |
2 | + .row | |
3 | + .span4 | |
4 | + %h4.project-home-title | |
5 | + = @project.name_with_namespace | |
6 | + - if @project.public | |
7 | + %span.public-label Public | |
8 | + - else | |
9 | + %span.public-label Private | |
10 | + | |
11 | + .span8 | |
12 | + .project-home-dropdown | |
13 | + = render "dropdown" | |
14 | + .form-horizontal | |
15 | + = render "shared/clone_panel" | |
16 | + | |
17 | + .project-home-extra.clearfix | |
18 | + .project-home-desc | |
19 | + - if @project.description.present? | |
20 | + = @project.description | |
21 | + - if can?(current_user, :admin_project, @project) | |
22 | + – | |
23 | + %strong= link_to 'Edit', edit_project_path | |
24 | + | |
25 | + .project-home-links | |
26 | + = link_to pluralize(@repository.round_commit_count, 'commit'), project_commits_path(@project, @ref || @repository.root_ref) | |
27 | + = link_to pluralize(@repository.branch_names.count, 'branch'), project_branches_path(@project) | |
28 | + = link_to pluralize(@repository.tag_names.count, 'tag'), project_tags_path(@project) | |
29 | + %span.light.prepend-left-20= repository_size | |
2 | 30 | |
3 | 31 | .row |
4 | 32 | .span9 |
... | ... | @@ -7,17 +35,29 @@ |
7 | 35 | .content_list |
8 | 36 | .loading.hide |
9 | 37 | .span3 |
10 | - .light-well | |
11 | - %h3.page-title | |
12 | - = @project.name | |
13 | - - if @project.description.present? | |
14 | - %p.light= @project.description | |
38 | + .clearfix | |
39 | + - if @project.forked_from_project | |
40 | + .alert.alert-success | |
41 | + %i.icon-code-fork | |
42 | + Forked from: | |
43 | + = link_to @project.forked_from_project.name_with_namespace, project_path(@project.forked_from_project) | |
44 | + - unless @project.empty_repo? | |
45 | + - if current_user && can?(current_user, :fork_project, @project) && @project.namespace != current_user.namespace | |
46 | + - if current_user.already_forked?(@project) | |
47 | + = link_to project_path(current_user.fork_of(@project)), class: 'btn btn-block' do | |
48 | + %i.icon-ok | |
49 | + Already forked | |
50 | + - else | |
51 | + = link_to fork_project_path(@project), title: "Fork", class: "btn btn-block", method: "POST" do | |
52 | + %i.icon-code-fork | |
53 | + Fork repository | |
15 | 54 | |
16 | - %hr | |
17 | - %p | |
18 | - %p | |
19 | - %span.light Repo size is | |
20 | - = repository_size | |
55 | + - if can? current_user, :download_code, @project | |
56 | + = link_to archive_project_repository_path(@project), class: "btn btn-block" do | |
57 | + %i.icon-download-alt | |
58 | + %span Download | |
59 | + %br | |
60 | + .light-well | |
21 | 61 | %p |
22 | 62 | %span.light Created at |
23 | 63 | #{@project.created_at.stamp('Aug 22, 2013')} |
... | ... | @@ -27,19 +67,7 @@ |
27 | 67 | #{link_to @project.group.name, @project.group} Group |
28 | 68 | - else |
29 | 69 | #{link_to @project.owner_name, @project.owner} |
30 | - - if @project.forked_from_project | |
31 | - %p | |
32 | - %i.icon-code-fork | |
33 | - Forked from: | |
34 | - = link_to @project.forked_from_project.name_with_namespace, project_path(@project.forked_from_project) | |
35 | 70 | |
36 | - %hr | |
37 | - %p | |
38 | - = link_to pluralize(@repository.round_commit_count, 'commit'), project_commits_path(@project, @ref || @repository.root_ref) | |
39 | - %p | |
40 | - = link_to pluralize(@repository.branch_names.count, 'branch'), project_branches_path(@project) | |
41 | - %p | |
42 | - = link_to pluralize(@repository.tag_names.count, 'tag'), project_tags_path(@project) | |
43 | 71 | |
44 | 72 | - if @project.gitlab_ci? |
45 | 73 | %hr | ... | ... |
app/views/projects/wikis/git_access.html.haml
... | ... | @@ -2,35 +2,31 @@ |
2 | 2 | %h3.page-title |
3 | 3 | Git access for |
4 | 4 | %strong= @gollum_wiki.path_with_namespace |
5 | - = render 'main_links' | |
6 | 5 | |
7 | -.content | |
8 | - .project_clone_panel | |
9 | - .row | |
10 | - .span7 | |
11 | - .form-horizontal | |
12 | - .input-prepend.project_clone_holder | |
13 | - %button{class: "btn active", :"data-clone" => @gollum_wiki.ssh_url_to_repo} SSH | |
14 | - %button{class: "btn", :"data-clone" => @gollum_wiki.http_url_to_repo}= gitlab_config.protocol.upcase | |
15 | - = text_field_tag :project_clone, @gollum_wiki.url_to_repo, class: "one_click_select input-xxlarge", readonly: true | |
16 | - .git-empty | |
17 | - %fieldset | |
18 | - %legend Install Gollum: | |
19 | - %pre.dark | |
20 | - :preserve | |
21 | - gem install gollum | |
6 | + .form-horizontal.pull-right | |
7 | + .git-clone-holder | |
8 | + %button{class: "btn active", :"data-clone" => @gollum_wiki.ssh_url_to_repo} SSH | |
9 | + %button{class: "btn", :"data-clone" => @gollum_wiki.http_url_to_repo}= gitlab_config.protocol.upcase | |
10 | + = text_field_tag :project_clone, @gollum_wiki.url_to_repo, class: "one_click_select input-xxlarge", readonly: true | |
22 | 11 | |
23 | - %legend Clone Your Wiki: | |
24 | - %pre.dark | |
25 | - :preserve | |
26 | - git clone #{@gollum_wiki.ssh_url_to_repo} | |
27 | - cd #{@gollum_wiki.path} | |
12 | +.git-empty | |
13 | + %fieldset | |
14 | + %legend Install Gollum: | |
15 | + %pre.dark | |
16 | + :preserve | |
17 | + gem install gollum | |
28 | 18 | |
29 | - %legend Start Gollum And Edit Locally: | |
30 | - %pre.dark | |
31 | - :preserve | |
32 | - gollum | |
33 | - == Sinatra/1.3.5 has taken the stage on 4567 for development with backup from Thin | |
34 | - >> Thin web server (v1.5.0 codename Knife) | |
35 | - >> Maximum connections set to 1024 | |
36 | - >> Listening on 0.0.0.0:4567, CTRL+C to stop | |
19 | + %legend Clone Your Wiki: | |
20 | + %pre.dark | |
21 | + :preserve | |
22 | + git clone #{@gollum_wiki.ssh_url_to_repo} | |
23 | + cd #{@gollum_wiki.path} | |
24 | + | |
25 | + %legend Start Gollum And Edit Locally: | |
26 | + %pre.dark | |
27 | + :preserve | |
28 | + gollum | |
29 | + == Sinatra/1.3.5 has taken the stage on 4567 for development with backup from Thin | |
30 | + >> Thin web server (v1.5.0 codename Knife) | |
31 | + >> Maximum connections set to 1024 | |
32 | + >> Listening on 0.0.0.0:4567, CTRL+C to stop | ... | ... |
app/views/shared/_clone_panel.html.haml
1 | -.input-prepend.input-append.project_clone_holder | |
1 | +.git-clone-holder | |
2 | 2 | %button{class: "btn active", :"data-clone" => @project.ssh_url_to_repo} SSH |
3 | 3 | %button{class: "btn", :"data-clone" => @project.http_url_to_repo}= gitlab_config.protocol.upcase |
4 | - = text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select span7", readonly: true | |
5 | - %span.add-on | |
6 | - - if @project.public | |
7 | - = public_icon | |
8 | - %span.cblue public | |
9 | - - else | |
10 | - = private_icon | |
11 | - %span.cgreen private | |
4 | + = text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select span5", readonly: true | ... | ... |
features/steps/public/projects_feature.rb
... | ... | @@ -49,7 +49,9 @@ class Spinach::Features::PublicProjectsFeature < Spinach::FeatureSteps |
49 | 49 | end |
50 | 50 | |
51 | 51 | step 'I should see project "Community" home page' do |
52 | - page.should have_content 'Repo size is' | |
52 | + within '.project-home-title' do | |
53 | + page.should have_content 'Community' | |
54 | + end | |
53 | 55 | end |
54 | 56 | |
55 | 57 | private | ... | ... |