From 2f13d4daa30433b9db168f291d870260e401e44a Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 12 Dec 2014 21:49:51 +0200 Subject: Implement sidebar navigation for project area Signed-off-by: Dmitriy Zaporozhets --- app/assets/stylesheets/sections/sidebar.scss | 120 +++++++++++++++++++++++++++ app/views/layouts/nav/_project.html.haml | 7 +- app/views/layouts/project_settings.html.haml | 18 ++-- app/views/layouts/projects.html.haml | 15 ++-- app/views/projects/_settings_nav.html.haml | 2 +- 5 files changed, 144 insertions(+), 18 deletions(-) create mode 100644 app/assets/stylesheets/sections/sidebar.scss diff --git a/app/assets/stylesheets/sections/sidebar.scss b/app/assets/stylesheets/sections/sidebar.scss new file mode 100644 index 00000000000..fcb8fa4d22b --- /dev/null +++ b/app/assets/stylesheets/sections/sidebar.scss @@ -0,0 +1,120 @@ +body.project { + padding: 0; + + header .container { + width: 100% !important; + } +} + +.page-with-sidebar { + background: #F5F5F5; + + header .navbar-inner { + padding: 0px 20px; + } +} + +.sidebar-wrapper { + z-index: 1000; + position: absolute; + left: 250px; + width: 0; + height: 100%; + margin-left: -250px; + overflow-y: auto; + background: #F5F5F5; +} + +.content-wrapper { + width: 100%; + padding: 15px; + background: #FFF; +} + +.nav-sidebar { + position: fixed; + top: 45px; + width: 250px; + margin: 0; + list-style: none; + margin-top: 20px; +} + +.nav-sidebar li a .count { + float: right; + background: #eee; + padding: 2px 8px; + @include border-radius(6px); +} + +.nav-sidebar li.active a { + color: #333; + background: #EEE; + font-weight: bold; +} + +.nav-sidebar li { + &.separate-item { + border-top: 1px solid #ddd; + padding-top: 10px; + margin-top: 10px; + } + + a { + color: #666; + display: block; + text-decoration: none; + padding: 6px 15px; + font-size: 13px; + line-height: 20px; + text-shadow: 0 1px 2px #FFF; + padding-left: 30px; + + &:hover { + text-decoration: none; + color: #333; + background: #DDD; + } + + &:active, &:focus { + text-decoration: none; + } + } +} + +.project-settings-nav { + margin-left: 0px; + padding-left: 0px; + + li { + line-height: 28px; + font-size: 12px; + list-style: none; + + a { + padding: 5px 15px; + font-size: 12px; + padding-left: 30px; + } + } +} + +@media(min-width:768px) { + .page-with-sidebar { + padding-left: 250px; + } + + .sidebar-wrapper { + width: 250px; + } + + .content-wrapper { + padding: 20px; + } +} + +/** TODO: REMOVE **/ +.profiler-results { + display: none; +} + diff --git a/app/views/layouts/nav/_project.html.haml b/app/views/layouts/nav/_project.html.haml index 6cb2a82bac8..6a8b65b4c78 100644 --- a/app/views/layouts/nav/_project.html.haml +++ b/app/views/layouts/nav/_project.html.haml @@ -1,4 +1,4 @@ -%ul.project-navigation +%ul.project-navigation.nav.nav-sidebar = nav_link(path: 'projects#show', html_options: {class: "home"}) do = link_to project_path(@project), title: 'Project', class: 'shortcuts-project' do Project @@ -40,6 +40,9 @@ = link_to 'Snippets', project_snippets_path(@project), class: 'shortcuts-snippets' - if project_nav_tab? :settings - = nav_link(html_options: {class: "#{project_tab_class}"}) do + = nav_link(html_options: {class: "#{project_tab_class} separate-item"}) do = link_to edit_project_path(@project), class: "stat-tab tab " do Settings + %i.fa.fa-angle-down + - if defined?(settings) && settings + = render 'projects/settings_nav' diff --git a/app/views/layouts/project_settings.html.haml b/app/views/layouts/project_settings.html.haml index c8b8f4ba971..0dcadc2d9c6 100644 --- a/app/views/layouts/project_settings.html.haml +++ b/app/views/layouts/project_settings.html.haml @@ -7,13 +7,13 @@ = render "layouts/init_auto_complete" - if can?(current_user, :download_code, @project) = render 'shared/no_ssh' - %nav.main-nav.navbar-collapse.collapse - .container= render 'layouts/nav/project' - .container - .content - = render "layouts/flash" - .row - .col-md-2 - = render "projects/settings_nav" - .col-md-10 + + .page-with-sidebar + .sidebar-wrapper + = render 'layouts/nav/project', settings: true + .content-wrapper + .container-fluid + .content + = render "layouts/flash" = yield + = yield :embedded_scripts diff --git a/app/views/layouts/projects.html.haml b/app/views/layouts/projects.html.haml index 8ad2f165946..834f078330c 100644 --- a/app/views/layouts/projects.html.haml +++ b/app/views/layouts/projects.html.haml @@ -7,10 +7,13 @@ = render "layouts/init_auto_complete" - if can?(current_user, :download_code, @project) = render 'shared/no_ssh' - %nav.main-nav.navbar-collapse.collapse - .container= render 'layouts/nav/project' - .container - .content - = render "layouts/flash" - = yield + + .page-with-sidebar + .sidebar-wrapper + = render 'layouts/nav/project' + .content-wrapper + .container-fluid + .content + = render "layouts/flash" + = yield = yield :embedded_scripts diff --git a/app/views/projects/_settings_nav.html.haml b/app/views/projects/_settings_nav.html.haml index 2008f8c558d..821bc237779 100644 --- a/app/views/projects/_settings_nav.html.haml +++ b/app/views/projects/_settings_nav.html.haml @@ -1,4 +1,4 @@ -%ul.nav.nav-pills.nav-stacked.nav-stacked-menu.append-bottom-20.project-settings-nav +%ul.project-settings-nav = nav_link(path: 'projects#edit') do = link_to edit_project_path(@project), class: "stat-tab tab " do %i.fa.fa-pencil-square-o -- cgit v1.2.1 From 6ef75dc77854133db0ef90c30f1a07575692b801 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 12 Dec 2014 22:13:59 +0200 Subject: Style app logo for sidenav Signed-off-by: Dmitriy Zaporozhets --- app/assets/stylesheets/sections/sidebar.scss | 43 ++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/app/assets/stylesheets/sections/sidebar.scss b/app/assets/stylesheets/sections/sidebar.scss index fcb8fa4d22b..48b6aad4c67 100644 --- a/app/assets/stylesheets/sections/sidebar.scss +++ b/app/assets/stylesheets/sections/sidebar.scss @@ -1,17 +1,48 @@ body.project { padding: 0; + &.ui_mars { + .app_logo { + background-color: #24272D; + } + } + + &.ui_color { + .app_logo { + background-color: #325; + } + } + + &.ui_basic { + .app_logo { + background-color: #DDD; + } + } + + &.ui_modern { + .app_logo { + background-color: #017855; + } + } + + &.ui_gray { + .app_logo { + background-color: #222; + } + } + header .container { width: 100% !important; + padding-left: 0px; + + .separator { + display: none; + } } } .page-with-sidebar { background: #F5F5F5; - - header .navbar-inner { - padding: 0px 20px; - } } .sidebar-wrapper { @@ -68,7 +99,7 @@ body.project { font-size: 13px; line-height: 20px; text-shadow: 0 1px 2px #FFF; - padding-left: 30px; + padding-left: 67px; &:hover { text-decoration: none; @@ -94,7 +125,7 @@ body.project { a { padding: 5px 15px; font-size: 12px; - padding-left: 30px; + padding-left: 67px; } } } -- cgit v1.2.1 From 5f63c00598a9ec79dc03fe016b525b73fcb78112 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 15 Dec 2014 17:46:36 +0200 Subject: Fix graph and settings highlight Signed-off-by: Dmitriy Zaporozhets --- .../javascripts/stat_graph_contributors_graph.js.coffee | 4 ++-- app/assets/stylesheets/sections/sidebar.scss | 16 +++++++++++----- app/views/layouts/nav/_project.html.haml | 2 +- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/app/assets/javascripts/stat_graph_contributors_graph.js.coffee b/app/assets/javascripts/stat_graph_contributors_graph.js.coffee index 9952fa0b00a..8b82d20c6c2 100644 --- a/app/assets/javascripts/stat_graph_contributors_graph.js.coffee +++ b/app/assets/javascripts/stat_graph_contributors_graph.js.coffee @@ -46,7 +46,7 @@ class @ContributorsGraph class @ContributorsMasterGraph extends ContributorsGraph constructor: (@data) -> - @width = $('.container').width() - 70 + @width = $('.container').width() - 345 @height = 200 @x = null @y = null @@ -119,7 +119,7 @@ class @ContributorsMasterGraph extends ContributorsGraph class @ContributorsAuthorGraph extends ContributorsGraph constructor: (@data) -> - @width = $('.container').width()/2 - 100 + @width = $('.container').width()/2 - 225 @height = 200 @x = null @y = null diff --git a/app/assets/stylesheets/sections/sidebar.scss b/app/assets/stylesheets/sections/sidebar.scss index 48b6aad4c67..d23ce7d236a 100644 --- a/app/assets/stylesheets/sections/sidebar.scss +++ b/app/assets/stylesheets/sections/sidebar.scss @@ -74,14 +74,20 @@ body.project { .nav-sidebar li a .count { float: right; background: #eee; - padding: 2px 8px; + padding: 0px 8px; @include border-radius(6px); } -.nav-sidebar li.active a { - color: #333; - background: #EEE; - font-weight: bold; +.nav-sidebar li { + &.active a { + color: #333; + background: #EEE; + font-weight: bold; + + &.no-highlight { + background: none; + } + } } .nav-sidebar li { diff --git a/app/views/layouts/nav/_project.html.haml b/app/views/layouts/nav/_project.html.haml index 6a8b65b4c78..05d637f2124 100644 --- a/app/views/layouts/nav/_project.html.haml +++ b/app/views/layouts/nav/_project.html.haml @@ -41,7 +41,7 @@ - if project_nav_tab? :settings = nav_link(html_options: {class: "#{project_tab_class} separate-item"}) do - = link_to edit_project_path(@project), class: "stat-tab tab " do + = link_to edit_project_path(@project), class: "stat-tab tab no-highlight" do Settings %i.fa.fa-angle-down - if defined?(settings) && settings -- cgit v1.2.1 From 5f797be0e8a8e5372aea439be05f25ff88fe3cbf Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 15 Dec 2014 18:06:03 +0200 Subject: Mobile UI fixes for sidebar nav Signed-off-by: Dmitriy Zaporozhets --- app/assets/stylesheets/sections/header.scss | 2 -- app/assets/stylesheets/sections/sidebar.scss | 25 +++++++++++++++---------- app/views/layouts/nav/_project.html.haml | 2 +- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/app/assets/stylesheets/sections/header.scss b/app/assets/stylesheets/sections/header.scss index 9ad1a1db2cd..dc23272b481 100644 --- a/app/assets/stylesheets/sections/header.scss +++ b/app/assets/stylesheets/sections/header.scss @@ -52,8 +52,6 @@ header { border-width: 0; font-size: 18px; - .app_logo { margin-left: -15px; } - .title { @include str-truncated(70%); } diff --git a/app/assets/stylesheets/sections/sidebar.scss b/app/assets/stylesheets/sections/sidebar.scss index d23ce7d236a..188f40fe4f9 100644 --- a/app/assets/stylesheets/sections/sidebar.scss +++ b/app/assets/stylesheets/sections/sidebar.scss @@ -47,11 +47,6 @@ body.project { .sidebar-wrapper { z-index: 1000; - position: absolute; - left: 250px; - width: 0; - height: 100%; - margin-left: -250px; overflow-y: auto; background: #F5F5F5; } @@ -63,12 +58,12 @@ body.project { } .nav-sidebar { - position: fixed; - top: 45px; - width: 250px; margin: 0; list-style: none; - margin-top: 20px; + + &.navbar-collapse { + padding: 0px !important; + } } .nav-sidebar li a .count { @@ -143,6 +138,17 @@ body.project { .sidebar-wrapper { width: 250px; + position: absolute; + left: 250px; + height: 100%; + margin-left: -250px; + + .nav-sidebar { + margin-top: 20px; + position: fixed; + top: 45px; + width: 250px; + } } .content-wrapper { @@ -154,4 +160,3 @@ body.project { .profiler-results { display: none; } - diff --git a/app/views/layouts/nav/_project.html.haml b/app/views/layouts/nav/_project.html.haml index 05d637f2124..000bb1475db 100644 --- a/app/views/layouts/nav/_project.html.haml +++ b/app/views/layouts/nav/_project.html.haml @@ -1,4 +1,4 @@ -%ul.project-navigation.nav.nav-sidebar +%ul.project-navigation.nav.nav-sidebar.navbar-collapse.collapse = nav_link(path: 'projects#show', html_options: {class: "home"}) do = link_to project_path(@project), title: 'Project', class: 'shortcuts-project' do Project -- cgit v1.2.1 From 7b71a9e2212c72b21ca38fa82237c1c51d2aa6ff Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 15 Dec 2014 20:00:44 +0200 Subject: Add icons to project sidenav Signed-off-by: Dmitriy Zaporozhets --- app/assets/stylesheets/sections/events.scss | 11 +++++++++++ app/assets/stylesheets/sections/sidebar.scss | 6 ++++++ app/views/layouts/nav/_project.html.haml | 29 ++++++++++++++++++++++------ 3 files changed, 40 insertions(+), 6 deletions(-) diff --git a/app/assets/stylesheets/sections/events.scss b/app/assets/stylesheets/sections/events.scss index a766d6e77ab..717f17dc601 100644 --- a/app/assets/stylesheets/sections/events.scss +++ b/app/assets/stylesheets/sections/events.scss @@ -171,6 +171,17 @@ } } +.project .event_filter { + position: static; + float: left; + width: 100%; + margin-left: 0; + a { + margin-right: 10px; + width: 50px; + } +} + /* * Last push widget */ diff --git a/app/assets/stylesheets/sections/sidebar.scss b/app/assets/stylesheets/sections/sidebar.scss index 188f40fe4f9..9db56055f24 100644 --- a/app/assets/stylesheets/sections/sidebar.scss +++ b/app/assets/stylesheets/sections/sidebar.scss @@ -111,6 +111,11 @@ body.project { &:active, &:focus { text-decoration: none; } + + i { + width: 20px; + color: #999; + } } } @@ -153,6 +158,7 @@ body.project { .content-wrapper { padding: 20px; + border-left: 1px solid #EAEAEA; } } diff --git a/app/views/layouts/nav/_project.html.haml b/app/views/layouts/nav/_project.html.haml index 000bb1475db..c9ae3f5ffff 100644 --- a/app/views/layouts/nav/_project.html.haml +++ b/app/views/layouts/nav/_project.html.haml @@ -1,26 +1,37 @@ %ul.project-navigation.nav.nav-sidebar.navbar-collapse.collapse = nav_link(path: 'projects#show', html_options: {class: "home"}) do = link_to project_path(@project), title: 'Project', class: 'shortcuts-project' do + %i.fa.fa-dashboard Project - if project_nav_tab? :files = nav_link(controller: %w(tree blob blame edit_tree new_tree)) do - = link_to 'Files', project_tree_path(@project, @ref || @repository.root_ref), class: 'shortcuts-tree' + = link_to project_tree_path(@project, @ref || @repository.root_ref), class: 'shortcuts-tree' do + %i.fa.fa-files-o + Files + - if project_nav_tab? :commits = nav_link(controller: %w(commit commits compare repositories tags branches)) do - = link_to "Commits", project_commits_path(@project, @ref || @repository.root_ref), class: 'shortcuts-commits' + = link_to project_commits_path(@project, @ref || @repository.root_ref), class: 'shortcuts-commits' do + %i.fa.fa-history + Commits - if project_nav_tab? :network = nav_link(controller: %w(network)) do - = link_to "Network", project_network_path(@project, @ref || @repository.root_ref), class: 'shortcuts-network' + = link_to project_network_path(@project, @ref || @repository.root_ref), class: 'shortcuts-network' do + %i.fa.fa-code-fork + Network - if project_nav_tab? :graphs = nav_link(controller: %w(graphs)) do - = link_to "Graphs", project_graph_path(@project, @ref || @repository.root_ref), class: 'shortcuts-graphs' + = link_to project_graph_path(@project, @ref || @repository.root_ref), class: 'shortcuts-graphs' do + %i.fa.fa-area-chart + Graphs - if project_nav_tab? :issues = nav_link(controller: %w(issues milestones labels)) do = link_to url_for_project_issues, class: 'shortcuts-issues' do + %i.fa.fa-exclamation-circle Issues - if @project.used_default_issues_tracker? %span.count.issue_counter= @project.issues.opened.count @@ -28,20 +39,26 @@ - if project_nav_tab? :merge_requests = nav_link(controller: :merge_requests) do = link_to project_merge_requests_path(@project), class: 'shortcuts-merge_requests' do + %i.fa.fa-tasks Merge Requests %span.count.merge_counter= @project.merge_requests.opened.count - if project_nav_tab? :wiki = nav_link(controller: :wikis) do - = link_to 'Wiki', project_wiki_path(@project, :home), class: 'shortcuts-wiki' + = link_to project_wiki_path(@project, :home), class: 'shortcuts-wiki' do + %i.fa.fa-book + Wiki - if project_nav_tab? :snippets = nav_link(controller: :snippets) do - = link_to 'Snippets', project_snippets_path(@project), class: 'shortcuts-snippets' + = link_to project_snippets_path(@project), class: 'shortcuts-snippets' do + %i.fa.fa-file-text-o + Snippets - if project_nav_tab? :settings = nav_link(html_options: {class: "#{project_tab_class} separate-item"}) do = link_to edit_project_path(@project), class: "stat-tab tab no-highlight" do + %i.fa.fa-cogs Settings %i.fa.fa-angle-down - if defined?(settings) && settings -- cgit v1.2.1 From f3f27fee88a30899564ed32a2968b0ac8e31451f Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Tue, 16 Dec 2014 16:58:15 +0200 Subject: Left-side navigation for group layout Signed-off-by: Dmitriy Zaporozhets --- app/assets/stylesheets/sections/events.scss | 2 +- app/assets/stylesheets/sections/sidebar.scss | 4 +- app/helpers/groups_helper.rb | 10 +++- app/views/groups/_settings_nav.html.haml | 2 +- app/views/groups/edit.html.haml | 70 +++++++++++++--------------- app/views/groups/projects.html.haml | 52 ++++++++++----------- app/views/layouts/group.html.haml | 18 ++++--- app/views/layouts/nav/_group.html.haml | 18 +++++-- app/views/layouts/project_settings.html.haml | 2 +- app/views/layouts/projects.html.haml | 2 +- app/views/projects/_settings_nav.html.haml | 2 +- 11 files changed, 98 insertions(+), 84 deletions(-) diff --git a/app/assets/stylesheets/sections/events.scss b/app/assets/stylesheets/sections/events.scss index 717f17dc601..11b212c5a5b 100644 --- a/app/assets/stylesheets/sections/events.scss +++ b/app/assets/stylesheets/sections/events.scss @@ -171,7 +171,7 @@ } } -.project .event_filter { +.sidenav .event_filter { position: static; float: left; width: 100%; diff --git a/app/assets/stylesheets/sections/sidebar.scss b/app/assets/stylesheets/sections/sidebar.scss index 9db56055f24..a267869c0dd 100644 --- a/app/assets/stylesheets/sections/sidebar.scss +++ b/app/assets/stylesheets/sections/sidebar.scss @@ -1,4 +1,4 @@ -body.project { +body.sidenav { padding: 0; &.ui_mars { @@ -119,7 +119,7 @@ body.project { } } -.project-settings-nav { +.sidebar-subnav { margin-left: 0px; padding-left: 0px; diff --git a/app/helpers/groups_helper.rb b/app/helpers/groups_helper.rb index 0dc53dedeb7..975cdeda1bc 100644 --- a/app/helpers/groups_helper.rb +++ b/app/helpers/groups_helper.rb @@ -6,7 +6,7 @@ module GroupsHelper def leave_group_message(group) "Are you sure you want to leave \"#{group}\" group?" end - + def should_user_see_group_roles?(user, group) if user user.is_admin? || group.members.exists?(user_id: user.id) @@ -44,4 +44,12 @@ module GroupsHelper path << "?#{options.to_param}" path end + + def group_settings_page? + if current_controller?('groups') + current_action?('edit') || current_action?('projects') + else + false + end + end end diff --git a/app/views/groups/_settings_nav.html.haml b/app/views/groups/_settings_nav.html.haml index ec1fb4a2c00..82d760f7c41 100644 --- a/app/views/groups/_settings_nav.html.haml +++ b/app/views/groups/_settings_nav.html.haml @@ -1,4 +1,4 @@ -%ul.nav.nav-pills.nav-stacked.nav-stacked-menu +%ul.sidebar-subnav = nav_link(path: 'groups#edit') do = link_to edit_group_path(@group) do %i.fa.fa-pencil-square-o diff --git a/app/views/groups/edit.html.haml b/app/views/groups/edit.html.haml index eb24fd65d9e..a963c59586e 100644 --- a/app/views/groups/edit.html.haml +++ b/app/views/groups/edit.html.haml @@ -1,41 +1,37 @@ -.row - .col-md-2 - = render 'settings_nav' - .col-md-10 - .panel.panel-default - .panel-heading - %strong= @group.name - group settings: - .panel-body - = form_for @group, html: { multipart: true, class: "form-horizontal" }, authenticity_token: true do |f| - - if @group.errors.any? - .alert.alert-danger - %span= @group.errors.full_messages.first - = render 'shared/group_form', f: f +.panel.panel-default + .panel-heading + %strong= @group.name + group settings: + .panel-body + = form_for @group, html: { multipart: true, class: "form-horizontal" }, authenticity_token: true do |f| + - if @group.errors.any? + .alert.alert-danger + %span= @group.errors.full_messages.first + = render 'shared/group_form', f: f - .form-group - .col-sm-2 - .col-sm-10 - = image_tag group_icon(@group.to_param), alt: '', class: 'avatar s160' - %p.light - - if @group.avatar? - You can change your group avatar here - - else - You can upload a group avatar here - = render 'shared/choose_group_avatar_button', f: f - - if @group.avatar? - %hr - = link_to 'Remove avatar', group_avatar_path(@group.to_param), data: { confirm: "Group avatar will be removed. Are you sure?"}, method: :delete, class: "btn btn-remove btn-small remove-avatar" + .form-group + .col-sm-2 + .col-sm-10 + = image_tag group_icon(@group.to_param), alt: '', class: 'avatar s160' + %p.light + - if @group.avatar? + You can change your group avatar here + - else + You can upload a group avatar here + = render 'shared/choose_group_avatar_button', f: f + - if @group.avatar? + %hr + = link_to 'Remove avatar', group_avatar_path(@group.to_param), data: { confirm: "Group avatar will be removed. Are you sure?"}, method: :delete, class: "btn btn-remove btn-small remove-avatar" - .form-actions - = f.submit 'Save group', class: "btn btn-save" + .form-actions + = f.submit 'Save group', class: "btn btn-save" - .panel.panel-danger - .panel-heading Remove group - .panel-body - %p - Removing group will cause all child projects and resources to be removed. - %br - %strong Removed group can not be restored! +.panel.panel-danger + .panel-heading Remove group + .panel-body + %p + Removing group will cause all child projects and resources to be removed. + %br + %strong Removed group can not be restored! - = link_to 'Remove Group', @group, data: {confirm: 'Removed group can not be restored! Are you sure?'}, method: :delete, class: "btn btn-remove" + = link_to 'Remove Group', @group, data: {confirm: 'Removed group can not be restored! Are you sure?'}, method: :delete, class: "btn btn-remove" diff --git a/app/views/groups/projects.html.haml b/app/views/groups/projects.html.haml index 65a66355c56..40c81e8cd5b 100644 --- a/app/views/groups/projects.html.haml +++ b/app/views/groups/projects.html.haml @@ -1,29 +1,25 @@ -.row - .col-md-2 - = render 'settings_nav' - .col-md-10 - .panel.panel-default - .panel-heading - %strong= @group.name - projects: - - if can? current_user, :manage_group, @group - .panel-head-actions - = link_to new_project_path(namespace_id: @group.id), class: "btn btn-new" do - %i.fa.fa-plus - New Project - %ul.well-list - - @projects.each do |project| - %li - .list-item-name - = visibility_level_icon(project.visibility_level) - %strong= link_to project.name_with_namespace, project - %span.label.label-gray - = repository_size(project) - .pull-right - = link_to 'Members', project_team_index_path(project), id: "edit_#{dom_id(project)}", class: "btn btn-small" - = link_to 'Edit', edit_project_path(project), id: "edit_#{dom_id(project)}", class: "btn btn-small" - = link_to 'Remove', project, data: { confirm: remove_project_message(project)}, method: :delete, class: "btn btn-small btn-remove" - - if @projects.blank? - .nothing-here-block This group has no projects yet +.panel.panel-default + .panel-heading + %strong= @group.name + projects: + - if can? current_user, :manage_group, @group + .panel-head-actions + = link_to new_project_path(namespace_id: @group.id), class: "btn btn-new" do + %i.fa.fa-plus + New Project + %ul.well-list + - @projects.each do |project| + %li + .list-item-name + = visibility_level_icon(project.visibility_level) + %strong= link_to project.name_with_namespace, project + %span.label.label-gray + = repository_size(project) + .pull-right + = link_to 'Members', project_team_index_path(project), id: "edit_#{dom_id(project)}", class: "btn btn-small" + = link_to 'Edit', edit_project_path(project), id: "edit_#{dom_id(project)}", class: "btn btn-small" + = link_to 'Remove', project, data: { confirm: remove_project_message(project)}, method: :delete, class: "btn btn-small btn-remove" + - if @projects.blank? + .nothing-here-block This group has no projects yet - = paginate @projects, theme: "gitlab" += paginate @projects, theme: "gitlab" diff --git a/app/views/layouts/group.html.haml b/app/views/layouts/group.html.haml index f22fb236cb5..86ce398e09c 100644 --- a/app/views/layouts/group.html.haml +++ b/app/views/layouts/group.html.haml @@ -1,12 +1,16 @@ !!! 5 %html{ lang: "en"} = render "layouts/head", title: group_head_title - %body{class: "#{app_theme} application", :'data-page' => body_data_page} + %body{class: "#{app_theme} application sidenav", :'data-page' => body_data_page} = render "layouts/broadcast" = render "layouts/head_panel", title: "group: #{@group.name}" - %nav.main-nav.navbar-collapse.collapse - .container= render 'layouts/nav/group' - .container - .content - = render "layouts/flash" - = yield + .page-with-sidebar + .sidebar-wrapper + = render 'layouts/nav/group' + .content-wrapper + .container-fluid + .content + = render "layouts/flash" + .clearfix + = yield + = yield :embedded_scripts diff --git a/app/views/layouts/nav/_group.html.haml b/app/views/layouts/nav/_group.html.haml index 9095a843c9f..686280c9ec7 100644 --- a/app/views/layouts/nav/_group.html.haml +++ b/app/views/layouts/nav/_group.html.haml @@ -1,25 +1,35 @@ -%ul +%ul.nav.nav-sidebar.navbar-collapse.collapse = nav_link(path: 'groups#show', html_options: {class: 'home'}) do = link_to group_path(@group), title: "Home" do + %i.fa.fa-dashboard Activity = nav_link(controller: [:group, :milestones]) do = link_to group_milestones_path(@group) do + %i.fa.fa-clock-o Milestones = nav_link(path: 'groups#issues') do = link_to issues_group_path(@group) do + %i.fa.fa-exclamation-circle Issues - if current_user %span.count= current_user.assigned_issues.opened.of_group(@group).count = nav_link(path: 'groups#merge_requests') do = link_to merge_requests_group_path(@group) do + %i.fa.fa-tasks Merge Requests - if current_user %span.count= current_user.cared_merge_requests.opened.of_group(@group).count = nav_link(path: 'groups#members') do - = link_to "Members", members_group_path(@group) + = link_to members_group_path(@group) do + %i.fa.fa-users + Members - if can?(current_user, :manage_group, @group) - = nav_link(path: 'groups#edit') do - = link_to edit_group_path(@group), class: "tab " do + = nav_link(html_options: { class: "#{"active" if group_settings_page?} separate-item" }) do + = link_to edit_group_path(@group), class: "tab no-highlight" do + %i.fa.fa-cogs Settings + %i.fa.fa-angle-down + - if group_settings_page? + = render 'groups/settings_nav' diff --git a/app/views/layouts/project_settings.html.haml b/app/views/layouts/project_settings.html.haml index 0dcadc2d9c6..47bc007fc6a 100644 --- a/app/views/layouts/project_settings.html.haml +++ b/app/views/layouts/project_settings.html.haml @@ -1,7 +1,7 @@ !!! 5 %html{ lang: "en"} = render "layouts/head", title: @project.name_with_namespace - %body{class: "#{app_theme} project", :'data-page' => body_data_page, :'data-project-id' => @project.id } + %body{class: "#{app_theme} sidenav project", :'data-page' => body_data_page, :'data-project-id' => @project.id } = render "layouts/broadcast" = render "layouts/head_panel", title: project_title(@project) = render "layouts/init_auto_complete" diff --git a/app/views/layouts/projects.html.haml b/app/views/layouts/projects.html.haml index 834f078330c..644187b0998 100644 --- a/app/views/layouts/projects.html.haml +++ b/app/views/layouts/projects.html.haml @@ -1,7 +1,7 @@ !!! 5 %html{ lang: "en"} = render "layouts/head", title: project_head_title - %body{class: "#{app_theme} project", :'data-page' => body_data_page, :'data-project-id' => @project.id } + %body{class: "#{app_theme} sidenav project", :'data-page' => body_data_page, :'data-project-id' => @project.id } = render "layouts/broadcast" = render "layouts/head_panel", title: project_title(@project) = render "layouts/init_auto_complete" diff --git a/app/views/projects/_settings_nav.html.haml b/app/views/projects/_settings_nav.html.haml index 821bc237779..591b5b0e160 100644 --- a/app/views/projects/_settings_nav.html.haml +++ b/app/views/projects/_settings_nav.html.haml @@ -1,4 +1,4 @@ -%ul.project-settings-nav +%ul.project-settings-nav.sidebar-subnav = nav_link(path: 'projects#edit') do = link_to edit_project_path(@project), class: "stat-tab tab " do %i.fa.fa-pencil-square-o -- cgit v1.2.1 From 06a219baa5130479bf2ee31f26c138509679c562 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Tue, 16 Dec 2014 18:15:48 +0200 Subject: Restyle group page and event filter Signed-off-by: Dmitriy Zaporozhets --- app/assets/javascripts/activities.js.coffee | 2 +- app/assets/stylesheets/sections/events.scss | 45 ++--------------------- app/helpers/events_helper.rb | 13 +++---- app/views/dashboard/_sidebar.html.haml | 9 +---- app/views/groups/show.html.haml | 57 +++++++++++------------------ app/views/layouts/group.html.haml | 2 +- app/views/shared/_event_filter.html.haml | 16 +++++++- 7 files changed, 49 insertions(+), 95 deletions(-) diff --git a/app/assets/javascripts/activities.js.coffee b/app/assets/javascripts/activities.js.coffee index 4f76d8ce486..777c62dc1b7 100644 --- a/app/assets/javascripts/activities.js.coffee +++ b/app/assets/javascripts/activities.js.coffee @@ -12,7 +12,7 @@ class @Activities toggleFilter: (sender) -> - sender.parent().toggleClass "inactive" + sender.parent().toggleClass "active" event_filters = $.cookie("event_filter") filter = sender.attr("id").split("_")[0] if event_filters diff --git a/app/assets/stylesheets/sections/events.scss b/app/assets/stylesheets/sections/events.scss index 11b212c5a5b..93ad17f57c0 100644 --- a/app/assets/stylesheets/sections/events.scss +++ b/app/assets/stylesheets/sections/events.scss @@ -140,47 +140,6 @@ } } -/** - * Event filter - * - */ -.event_filter { - position: absolute; - width: 40px; - margin-left: -55px; - - .filter_icon { - a { - text-align:center; - background: $bg_primary; - margin-bottom: 10px; - float: left; - padding: 9px 6px; - font-size: 18px; - width: 40px; - color: #FFF; - @include border-radius(3px); - } - - &.inactive { - a { - color: #DDD; - background: #f9f9f9; - } - } - } -} - -.sidenav .event_filter { - position: static; - float: left; - width: 100%; - margin-left: 0; - a { - margin-right: 10px; - width: 50px; - } -} /* * Last push widget @@ -214,3 +173,7 @@ } } } + +.event_filter li a { + padding: 5px 10px; +} diff --git a/app/helpers/events_helper.rb b/app/helpers/events_helper.rb index a3136926b38..903a5009616 100644 --- a/app/helpers/events_helper.rb +++ b/app/helpers/events_helper.rb @@ -21,15 +21,14 @@ module EventsHelper def event_filter_link(key, tooltip) key = key.to_s - inactive = if @event_filter.active? key - nil - else - 'inactive' - end + active = if @event_filter.active? key + 'active' + end - content_tag :div, class: "filter_icon #{inactive}" do + content_tag :li, class: "filter_icon #{active}" do link_to request.path, class: 'has_tooltip event_filter_link', id: "#{key}_event_filter", 'data-original-title' => tooltip do - content_tag :i, nil, class: icon_for_event[key] + content_tag(:i, nil, class: icon_for_event[key]) + + content_tag(:span, ' ' + tooltip) end end end diff --git a/app/views/dashboard/_sidebar.html.haml b/app/views/dashboard/_sidebar.html.haml index add9eb7fa29..a980f495427 100644 --- a/app/views/dashboard/_sidebar.html.haml +++ b/app/views/dashboard/_sidebar.html.haml @@ -15,11 +15,4 @@ = render "groups", groups: @groups .prepend-top-20 - %span.rss-icon - = link_to dashboard_path(:atom, { private_token: current_user.private_token }) do - %strong - %i.fa.fa-rss - News Feed - -%hr -= render 'shared/promo' + = render 'shared/promo' diff --git a/app/views/groups/show.html.haml b/app/views/groups/show.html.haml index d876e87852c..81f0e1dd2d8 100644 --- a/app/views/groups/show.html.haml +++ b/app/views/groups/show.html.haml @@ -1,37 +1,22 @@ .dashboard - %section.activities.col-md-8.hidden-sm.hidden-xs - - if current_user - = render "events/event_last_push", event: @last_push - = link_to dashboard_path, class: 'btn btn-tiny' do - ← To dashboard -   - %span.cgray - Currently you are only seeing events from the - = @group.name - group - %hr - = render 'shared/event_filter' - - if @events.any? - .content_list - - else - .nothing-here-block Project activity will be displayed here - = spinner - %aside.side.col-md-4 - .light-well.append-bottom-20 - = image_tag group_icon(@group.path), class: "avatar s90" - .clearfix.light - %h3.page-title - = @group.name - - if @group.description.present? - %p - = escaped_autolink(@group.description) - = render "projects", projects: @projects - - if current_user - .prepend-top-20 - = link_to group_path(@group, { format: :atom, private_token: current_user.private_token }), title: "Feed" do - %strong - %i.fa.fa-rss - News Feed - - %hr - = render 'shared/promo' + %div + = image_tag group_icon(@group.path), class: "avatar s90" + .clearfix + %h2 + = @group.name + - if @group.description.present? + %p + = escaped_autolink(@group.description) + %hr + .row + %section.activities.col-md-8.hidden-sm.hidden-xs + - if current_user + = render "events/event_last_push", event: @last_push + = render 'shared/event_filter' + - if @events.any? + .content_list + - else + .nothing-here-block Project activity will be displayed here + = spinner + %aside.side.col-md-4 + = render "projects", projects: @projects diff --git a/app/views/layouts/group.html.haml b/app/views/layouts/group.html.haml index 86ce398e09c..c5d8568b41a 100644 --- a/app/views/layouts/group.html.haml +++ b/app/views/layouts/group.html.haml @@ -3,7 +3,7 @@ = render "layouts/head", title: group_head_title %body{class: "#{app_theme} application sidenav", :'data-page' => body_data_page} = render "layouts/broadcast" - = render "layouts/head_panel", title: "group: #{@group.name}" + = render "layouts/head_panel", title: @group.name .page-with-sidebar .sidebar-wrapper = render 'layouts/nav/group' diff --git a/app/views/shared/_event_filter.html.haml b/app/views/shared/_event_filter.html.haml index ee0b57fbe5a..d07a9e2b924 100644 --- a/app/views/shared/_event_filter.html.haml +++ b/app/views/shared/_event_filter.html.haml @@ -1,5 +1,19 @@ -.event_filter +%ul.nav.nav-pills.event_filter = event_filter_link EventFilter.push, 'Push events' = event_filter_link EventFilter.merged, 'Merge events' = event_filter_link EventFilter.comments, 'Comments' = event_filter_link EventFilter.team, 'Team' + + - if current_user + - if current_controller?(:dashboard) + %li.pull-right + = link_to dashboard_path(:atom, { private_token: current_user.private_token }), class: 'rss-btn' do + %i.fa.fa-rss + News Feed + + - if current_controller?(:groups) + %li.pull-right + = link_to group_path(@group, { format: :atom, private_token: current_user.private_token }), title: "Feed", class: 'rss-btn' do + %i.fa.fa-rss + News Feed +%hr -- cgit v1.2.1 From eb2face2cb8c0f7d4cae5c3423162f27c7fc02b1 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 17 Dec 2014 12:20:05 +0200 Subject: Dashboard layout uses sidenav Signed-off-by: Dmitriy Zaporozhets --- app/assets/stylesheets/sections/dashboard.scss | 14 -------------- app/views/dashboard/_groups.html.haml | 11 ++++++----- app/views/dashboard/_projects.html.haml | 11 ++++++----- app/views/layouts/application.html.haml | 18 +++++++++++------- app/views/layouts/nav/_dashboard.html.haml | 10 ++++++++-- 5 files changed, 31 insertions(+), 33 deletions(-) diff --git a/app/assets/stylesheets/sections/dashboard.scss b/app/assets/stylesheets/sections/dashboard.scss index d181d83e857..e540f7ff940 100644 --- a/app/assets/stylesheets/sections/dashboard.scss +++ b/app/assets/stylesheets/sections/dashboard.scss @@ -23,20 +23,6 @@ } } -.dashboard { - .dash-filter { - width: 205px; - float: left; - height: inherit; - } -} - -@media (max-width: 1200px) { - .dashboard .dash-filter { - width: 140px; - } -} - .dash-sidebar-tabs { margin-bottom: 2px; border: none; diff --git a/app/views/dashboard/_groups.html.haml b/app/views/dashboard/_groups.html.haml index 5460cf56f22..ddabd6e0d52 100644 --- a/app/views/dashboard/_groups.html.haml +++ b/app/views/dashboard/_groups.html.haml @@ -1,10 +1,11 @@ .panel.panel-default .panel-heading.clearfix - = search_field_tag :filter_group, nil, placeholder: 'Filter by name', class: 'dash-filter form-control' - - if current_user.can_create_group? - = link_to new_group_path, class: "btn btn-new pull-right" do - %i.fa.fa-plus - New group + .input-group + = search_field_tag :filter_group, nil, placeholder: 'Filter by name', class: 'dash-filter form-control' + - if current_user.can_create_group? + .input-group-addon + = link_to new_group_path, class: "" do + %strong New group %ul.well-list.dash-list - groups.each do |group| %li.group-row diff --git a/app/views/dashboard/_projects.html.haml b/app/views/dashboard/_projects.html.haml index 3598425777f..304aa17eba8 100644 --- a/app/views/dashboard/_projects.html.haml +++ b/app/views/dashboard/_projects.html.haml @@ -1,10 +1,11 @@ .panel.panel-default .panel-heading.clearfix - = search_field_tag :filter_projects, nil, placeholder: 'Filter by name', class: 'dash-filter form-control' - - if current_user.can_create_project? - = link_to new_project_path, class: "btn btn-new pull-right" do - %i.fa.fa-plus - New project + .input-group + = search_field_tag :filter_projects, nil, placeholder: 'Filter by name', class: 'dash-filter form-control' + - if current_user.can_create_project? + .input-group-addon + = link_to new_project_path, class: "" do + %strong New project %ul.well-list.dash-list - projects.each do |project| diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index 7d0819aa93e..ddae02bbb45 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -1,12 +1,16 @@ !!! 5 %html{ lang: "en"} = render "layouts/head", title: "Dashboard" - %body{class: "#{app_theme} application", :'data-page' => body_data_page } + %body{class: "#{app_theme} sidenav application", :'data-page' => body_data_page } = render "layouts/broadcast" = render "layouts/head_panel", title: "Dashboard" - %nav.main-nav.navbar-collapse.collapse - .container= render 'layouts/nav/dashboard' - .container - .content - = render "layouts/flash" - = yield + .page-with-sidebar + .sidebar-wrapper + = render 'layouts/nav/dashboard' + .content-wrapper + .container-fluid + .content + = render "layouts/flash" + .clearfix + = yield + = yield :embedded_scripts diff --git a/app/views/layouts/nav/_dashboard.html.haml b/app/views/layouts/nav/_dashboard.html.haml index a6e9772d93f..619cf625689 100644 --- a/app/views/layouts/nav/_dashboard.html.haml +++ b/app/views/layouts/nav/_dashboard.html.haml @@ -1,18 +1,24 @@ -%ul +%ul.nav.nav-sidebar.navbar-collapse.collapse = nav_link(path: 'dashboard#show', html_options: {class: 'home'}) do = link_to root_path, title: 'Home', class: 'shortcuts-activity' do + %i.fa.fa-dashboard Activity = nav_link(path: 'dashboard#projects') do = link_to projects_dashboard_path, class: 'shortcuts-projects' do + %i.fa.fa-cube Projects = nav_link(path: 'dashboard#issues') do = link_to issues_dashboard_path, class: 'shortcuts-issues' do + %i.fa.fa-exclamation-circle Issues %span.count= current_user.assigned_issues.opened.count = nav_link(path: 'dashboard#merge_requests') do = link_to merge_requests_dashboard_path, class: 'shortcuts-merge_requests' do + %i.fa.fa-tasks Merge Requests %span.count= current_user.assigned_merge_requests.opened.count = nav_link(controller: :help) do - = link_to "Help", help_path + = link_to help_path do + %i.fa.fa-question-circle + Help -- cgit v1.2.1 From 51ee71d8e0912656b46dcc4d3add7c2aabd2ead3 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 17 Dec 2014 12:26:33 +0200 Subject: Migrate public layouts to new design Signed-off-by: Dmitriy Zaporozhets --- app/views/layouts/explore.html.haml | 2 +- app/views/layouts/nav/_group.html.haml | 9 +++++---- app/views/layouts/public_group.html.haml | 16 +++++++++++----- app/views/layouts/public_projects.html.haml | 15 ++++++++++----- app/views/layouts/public_users.html.haml | 2 +- 5 files changed, 28 insertions(+), 16 deletions(-) diff --git a/app/views/layouts/explore.html.haml b/app/views/layouts/explore.html.haml index d023846c5eb..dcc7962830d 100644 --- a/app/views/layouts/explore.html.haml +++ b/app/views/layouts/explore.html.haml @@ -2,7 +2,7 @@ !!! 5 %html{ lang: "en"} = render "layouts/head", title: page_title - %body{class: "#{app_theme} application", :'data-page' => body_data_page} + %body{class: "#{app_theme} sidenav application", :'data-page' => body_data_page} = render "layouts/broadcast" - if current_user = render "layouts/head_panel", title: page_title diff --git a/app/views/layouts/nav/_group.html.haml b/app/views/layouts/nav/_group.html.haml index 686280c9ec7..78d6b768155 100644 --- a/app/views/layouts/nav/_group.html.haml +++ b/app/views/layouts/nav/_group.html.haml @@ -3,10 +3,11 @@ = link_to group_path(@group), title: "Home" do %i.fa.fa-dashboard Activity - = nav_link(controller: [:group, :milestones]) do - = link_to group_milestones_path(@group) do - %i.fa.fa-clock-o - Milestones + - if current_user + = nav_link(controller: [:group, :milestones]) do + = link_to group_milestones_path(@group) do + %i.fa.fa-clock-o + Milestones = nav_link(path: 'groups#issues') do = link_to issues_group_path(@group) do %i.fa.fa-exclamation-circle diff --git a/app/views/layouts/public_group.html.haml b/app/views/layouts/public_group.html.haml index a289b784725..99c29dc78dc 100644 --- a/app/views/layouts/public_group.html.haml +++ b/app/views/layouts/public_group.html.haml @@ -1,10 +1,16 @@ !!! 5 %html{ lang: "en"} = render "layouts/head", title: group_head_title - %body{class: "#{app_theme} application", :'data-page' => body_data_page} + %body{class: "#{app_theme} sidenav application", :'data-page' => body_data_page} = render "layouts/broadcast" = render "layouts/public_head_panel", title: "group: #{@group.name}" - %nav.main-nav.navbar-collapse.collapse - .container= render 'layouts/nav/group' - .container - .content= yield + .page-with-sidebar + .sidebar-wrapper + = render 'layouts/nav/group' + .content-wrapper + .container-fluid + .content + = render "layouts/flash" + .clearfix + = yield + = yield :embedded_scripts diff --git a/app/views/layouts/public_projects.html.haml b/app/views/layouts/public_projects.html.haml index 2a9230244f8..343bddcf0b2 100644 --- a/app/views/layouts/public_projects.html.haml +++ b/app/views/layouts/public_projects.html.haml @@ -1,10 +1,15 @@ !!! 5 %html{ lang: "en"} = render "layouts/head", title: @project.name_with_namespace - %body{class: "#{app_theme} application", :'data-page' => body_data_page} + %body{class: "#{app_theme} sidenav application", :'data-page' => body_data_page} = render "layouts/broadcast" = render "layouts/public_head_panel", title: project_title(@project) - %nav.main-nav.navbar-collapse.collapse - .container= render 'layouts/nav/project' - .container - .content= yield + .page-with-sidebar + .sidebar-wrapper + = render 'layouts/nav/project' + .content-wrapper + .container-fluid + .content + = render "layouts/flash" + = yield + = yield :embedded_scripts diff --git a/app/views/layouts/public_users.html.haml b/app/views/layouts/public_users.html.haml index 4aa258fea0d..18b856b10e1 100644 --- a/app/views/layouts/public_users.html.haml +++ b/app/views/layouts/public_users.html.haml @@ -1,7 +1,7 @@ !!! 5 %html{ lang: "en"} = render "layouts/head", title: @title - %body{class: "#{app_theme} application", :'data-page' => body_data_page} + %body{class: "#{app_theme} sidenav application", :'data-page' => body_data_page} = render "layouts/broadcast" = render "layouts/public_head_panel", title: @title .container.navless-container -- cgit v1.2.1 From d6eda842a9094929423a0c43f3db76c0621603bf Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 17 Dec 2014 12:44:36 +0200 Subject: Sidenav for profile area Signed-off-by: Dmitriy Zaporozhets --- app/views/layouts/nav/_profile.html.haml | 30 +++++++++++++++++++++++------- app/views/layouts/navless.html.haml | 2 +- app/views/layouts/profile.html.haml | 18 +++++++++++------- 3 files changed, 35 insertions(+), 15 deletions(-) diff --git a/app/views/layouts/nav/_profile.html.haml b/app/views/layouts/nav/_profile.html.haml index 1de5ee99cf4..05ba20e3611 100644 --- a/app/views/layouts/nav/_profile.html.haml +++ b/app/views/layouts/nav/_profile.html.haml @@ -1,26 +1,42 @@ -%ul +%ul.nav-sidebar.navbar-collapse.collapse = nav_link(path: 'profiles#show', html_options: {class: 'home'}) do = link_to profile_path, title: "Profile" do + %i.fa.fa-user Profile = nav_link(controller: :accounts) do - = link_to "Account", profile_account_path + = link_to profile_account_path do + %i.fa.fa-gear + Account = nav_link(controller: :emails) do = link_to profile_emails_path do + %i.fa.fa-envelope-o Emails %span.count= current_user.emails.count + 1 - unless current_user.ldap_user? = nav_link(controller: :passwords) do - = link_to "Password", edit_profile_password_path + = link_to edit_profile_password_path do + %i.fa.fa-lock + Password = nav_link(controller: :notifications) do - = link_to "Notifications", profile_notifications_path + = link_to profile_notifications_path do + %i.fa.fa-inbox + Notifications + = nav_link(controller: :keys) do = link_to profile_keys_path do + %i.fa.fa-key SSH Keys %span.count= current_user.keys.count = nav_link(path: 'profiles#design') do - = link_to "Design", design_profile_path + = link_to design_profile_path do + %i.fa.fa-image + Design = nav_link(controller: :groups) do - = link_to "Groups", profile_groups_path + = link_to profile_groups_path do + %i.fa.fa-group + Groups = nav_link(path: 'profiles#history') do - = link_to "History", history_profile_path + = link_to history_profile_path do + %i.fa.fa-history + History diff --git a/app/views/layouts/navless.html.haml b/app/views/layouts/navless.html.haml index 2c5fffe384f..7f452e84b01 100644 --- a/app/views/layouts/navless.html.haml +++ b/app/views/layouts/navless.html.haml @@ -1,7 +1,7 @@ !!! 5 %html{ lang: "en"} = render "layouts/head", title: @title - %body{class: "#{app_theme} application", :'data-page' => body_data_page} + %body{class: "#{app_theme} sidenav application", :'data-page' => body_data_page} = render "layouts/broadcast" = render "layouts/head_panel", title: @title .container.navless-container diff --git a/app/views/layouts/profile.html.haml b/app/views/layouts/profile.html.haml index 1d0ab84d26f..f20f4ea1283 100644 --- a/app/views/layouts/profile.html.haml +++ b/app/views/layouts/profile.html.haml @@ -1,12 +1,16 @@ !!! 5 %html{ lang: "en"} = render "layouts/head", title: "Profile" - %body{class: "#{app_theme} profile", :'data-page' => body_data_page} + %body{class: "#{app_theme} sidenav profile", :'data-page' => body_data_page} = render "layouts/broadcast" = render "layouts/head_panel", title: "Profile" - %nav.main-nav.navbar-collapse.collapse - .container= render 'layouts/nav/profile' - .container - .content - = render "layouts/flash" - = yield + .page-with-sidebar + .sidebar-wrapper + = render 'layouts/nav/profile' + .content-wrapper + .container-fluid + .content + = render "layouts/flash" + .clearfix + = yield + = yield :embedded_scripts -- cgit v1.2.1 From c0d589dedb15548aabad88855fd6c340b348cf5b Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 17 Dec 2014 13:10:58 +0200 Subject: Improve sidenav colors Signed-off-by: Dmitriy Zaporozhets --- app/assets/stylesheets/sections/sidebar.scss | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/app/assets/stylesheets/sections/sidebar.scss b/app/assets/stylesheets/sections/sidebar.scss index a267869c0dd..79433ce5120 100644 --- a/app/assets/stylesheets/sections/sidebar.scss +++ b/app/assets/stylesheets/sections/sidebar.scss @@ -75,13 +75,17 @@ body.sidenav { .nav-sidebar li { &.active a { - color: #333; + color: #111; background: #EEE; font-weight: bold; &.no-highlight { background: none; } + + i { + color: #444; + } } } @@ -93,7 +97,7 @@ body.sidenav { } a { - color: #666; + color: #555; display: block; text-decoration: none; padding: 6px 15px; @@ -114,7 +118,7 @@ body.sidenav { i { width: 20px; - color: #999; + color: #888; } } } -- cgit v1.2.1 From b667a45942a230b86c21f47897de5a787015059f Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 18 Dec 2014 17:22:10 +0200 Subject: Restyle issue/mr/milestone to new layout Signed-off-by: Dmitriy Zaporozhets --- app/assets/stylesheets/generic/issue_box.scss | 120 ++---------------- app/assets/stylesheets/sections/issues.scss | 4 + app/assets/stylesheets/sections/votes.scss | 10 -- app/views/projects/issues/_issue_context.html.haml | 43 ++++--- app/views/projects/issues/show.html.haml | 134 +++++++++------------ app/views/projects/merge_requests/_show.html.haml | 112 ++++++++++++----- .../merge_requests/show/_context.html.haml | 41 +++---- .../projects/merge_requests/show/_mr_box.html.haml | 26 +--- .../merge_requests/show/_mr_title.html.haml | 52 ++------ app/views/projects/milestones/show.html.haml | 94 +++++++-------- 10 files changed, 256 insertions(+), 380 deletions(-) diff --git a/app/assets/stylesheets/generic/issue_box.scss b/app/assets/stylesheets/generic/issue_box.scss index 79fbad4b946..176c45581a8 100644 --- a/app/assets/stylesheets/generic/issue_box.scss +++ b/app/assets/stylesheets/generic/issue_box.scss @@ -1,128 +1,30 @@ /** - * Issue box: - * Huge block (one per page) for storing title, descripion and other information. + * Issue box for showing Open/Closed state: * Used for Issue#show page, MergeRequest#show page etc * - * CLasses: - * .issue-box - Regular box */ .issue-box { - color: #555; - margin:20px 0; - background: $box_bg; - @include box-shadow(0 1px 1px rgba(0, 0, 0, 0.09)); + display: inline-block; + padding: 0 10px; &.issue-box-closed { - .state { - background-color: #F3CECE; - border-color: $border_danger; - } - .state-label { - background-color: $bg_danger; - color: #FFF; - } + background-color: $bg_danger; + color: #FFF; } &.issue-box-merged { - .state { - background-color: #B7CEE7; - border-color: $border_primary; - } - .state-label { - background-color: $bg_primary; - color: #FFF; - } + background-color: $bg_primary; + color: #FFF; } &.issue-box-open { - .state { - background-color: #D6F1D7; - border-color: $bg_success; - } - .state-label { - background-color: $bg_success; - color: #FFF; - } + background-color: $bg_success; + color: #FFF; } &.issue-box-expired { - .state { - background-color: #EEE9B3; - border-color: #faebcc; - } - .state-label { - background: #cea61b; - color: #FFF; - } - } - - .control-group { - margin-bottom: 0; - } - - .state { - background-color: #f9f9f9; - } - - .title { - font-size: 28px; - font-weight: normal; - line-height: 1.5; - margin: 0; - color: #333; - padding: 10px 15px; - } - - .context { - border: none; - border-top: 1px solid #eee; - padding: 10px 15px; - - // Reset text align for children - .text-right > * { text-align: left; } - - @media (max-width: $screen-xs-max) { - // Don't right align on mobile - .text-right { text-align: left; } - - .row .col-md-6 { - padding-top: 5px; - } - } - } - - .description { - padding: 0 15px 10px 15px; - - code { - white-space: pre-wrap; - } - } - - .title, .context, .description { - .clearfix { - margin: 0; - } - } - - .state-label { - font-size: 14px; - float: left; - font-weight: bold; - padding: 10px 15px; - } - - .cross-project-ref { - float: left; - padding: 10px 15px; - } - - .creator { - float: right; - padding: 10px 15px; - a { - text-decoration: underline; - } + background: #cea61b; + color: #FFF; } } diff --git a/app/assets/stylesheets/sections/issues.scss b/app/assets/stylesheets/sections/issues.scss index 9a5400fffbc..929838379cb 100644 --- a/app/assets/stylesheets/sections/issues.scss +++ b/app/assets/stylesheets/sections/issues.scss @@ -162,3 +162,7 @@ form.edit-issue { } } } + +.issue-title { + margin-top: 0; +} diff --git a/app/assets/stylesheets/sections/votes.scss b/app/assets/stylesheets/sections/votes.scss index d683e33e1f0..ba0a519dca6 100644 --- a/app/assets/stylesheets/sections/votes.scss +++ b/app/assets/stylesheets/sections/votes.scss @@ -37,13 +37,3 @@ margin: 0 8px; } -.votes-holder { - float: right; - width: 250px; - - @media (max-width: $screen-xs-max) { - width: 100%; - margin-top: 5px; - margin-bottom: 10px; - } -} diff --git a/app/views/projects/issues/_issue_context.html.haml b/app/views/projects/issues/_issue_context.html.haml index 648f459dc9e..d443aae43ac 100644 --- a/app/views/projects/issues/_issue_context.html.haml +++ b/app/views/projects/issues/_issue_context.html.haml @@ -1,25 +1,24 @@ = form_for [@project, @issue], remote: true, html: {class: 'edit-issue inline-update'} do |f| - .row - .col-sm-6 - %strong.append-right-10 - Assignee: + %div.prepend-top-20 + %strong + Assignee: - - if can?(current_user, :modify_issue, @issue) - = project_users_select_tag('issue[assignee_id]', placeholder: 'Select assignee', class: 'custom-form-control js-select2 js-assignee', selected: @issue.assignee_id) - - elsif issue.assignee - = link_to_member(@project, @issue.assignee) - - else - None + - if can?(current_user, :modify_issue, @issue) + = project_users_select_tag('issue[assignee_id]', placeholder: 'Select assignee', class: 'custom-form-control js-select2 js-assignee', selected: @issue.assignee_id) + - elsif issue.assignee + = link_to_member(@project, @issue.assignee) + - else + None - .col-sm-6.text-right - %strong.append-right-10 - Milestone: - - if can?(current_user, :modify_issue, @issue) - = f.select(:milestone_id, milestone_options(@issue), { include_blank: "Select milestone" }, {class: 'select2 select2-compact js-select2 js-milestone'}) - = hidden_field_tag :issue_context - = f.submit class: 'btn' - - elsif issue.milestone - = link_to project_milestone_path(@project, @issue.milestone) do - = @issue.milestone.title - - else - None + %div.prepend-top-20 + %strong + Milestone: + - if can?(current_user, :modify_issue, @issue) + = f.select(:milestone_id, milestone_options(@issue), { include_blank: "Select milestone" }, {class: 'select2 select2-compact js-select2 js-milestone'}) + = hidden_field_tag :issue_context + = f.submit class: 'btn' + - elsif issue.milestone + = link_to project_milestone_path(@project, @issue.milestone) do + = @issue.milestone.title + - else + None diff --git a/app/views/projects/issues/show.html.haml b/app/views/projects/issues/show.html.haml index 01a1fabda26..5e5098b73ef 100644 --- a/app/views/projects/issues/show.html.haml +++ b/app/views/projects/issues/show.html.haml @@ -1,79 +1,65 @@ %h3.page-title - Issue ##{@issue.iid} - - %span.pull-right.issue-btn-group - - if can?(current_user, :write_issue, @project) - = link_to new_project_issue_path(@project), class: "btn btn-grouped", title: "New Issue", id: "new_issue_link" do - %i.fa.fa-plus - New Issue - - if can?(current_user, :modify_issue, @issue) - - if @issue.closed? - = link_to 'Reopen', project_issue_path(@project, @issue, issue: {state_event: :reopen }, status_only: true), method: :put, class: "btn btn-grouped btn-reopen" - - else - = link_to 'Close', project_issue_path(@project, @issue, issue: {state_event: :close }, status_only: true), method: :put, class: "btn btn-grouped btn-close", title: "Close Issue" - - = link_to edit_project_issue_path(@project, @issue), class: "btn btn-grouped" do - %i.fa.fa-pencil-square-o - Edit - -.clearfix - .votes-holder - #votes= render 'votes/votes_block', votable: @issue - - .back-link - = link_to project_issues_path(@project) do - ← To issues list - %span.milestone-nav-link - - if @issue.milestone - | - %span.light Milestone - = link_to project_milestone_path(@project, @issue.milestone) do - = @issue.milestone.title - -.issue-box{ class: issue_box_class(@issue) } - .state.clearfix - .state-label - - if @issue.closed? - Closed - - else - Open - - .cross-project-ref - %i.fa.fa-link.has_tooltip{:"data-original-title" => 'Cross-project reference'} - = cross_project_reference(@project, @issue) - - .creator - Created by #{link_to_member(@project, @issue.author)} #{issue_timestamp(@issue)} - - %h4.title - = gfm escape_once(@issue.title) - - - if @issue.description.present? - .description - .wiki - = preserve do - = markdown(@issue.description, parse_tasks: true) - .context - %cite.cgray - = render partial: 'issue_context', locals: { issue: @issue } - - -- content_for :note_actions do - - if can?(current_user, :modify_issue, @issue) + .issue-box{ class: issue_box_class(@issue) } - if @issue.closed? - = link_to 'Reopen Issue', project_issue_path(@project, @issue, issue: {state_event: :reopen }, status_only: true), method: :put, class: "btn btn-grouped btn-reopen js-note-target-reopen", title: 'Reopen Issue' + Closed - else - = link_to 'Close Issue', project_issue_path(@project, @issue, issue: {state_event: :close }, status_only: true), method: :put, class: "btn btn-grouped btn-close js-note-target-close", title: "Close Issue" - -.participants - %cite.cgray - = pluralize(@issue.participants.count, 'participant') - - @issue.participants.each do |participant| - = link_to_member(@project, participant, name: false, size: 24) + Open + Issue ##{@issue.iid} + .pull-right.creator + %small Created by #{link_to_member(@project, @issue.author)} #{issue_timestamp(@issue)} +%hr +.row + .col-sm-9 + %h3.issue-title + = gfm escape_once(@issue.title) + %div + - if @issue.description.present? + .description + .wiki + = preserve do + = markdown(@issue.description, parse_tasks: true) + %hr + - content_for :note_actions do + - if can?(current_user, :modify_issue, @issue) + - if @issue.closed? + = link_to 'Reopen Issue', project_issue_path(@project, @issue, issue: {state_event: :reopen }, status_only: true), method: :put, class: "btn btn-grouped btn-reopen js-note-target-reopen", title: 'Reopen Issue' + - else + = link_to 'Close Issue', project_issue_path(@project, @issue, issue: {state_event: :close }, status_only: true), method: :put, class: "btn btn-grouped btn-close js-note-target-close", title: "Close Issue" + .participants + %cite.cgray + = pluralize(@issue.participants.count, 'participant') + - @issue.participants.each do |participant| + = link_to_member(@project, participant, name: false, size: 24) + .issue-show-labels.pull-right + - @issue.labels.each do |label| + = link_to project_issues_path(@project, label_name: label.name) do + = render_colored_label(label) - .issue-show-labels.pull-right - - @issue.labels.each do |label| - = link_to project_issues_path(@project, label_name: label.name) do - = render_colored_label(label) + .voting_notes#notes= render "projects/notes/notes_with_form" + .col-sm-3 + %div + - if can?(current_user, :write_issue, @project) + = link_to new_project_issue_path(@project), class: "btn btn-block", title: "New Issue", id: "new_issue_link" do + %i.fa.fa-plus + New Issue + - if can?(current_user, :modify_issue, @issue) + - if @issue.closed? + = link_to 'Reopen', project_issue_path(@project, @issue, issue: {state_event: :reopen }, status_only: true), method: :put, class: "btn btn-block btn-reopen" + - else + = link_to 'Close', project_issue_path(@project, @issue, issue: {state_event: :close }, status_only: true), method: :put, class: "btn btn-block btn-close", title: "Close Issue" -.voting_notes#notes= render "projects/notes/notes_with_form" + = link_to edit_project_issue_path(@project, @issue), class: "btn btn-block" do + %i.fa.fa-pencil-square-o + Edit + .clearfix + %span.slead.has_tooltip{:"data-original-title" => 'Cross-project reference'} + = cross_project_reference(@project, @issue) + %hr + .clearfix + .votes-holder + %h6 Votes + #votes= render 'votes/votes_block', votable: @issue + %hr + .context + %cite.cgray + = render partial: 'issue_context', locals: { issue: @issue } diff --git a/app/views/projects/merge_requests/_show.html.haml b/app/views/projects/merge_requests/_show.html.haml index 7b28dd5e7da..fd45ca87b8e 100644 --- a/app/views/projects/merge_requests/_show.html.haml +++ b/app/views/projects/merge_requests/_show.html.haml @@ -1,38 +1,90 @@ .merge-request = render "projects/merge_requests/show/mr_title" - = render "projects/merge_requests/show/how_to_merge" - = render "projects/merge_requests/show/mr_box" - = render "projects/merge_requests/show/state_widget" - = render "projects/merge_requests/show/commits" - = render "projects/merge_requests/show/participants" + %hr + .row + .col-sm-9 + = render "projects/merge_requests/show/how_to_merge" + = render "projects/merge_requests/show/mr_box" + %hr + .append-bottom-20 + %p.slead + %span From + - if @merge_request.for_fork? + %strong.label-branch< + - if @merge_request.source_project + = link_to @merge_request.source_project_namespace, project_path(@merge_request.source_project) + - else + \ #{@merge_request.source_project_namespace} + \:#{@merge_request.source_branch} + %span into + %strong.label-branch #{@merge_request.target_project_namespace}:#{@merge_request.target_branch} + - else + %strong.label-branch #{@merge_request.source_branch} + %span into + %strong.label-branch #{@merge_request.target_branch} + = render "projects/merge_requests/show/state_widget" + = render "projects/merge_requests/show/commits" + = render "projects/merge_requests/show/participants" - - if @commits.present? - %ul.nav.nav-pills.merge-request-tabs - %li.notes-tab{data: {action: 'notes'}} - = link_to project_merge_request_path(@project, @merge_request) do - %i.fa.fa-comment - Discussion - %span.badge= @merge_request.mr_and_commit_notes.count - %li.diffs-tab{data: {action: 'diffs'}} - = link_to diffs_project_merge_request_path(@project, @merge_request) do - %i.fa.fa-list-alt - Changes - %span.badge= @merge_request.diffs.size + - if @commits.present? + %ul.nav.nav-pills.merge-request-tabs + %li.notes-tab{data: {action: 'notes'}} + = link_to project_merge_request_path(@project, @merge_request) do + %i.fa.fa-comment + Discussion + %span.badge= @merge_request.mr_and_commit_notes.count + %li.diffs-tab{data: {action: 'diffs'}} + = link_to diffs_project_merge_request_path(@project, @merge_request) do + %i.fa.fa-list-alt + Changes + %span.badge= @merge_request.diffs.size + + - content_for :note_actions do + - if can?(current_user, :modify_merge_request, @merge_request) + - if @merge_request.open? + = link_to 'Close', project_merge_request_path(@project, @merge_request, merge_request: {state_event: :close }), method: :put, class: "btn btn-grouped btn-close close-mr-link js-note-target-close", title: "Close merge request" + - if @merge_request.closed? + = link_to 'Reopen', project_merge_request_path(@project, @merge_request, merge_request: {state_event: :reopen }), method: :put, class: "btn btn-grouped btn-reopen reopen-mr-link js-note-target-reopen", title: "Reopen merge request" + + .diffs.tab-content + - if current_page?(action: 'diffs') + = render "projects/merge_requests/show/diffs" + .notes.tab-content.voting_notes#notes{ class: (controller.action_name == 'show') ? "" : "hide" } + = render "projects/notes/notes_with_form" + .mr-loading-status + = spinner + .col-sm-3 + .issue-btn-group + - if can?(current_user, :modify_merge_request, @merge_request) + - if @merge_request.open? + .btn-group-justified.append-bottom-20 + .btn-group + %a.btn.dropdown-toggle{ data: {toggle: :dropdown} } + %i.fa.fa-download + Download as + %span.caret + %ul.dropdown-menu + %li= link_to "Email Patches", project_merge_request_path(@project, @merge_request, format: :patch) + %li= link_to "Plain Diff", project_merge_request_path(@project, @merge_request, format: :diff) + = link_to 'Close', project_merge_request_path(@project, @merge_request, merge_request: { state_event: :close }), method: :put, class: "btn btn-block btn-close", title: "Close merge request" + = link_to edit_project_merge_request_path(@project, @merge_request), class: "btn btn-block", id:"edit_merge_request" do + %i.fa.fa-pencil-square-o + Edit + - if @merge_request.closed? + = link_to 'Reopen', project_merge_request_path(@project, @merge_request, merge_request: {state_event: :reopen }), method: :put, class: "btn btn-block btn-reopen reopen-mr-link", title: "Close merge request" + .clearfix + %span.slead.has_tooltip{:"data-original-title" => 'Cross-project reference'} + = cross_project_reference(@project, @merge_request) + %hr + .votes-holder.hidden-sm.hidden-xs + %h6 Votes + #votes= render 'votes/votes_block', votable: @merge_request + %hr + .context + %cite.cgray + = render partial: 'projects/merge_requests/show/context', locals: { merge_request: @merge_request } - - content_for :note_actions do - - if can?(current_user, :modify_merge_request, @merge_request) - - if @merge_request.open? - = link_to 'Close', project_merge_request_path(@project, @merge_request, merge_request: {state_event: :close }), method: :put, class: "btn btn-grouped btn-close close-mr-link js-note-target-close", title: "Close merge request" - - if @merge_request.closed? - = link_to 'Reopen', project_merge_request_path(@project, @merge_request, merge_request: {state_event: :reopen }), method: :put, class: "btn btn-grouped btn-reopen reopen-mr-link js-note-target-reopen", title: "Reopen merge request" - .diffs.tab-content - - if current_page?(action: 'diffs') - = render "projects/merge_requests/show/diffs" - .notes.tab-content.voting_notes#notes{ class: (controller.action_name == 'show') ? "" : "hide" } - = render "projects/notes/notes_with_form" - .mr-loading-status - = spinner :javascript var merge_request; diff --git a/app/views/projects/merge_requests/show/_context.html.haml b/app/views/projects/merge_requests/show/_context.html.haml index 089302e3588..d4b6434b171 100644 --- a/app/views/projects/merge_requests/show/_context.html.haml +++ b/app/views/projects/merge_requests/show/_context.html.haml @@ -1,24 +1,23 @@ = form_for [@project, @merge_request], remote: true, html: {class: 'edit-merge_request inline-update'} do |f| - .row - .col-sm-6 - %strong.append-right-10 - Assignee: + %div.prepend-top-20 + %strong + Assignee: - - if can?(current_user, :modify_merge_request, @merge_request) - = project_users_select_tag('merge_request[assignee_id]', placeholder: 'Select assignee', class: 'custom-form-control js-select2 js-assignee', selected: @merge_request.assignee_id) - - elsif merge_request.assignee - = link_to_member(@project, @merge_request.assignee) - - else - None + - if can?(current_user, :modify_merge_request, @merge_request) + = project_users_select_tag('merge_request[assignee_id]', placeholder: 'Select assignee', class: 'custom-form-control js-select2 js-assignee', selected: @merge_request.assignee_id) + - elsif merge_request.assignee + = link_to_member(@project, @merge_request.assignee) + - else + None - .col-sm-6.text-right - %strong.append-right-10 - Milestone: - - if can?(current_user, :modify_merge_request, @merge_request) - = f.select(:milestone_id, milestone_options(@merge_request), { include_blank: "Select milestone" }, {class: 'select2 select2-compact js-select2 js-milestone'}) - = hidden_field_tag :merge_request_context - = f.submit class: 'btn' - - elsif merge_request.milestone - = link_to merge_request.milestone.title, project_milestone_path - - else - None + %div.prepend-top-20 + %strong + Milestone: + - if can?(current_user, :modify_merge_request, @merge_request) + = f.select(:milestone_id, milestone_options(@merge_request), { include_blank: "Select milestone" }, {class: 'select2 select2-compact js-select2 js-milestone'}) + = hidden_field_tag :merge_request_context + = f.submit class: 'btn' + - elsif merge_request.milestone + = link_to merge_request.milestone.title, project_milestone_path + - else + None diff --git a/app/views/projects/merge_requests/show/_mr_box.html.haml b/app/views/projects/merge_requests/show/_mr_box.html.haml index 866b236d827..ab1284547ad 100644 --- a/app/views/projects/merge_requests/show/_mr_box.html.haml +++ b/app/views/projects/merge_requests/show/_mr_box.html.haml @@ -1,29 +1,9 @@ -.issue-box{ class: issue_box_class(@merge_request) } - .state.clearfix - .state-label - - if @merge_request.merged? - Merged - - elsif @merge_request.closed? - Closed - - else - Open - - .cross-project-ref - %i.fa.fa-link.has_tooltip{:"data-original-title" => 'Cross-project reference'} - = cross_project_reference(@project, @merge_request) - - .creator - Created by #{link_to_member(@project, @merge_request.author)} #{time_ago_with_tooltip(@merge_request.created_at)} - - %h4.title - = gfm escape_once(@merge_request.title) +%h3.issue-title + = gfm escape_once(@merge_request.title) +%div - if @merge_request.description.present? .description .wiki = preserve do = markdown(@merge_request.description, parse_tasks: true) - - .context - %cite.cgray - = render partial: 'projects/merge_requests/show/context', locals: { merge_request: @merge_request } diff --git a/app/views/projects/merge_requests/show/_mr_title.html.haml b/app/views/projects/merge_requests/show/_mr_title.html.haml index 6fe765248e4..fb34de43c1b 100644 --- a/app/views/projects/merge_requests/show/_mr_title.html.haml +++ b/app/views/projects/merge_requests/show/_mr_title.html.haml @@ -1,45 +1,11 @@ %h3.page-title - = "Merge Request ##{@merge_request.iid}" - - %span.pull-right.issue-btn-group - - if can?(current_user, :modify_merge_request, @merge_request) - - if @merge_request.open? - .btn-group.pull-left - %a.btn.btn-grouped.dropdown-toggle{ data: {toggle: :dropdown} } - %i.fa.fa-download - Download as - %span.caret - %ul.dropdown-menu - %li= link_to "Email Patches", project_merge_request_path(@project, @merge_request, format: :patch) - %li= link_to "Plain Diff", project_merge_request_path(@project, @merge_request, format: :diff) - - = link_to 'Close', project_merge_request_path(@project, @merge_request, merge_request: { state_event: :close }), method: :put, class: "btn btn-grouped btn-close", title: "Close merge request" - - = link_to edit_project_merge_request_path(@project, @merge_request), class: "btn btn-grouped", id:"edit_merge_request" do - %i.fa.fa-pencil-square-o - Edit - - if @merge_request.closed? - = link_to 'Reopen', project_merge_request_path(@project, @merge_request, merge_request: {state_event: :reopen }), method: :put, class: "btn btn-grouped btn-reopen reopen-mr-link", title: "Close merge request" - -.votes-holder.hidden-sm.hidden-xs - #votes= render 'votes/votes_block', votable: @merge_request - -.back-link - = link_to project_merge_requests_path(@project) do - ← To merge requests - - %span.prepend-left-20 - %span From - - if @merge_request.for_fork? - %strong.label-branch< - - if @merge_request.source_project - = link_to @merge_request.source_project_namespace, project_path(@merge_request.source_project) - - else - \ #{@merge_request.source_project_namespace} - \:#{@merge_request.source_branch} - %span into - %strong.label-branch #{@merge_request.target_project_namespace}:#{@merge_request.target_branch} + .issue-box{ class: issue_box_class(@merge_request) } + - if @merge_request.merged? + Merged + - elsif @merge_request.closed? + Closed - else - %strong.label-branch #{@merge_request.source_branch} - %span into - %strong.label-branch #{@merge_request.target_branch} + Open + = "Merge Request ##{@merge_request.iid}" + .pull-right.creator + %small Created by #{link_to_member(@project, @merge_request.author)} #{time_ago_with_tooltip(@merge_request.created_at)} diff --git a/app/views/projects/milestones/show.html.haml b/app/views/projects/milestones/show.html.haml index f08ccc1d570..cd62e4811ac 100644 --- a/app/views/projects/milestones/show.html.haml +++ b/app/views/projects/milestones/show.html.haml @@ -1,57 +1,59 @@ = render "projects/issues_nav" %h3.page-title + .issue-box{ class: issue_box_class(@milestone) } + - if @milestone.closed? + Closed + - elsif @milestone.expired? + Expired + - else + Open Milestone ##{@milestone.iid} - .pull-right - - if can?(current_user, :admin_milestone, @project) - = link_to edit_project_milestone_path(@project, @milestone), class: "btn btn-grouped" do - %i.fa.fa-pencil-square-o - Edit - - if @milestone.active? - = link_to 'Close Milestone', project_milestone_path(@project, @milestone, milestone: {state_event: :close }), method: :put, class: "btn btn-close btn-grouped" - - else - = link_to 'Reopen Milestone', project_milestone_path(@project, @milestone, milestone: {state_event: :activate }), method: :put, class: "btn btn-reopen btn-grouped" + .pull-right.creator + %small= @milestone.expires_at +%hr - if @milestone.issues.any? && @milestone.can_be_closed? .alert.alert-success %span All issues for this milestone are closed. You may close milestone now. +.row + .col-sm-9 + %h3.issue-title + = gfm escape_once(@milestone.title) + %div + - if @milestone.description.present? + .description + .wiki + = preserve do + = markdown @milestone.description -.back-link - = link_to project_milestones_path(@project) do - ← To milestones list - - -.issue-box{ class: issue_box_class(@milestone) } - .state.clearfix - .state-label - - if @milestone.closed? - Closed - - elsif @milestone.expired? - Expired - - else - Open - .creator - = @milestone.expires_at - - %h4.title - = gfm escape_once(@milestone.title) + %hr + .context + %p.lead + Progress: + #{@milestone.closed_items_count} closed + – + #{@milestone.open_items_count} open +   + %span.light #{@milestone.percent_complete}% complete + %span.pull-right= @milestone.expires_at + .progress.progress-info + .progress-bar{style: "width: #{@milestone.percent_complete}%;"} - - if @milestone.description.present? - .description - .wiki - = preserve do - = markdown @milestone.description + .col-sm-3 + %div + - if can?(current_user, :admin_milestone, @project) + = link_to edit_project_milestone_path(@project, @milestone), class: "btn btn-block" do + %i.fa.fa-pencil-square-o + Edit + - if @milestone.active? + = link_to 'Close Milestone', project_milestone_path(@project, @milestone, milestone: {state_event: :close }), method: :put, class: "btn btn-close btn-block" + - else + = link_to 'Reopen Milestone', project_milestone_path(@project, @milestone, milestone: {state_event: :activate }), method: :put, class: "btn btn-reopen btn-block" + = link_to new_project_issue_path(@project, issue: { milestone_id: @milestone.id }), class: "btn btn-block", title: "New Issue" do + %i.fa.fa-plus + New Issue + = link_to 'Browse Issues', project_issues_path(@milestone.project, milestone_id: @milestone.id), class: "btn edit-milestone-link btn-block" - .context - %p - Progress: - #{@milestone.closed_items_count} closed - – - #{@milestone.open_items_count} open -   - %span.light #{@milestone.percent_complete}% complete - %span.pull-right= @milestone.expires_at - .progress.progress-info - .progress-bar{style: "width: #{@milestone.percent_complete}%;"} %ul.nav.nav-tabs @@ -69,10 +71,6 @@ %span.badge= @users.count .pull-right - = link_to new_project_issue_path(@project, issue: { milestone_id: @milestone.id }), class: "btn btn-small btn-grouped", title: "New Issue" do - %i.fa.fa-plus - New Issue - = link_to 'Browse Issues', project_issues_path(@milestone.project, milestone_id: @milestone.id), class: "btn btn-small edit-milestone-link btn-grouped" .tab-content .tab-pane.active#tab-issues -- cgit v1.2.1 From abd83baeab474764030f1daa7c7ca3335ca91d98 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Sun, 21 Dec 2014 00:23:17 +0200 Subject: Admin area using side nav Signed-off-by: Dmitriy Zaporozhets --- app/views/layouts/admin.html.haml | 17 ++++++++++------- app/views/layouts/nav/_admin.html.haml | 2 +- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/app/views/layouts/admin.html.haml b/app/views/layouts/admin.html.haml index 207ab22f4c7..7c6bfd643d8 100644 --- a/app/views/layouts/admin.html.haml +++ b/app/views/layouts/admin.html.haml @@ -1,13 +1,16 @@ !!! 5 %html{ lang: "en"} = render "layouts/head", title: "Admin area" - %body{class: "#{app_theme} admin", :'data-page' => body_data_page} + %body{class: "#{app_theme} sidenav admin", :'data-page' => body_data_page} = render "layouts/broadcast" = render "layouts/head_panel", title: "Admin area" - %nav.main-nav.navbar-collapse.collapse - .container= render 'layouts/nav/admin' - .container - .content - = render "layouts/flash" - = yield + .page-with-sidebar + .sidebar-wrapper + = render 'layouts/nav/admin' + .content-wrapper + .container-fluid + .content + = render "layouts/flash" + .clearfix + = yield = yield :embedded_scripts diff --git a/app/views/layouts/nav/_admin.html.haml b/app/views/layouts/nav/_admin.html.haml index c57216f01c8..1a506832ea2 100644 --- a/app/views/layouts/nav/_admin.html.haml +++ b/app/views/layouts/nav/_admin.html.haml @@ -1,4 +1,4 @@ -%ul +%ul.nav-sidebar.navbar-collapse.collapse = nav_link(controller: :dashboard, html_options: {class: 'home'}) do = link_to admin_root_path, title: "Stats" do Overview -- cgit v1.2.1 From bcc04adb1342155d4ec2b670702406285145cb32 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Sun, 21 Dec 2014 01:11:08 +0200 Subject: Css/views cleanup after layout restyle Signed-off-by: Dmitriy Zaporozhets --- app/assets/stylesheets/sections/header.scss | 20 ++---- app/assets/stylesheets/sections/nav.scss | 96 ---------------------------- app/assets/stylesheets/sections/sidebar.scss | 48 -------------- app/assets/stylesheets/themes/ui_basic.scss | 12 ++-- app/assets/stylesheets/themes/ui_color.scss | 5 +- app/assets/stylesheets/themes/ui_gray.scss | 5 +- app/assets/stylesheets/themes/ui_mars.scss | 5 +- app/assets/stylesheets/themes/ui_modern.scss | 5 +- app/views/layouts/_head_panel.html.haml | 2 - app/views/layouts/_page.html.haml | 16 +++++ app/views/layouts/admin.html.haml | 13 +--- app/views/layouts/application.html.haml | 13 +--- app/views/layouts/explore.html.haml | 2 +- app/views/layouts/group.html.haml | 11 +--- app/views/layouts/nav/_project.html.haml | 3 +- app/views/layouts/navless.html.haml | 2 +- app/views/layouts/profile.html.haml | 13 +--- app/views/layouts/project_settings.html.haml | 13 +--- app/views/layouts/projects.html.haml | 13 +--- app/views/layouts/public_group.html.haml | 13 +--- app/views/layouts/public_projects.html.haml | 12 +--- app/views/layouts/public_users.html.haml | 5 +- config/initializers/6_rack_profiler.rb | 1 + features/steps/shared/active_tab.rb | 4 +- spec/features/admin/admin_hooks_spec.rb | 2 +- 25 files changed, 60 insertions(+), 274 deletions(-) delete mode 100644 app/assets/stylesheets/sections/nav.scss create mode 100644 app/views/layouts/_page.html.haml diff --git a/app/assets/stylesheets/sections/header.scss b/app/assets/stylesheets/sections/header.scss index dc23272b481..db419f76532 100644 --- a/app/assets/stylesheets/sections/header.scss +++ b/app/assets/stylesheets/sections/header.scss @@ -84,6 +84,11 @@ header { z-index: 10; + .container { + width: 100% !important; + padding-left: 0px; + } + /** * * Logo holder @@ -230,21 +235,6 @@ header { color: #fff; } } - - .app_logo { - .separator { - margin-left: 0; - margin-right: 0; - } - } - - .separator { - float: left; - height: 46px; - width: 2px; - margin-left: 10px; - margin-right: 10px; - } } .search .search-input { diff --git a/app/assets/stylesheets/sections/nav.scss b/app/assets/stylesheets/sections/nav.scss deleted file mode 100644 index ccd672c5f67..00000000000 --- a/app/assets/stylesheets/sections/nav.scss +++ /dev/null @@ -1,96 +0,0 @@ -.main-nav { - background: #f5f5f5; - margin: 20px 0; - margin-top: 0; - padding-top: 4px; - border-bottom: 1px solid #E9E9E9; - - ul { - padding: 0; - margin: auto; - .count { - font-weight: normal; - display: inline-block; - height: 15px; - padding: 1px 6px; - height: auto; - font-size: 0.82em; - line-height: 14px; - text-align: center; - color: #777; - background: #eee; - @include border-radius(8px); - } - .label { - background: $hover; - text-shadow: none; - color: $style_color; - } - li { - list-style-type: none; - margin: 0; - display: table-cell; - width: 1%; - &.active { - a { - color: $link_color; - font-weight: bold; - border-bottom: 3px solid $link_color; - } - } - - &:hover { - a { - color: $link_hover_color; - border-bottom: 3px solid $link_hover_color; - } - } - } - a { - display: block; - text-align: center; - font-weight: bold; - height: 42px; - line-height: 39px; - color: #777; - text-shadow: 0 1px 1px white; - text-decoration: none; - overflow: hidden; - margin-bottom: -1px; - } - } - - @media (max-width: $screen-xs-max) { - font-size: 18px; - margin: 0; - max-height: none; - - &, .container { - padding: 0; - border-top: 0; - } - - ul { - height: auto; - - li { - display: list-item; - width: auto; - padding: 5px 0; - - &.active { - background-color: $link_hover_color; - - a { - color: #fff; - font-weight: normal; - text-shadow: none; - border: none; - - &:after { display: none; } - } - } - } - } - } -} diff --git a/app/assets/stylesheets/sections/sidebar.scss b/app/assets/stylesheets/sections/sidebar.scss index 79433ce5120..f3b2167bc6e 100644 --- a/app/assets/stylesheets/sections/sidebar.scss +++ b/app/assets/stylesheets/sections/sidebar.scss @@ -1,46 +1,3 @@ -body.sidenav { - padding: 0; - - &.ui_mars { - .app_logo { - background-color: #24272D; - } - } - - &.ui_color { - .app_logo { - background-color: #325; - } - } - - &.ui_basic { - .app_logo { - background-color: #DDD; - } - } - - &.ui_modern { - .app_logo { - background-color: #017855; - } - } - - &.ui_gray { - .app_logo { - background-color: #222; - } - } - - header .container { - width: 100% !important; - padding-left: 0px; - - .separator { - display: none; - } - } -} - .page-with-sidebar { background: #F5F5F5; } @@ -165,8 +122,3 @@ body.sidenav { border-left: 1px solid #EAEAEA; } } - -/** TODO: REMOVE **/ -.profiler-results { - display: none; -} diff --git a/app/assets/stylesheets/themes/ui_basic.scss b/app/assets/stylesheets/themes/ui_basic.scss index 3e3744fdc33..0dad9917b55 100644 --- a/app/assets/stylesheets/themes/ui_basic.scss +++ b/app/assets/stylesheets/themes/ui_basic.scss @@ -9,17 +9,15 @@ .navbar-inner { background: #F1F1F1; border-bottom: 1px solid #DDD; + + .app_logo { + background-color: #DDD; + } + .nav > li > a { color: $style_color; } - .separator { - background: #F9F9F9; - border-left: 1px solid #DDD; - } } } } - .main-nav { - background: #FFF; - } } diff --git a/app/assets/stylesheets/themes/ui_color.scss b/app/assets/stylesheets/themes/ui_color.scss index a08f3ff3d48..3c441a8e098 100644 --- a/app/assets/stylesheets/themes/ui_color.scss +++ b/app/assets/stylesheets/themes/ui_color.scss @@ -23,9 +23,8 @@ background-color: #436; } } - .separator { - background: #436; - border-left: 1px solid #659; + .app_logo { + background-color: #325; } .nav > li > a { color: #98C; diff --git a/app/assets/stylesheets/themes/ui_gray.scss b/app/assets/stylesheets/themes/ui_gray.scss index 959febad6fe..8df08ccaeec 100644 --- a/app/assets/stylesheets/themes/ui_gray.scss +++ b/app/assets/stylesheets/themes/ui_gray.scss @@ -23,9 +23,8 @@ background-color: #272727; } } - .separator { - background: #272727; - border-left: 1px solid #474747; + .app_logo { + background-color: #222; } } } diff --git a/app/assets/stylesheets/themes/ui_mars.scss b/app/assets/stylesheets/themes/ui_mars.scss index 9af5adbf10a..b08cbda6c4f 100644 --- a/app/assets/stylesheets/themes/ui_mars.scss +++ b/app/assets/stylesheets/themes/ui_mars.scss @@ -23,9 +23,8 @@ background-color: #373D47; } } - .separator { - background: #373D47; - border-left: 1px solid #575D67; + .app_logo { + background-color: #24272D; } .nav > li > a { color: #979DA7; diff --git a/app/assets/stylesheets/themes/ui_modern.scss b/app/assets/stylesheets/themes/ui_modern.scss index 308a03477db..34f39614ca4 100644 --- a/app/assets/stylesheets/themes/ui_modern.scss +++ b/app/assets/stylesheets/themes/ui_modern.scss @@ -23,9 +23,8 @@ background-color: #018865; } } - .separator { - background: #018865; - border-left: 1px solid #11A885; + .app_logo { + background-color: #017855; } .nav > li > a { color: #ADC; diff --git a/app/views/layouts/_head_panel.html.haml b/app/views/layouts/_head_panel.html.haml index 5dcaee2fa02..eda37f8237a 100644 --- a/app/views/layouts/_head_panel.html.haml +++ b/app/views/layouts/_head_panel.html.haml @@ -2,10 +2,8 @@ .navbar-inner .container %div.app_logo - %span.separator = link_to root_path, class: "home has_bottom_tooltip", title: "Dashboard" do %h1 GITLAB - %span.separator %h1.title= title %button.navbar-toggle{"data-target" => ".navbar-collapse", "data-toggle" => "collapse", type: "button"} diff --git a/app/views/layouts/_page.html.haml b/app/views/layouts/_page.html.haml new file mode 100644 index 00000000000..621365fa6aa --- /dev/null +++ b/app/views/layouts/_page.html.haml @@ -0,0 +1,16 @@ +- if defined?(sidebar) + .page-with-sidebar + .sidebar-wrapper + = render(sidebar) + .content-wrapper + .container-fluid + .content + = render "layouts/flash" + .clearfix + = yield +- else + .container.navless-container + .content + = yield + += yield :embedded_scripts diff --git a/app/views/layouts/admin.html.haml b/app/views/layouts/admin.html.haml index 7c6bfd643d8..7d25d9a4290 100644 --- a/app/views/layouts/admin.html.haml +++ b/app/views/layouts/admin.html.haml @@ -1,16 +1,7 @@ !!! 5 %html{ lang: "en"} = render "layouts/head", title: "Admin area" - %body{class: "#{app_theme} sidenav admin", :'data-page' => body_data_page} + %body{class: "#{app_theme} admin", :'data-page' => body_data_page} = render "layouts/broadcast" = render "layouts/head_panel", title: "Admin area" - .page-with-sidebar - .sidebar-wrapper - = render 'layouts/nav/admin' - .content-wrapper - .container-fluid - .content - = render "layouts/flash" - .clearfix - = yield - = yield :embedded_scripts + = render 'layouts/page', sidebar: 'layouts/nav/admin' diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index ddae02bbb45..ec53c4b1508 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -1,16 +1,7 @@ !!! 5 %html{ lang: "en"} = render "layouts/head", title: "Dashboard" - %body{class: "#{app_theme} sidenav application", :'data-page' => body_data_page } + %body{class: "#{app_theme} application", :'data-page' => body_data_page } = render "layouts/broadcast" = render "layouts/head_panel", title: "Dashboard" - .page-with-sidebar - .sidebar-wrapper - = render 'layouts/nav/dashboard' - .content-wrapper - .container-fluid - .content - = render "layouts/flash" - .clearfix - = yield - = yield :embedded_scripts + = render 'layouts/page', sidebar: 'layouts/nav/dashboard' diff --git a/app/views/layouts/explore.html.haml b/app/views/layouts/explore.html.haml index dcc7962830d..d023846c5eb 100644 --- a/app/views/layouts/explore.html.haml +++ b/app/views/layouts/explore.html.haml @@ -2,7 +2,7 @@ !!! 5 %html{ lang: "en"} = render "layouts/head", title: page_title - %body{class: "#{app_theme} sidenav application", :'data-page' => body_data_page} + %body{class: "#{app_theme} application", :'data-page' => body_data_page} = render "layouts/broadcast" - if current_user = render "layouts/head_panel", title: page_title diff --git a/app/views/layouts/group.html.haml b/app/views/layouts/group.html.haml index c5d8568b41a..04ccfd6e563 100644 --- a/app/views/layouts/group.html.haml +++ b/app/views/layouts/group.html.haml @@ -4,13 +4,4 @@ %body{class: "#{app_theme} application sidenav", :'data-page' => body_data_page} = render "layouts/broadcast" = render "layouts/head_panel", title: @group.name - .page-with-sidebar - .sidebar-wrapper - = render 'layouts/nav/group' - .content-wrapper - .container-fluid - .content - = render "layouts/flash" - .clearfix - = yield - = yield :embedded_scripts + = render 'layouts/page', sidebar: 'layouts/nav/group' diff --git a/app/views/layouts/nav/_project.html.haml b/app/views/layouts/nav/_project.html.haml index c9ae3f5ffff..d634d39bfdf 100644 --- a/app/views/layouts/nav/_project.html.haml +++ b/app/views/layouts/nav/_project.html.haml @@ -61,5 +61,6 @@ %i.fa.fa-cogs Settings %i.fa.fa-angle-down - - if defined?(settings) && settings + + - if @project_settings_nav = render 'projects/settings_nav' diff --git a/app/views/layouts/navless.html.haml b/app/views/layouts/navless.html.haml index 7f452e84b01..2c5fffe384f 100644 --- a/app/views/layouts/navless.html.haml +++ b/app/views/layouts/navless.html.haml @@ -1,7 +1,7 @@ !!! 5 %html{ lang: "en"} = render "layouts/head", title: @title - %body{class: "#{app_theme} sidenav application", :'data-page' => body_data_page} + %body{class: "#{app_theme} application", :'data-page' => body_data_page} = render "layouts/broadcast" = render "layouts/head_panel", title: @title .container.navless-container diff --git a/app/views/layouts/profile.html.haml b/app/views/layouts/profile.html.haml index f20f4ea1283..b387ea907b3 100644 --- a/app/views/layouts/profile.html.haml +++ b/app/views/layouts/profile.html.haml @@ -1,16 +1,7 @@ !!! 5 %html{ lang: "en"} = render "layouts/head", title: "Profile" - %body{class: "#{app_theme} sidenav profile", :'data-page' => body_data_page} + %body{class: "#{app_theme} profile", :'data-page' => body_data_page} = render "layouts/broadcast" = render "layouts/head_panel", title: "Profile" - .page-with-sidebar - .sidebar-wrapper - = render 'layouts/nav/profile' - .content-wrapper - .container-fluid - .content - = render "layouts/flash" - .clearfix - = yield - = yield :embedded_scripts + = render 'layouts/page', sidebar: 'layouts/nav/profile' diff --git a/app/views/layouts/project_settings.html.haml b/app/views/layouts/project_settings.html.haml index 47bc007fc6a..b8f4e92fff8 100644 --- a/app/views/layouts/project_settings.html.haml +++ b/app/views/layouts/project_settings.html.haml @@ -1,19 +1,12 @@ !!! 5 %html{ lang: "en"} = render "layouts/head", title: @project.name_with_namespace - %body{class: "#{app_theme} sidenav project", :'data-page' => body_data_page, :'data-project-id' => @project.id } + %body{class: "#{app_theme} project", :'data-page' => body_data_page, :'data-project-id' => @project.id } = render "layouts/broadcast" = render "layouts/head_panel", title: project_title(@project) = render "layouts/init_auto_complete" - if can?(current_user, :download_code, @project) = render 'shared/no_ssh' - .page-with-sidebar - .sidebar-wrapper - = render 'layouts/nav/project', settings: true - .content-wrapper - .container-fluid - .content - = render "layouts/flash" - = yield - = yield :embedded_scripts + - @project_settings_nav = true + = render 'layouts/page', sidebar: 'layouts/nav/project' diff --git a/app/views/layouts/projects.html.haml b/app/views/layouts/projects.html.haml index 644187b0998..84c53a36cbd 100644 --- a/app/views/layouts/projects.html.haml +++ b/app/views/layouts/projects.html.haml @@ -1,19 +1,10 @@ !!! 5 %html{ lang: "en"} = render "layouts/head", title: project_head_title - %body{class: "#{app_theme} sidenav project", :'data-page' => body_data_page, :'data-project-id' => @project.id } + %body{class: "#{app_theme} project", :'data-page' => body_data_page, :'data-project-id' => @project.id } = render "layouts/broadcast" = render "layouts/head_panel", title: project_title(@project) = render "layouts/init_auto_complete" - if can?(current_user, :download_code, @project) = render 'shared/no_ssh' - - .page-with-sidebar - .sidebar-wrapper - = render 'layouts/nav/project' - .content-wrapper - .container-fluid - .content - = render "layouts/flash" - = yield - = yield :embedded_scripts + = render 'layouts/page', sidebar: 'layouts/nav/project' diff --git a/app/views/layouts/public_group.html.haml b/app/views/layouts/public_group.html.haml index 99c29dc78dc..2bb52eeca86 100644 --- a/app/views/layouts/public_group.html.haml +++ b/app/views/layouts/public_group.html.haml @@ -1,16 +1,7 @@ !!! 5 %html{ lang: "en"} = render "layouts/head", title: group_head_title - %body{class: "#{app_theme} sidenav application", :'data-page' => body_data_page} + %body{class: "#{app_theme} application", :'data-page' => body_data_page} = render "layouts/broadcast" = render "layouts/public_head_panel", title: "group: #{@group.name}" - .page-with-sidebar - .sidebar-wrapper - = render 'layouts/nav/group' - .content-wrapper - .container-fluid - .content - = render "layouts/flash" - .clearfix - = yield - = yield :embedded_scripts + = render 'layouts/page', sidebar: 'layouts/nav/group' diff --git a/app/views/layouts/public_projects.html.haml b/app/views/layouts/public_projects.html.haml index 343bddcf0b2..b96a28d4ea5 100644 --- a/app/views/layouts/public_projects.html.haml +++ b/app/views/layouts/public_projects.html.haml @@ -1,15 +1,7 @@ !!! 5 %html{ lang: "en"} = render "layouts/head", title: @project.name_with_namespace - %body{class: "#{app_theme} sidenav application", :'data-page' => body_data_page} + %body{class: "#{app_theme} application", :'data-page' => body_data_page} = render "layouts/broadcast" = render "layouts/public_head_panel", title: project_title(@project) - .page-with-sidebar - .sidebar-wrapper - = render 'layouts/nav/project' - .content-wrapper - .container-fluid - .content - = render "layouts/flash" - = yield - = yield :embedded_scripts + = render 'layouts/page', sidebar: 'layouts/nav/project' diff --git a/app/views/layouts/public_users.html.haml b/app/views/layouts/public_users.html.haml index 18b856b10e1..6780701061d 100644 --- a/app/views/layouts/public_users.html.haml +++ b/app/views/layouts/public_users.html.haml @@ -1,8 +1,7 @@ !!! 5 %html{ lang: "en"} = render "layouts/head", title: @title - %body{class: "#{app_theme} sidenav application", :'data-page' => body_data_page} + %body{class: "#{app_theme} application", :'data-page' => body_data_page} = render "layouts/broadcast" = render "layouts/public_head_panel", title: @title - .container.navless-container - .content= yield + = render 'layouts/page' diff --git a/config/initializers/6_rack_profiler.rb b/config/initializers/6_rack_profiler.rb index a7ee3c59822..c83e5105a61 100644 --- a/config/initializers/6_rack_profiler.rb +++ b/config/initializers/6_rack_profiler.rb @@ -3,4 +3,5 @@ if Rails.env == 'development' # initialization is skipped so trigger it Rack::MiniProfilerRails.initialize!(Rails.application) + Rack::MiniProfiler.config.position = 'right' end diff --git a/features/steps/shared/active_tab.rb b/features/steps/shared/active_tab.rb index f41b59a6f2b..d7c7053edbd 100644 --- a/features/steps/shared/active_tab.rb +++ b/features/steps/shared/active_tab.rb @@ -2,7 +2,7 @@ module SharedActiveTab include Spinach::DSL def ensure_active_main_tab(content) - find('.main-nav li.active').should have_content(content) + find('.sidebar-wrapper li.active').should have_content(content) end def ensure_active_sub_tab(content) @@ -14,7 +14,7 @@ module SharedActiveTab end step 'no other main tabs should be active' do - page.should have_selector('.main-nav li.active', count: 1) + page.should have_selector('.sidebar-wrapper li.active', count: 1) end step 'no other sub tabs should be active' do diff --git a/spec/features/admin/admin_hooks_spec.rb b/spec/features/admin/admin_hooks_spec.rb index b557567bd04..37d6b416d22 100644 --- a/spec/features/admin/admin_hooks_spec.rb +++ b/spec/features/admin/admin_hooks_spec.rb @@ -12,7 +12,7 @@ describe "Admin::Hooks", feature: true do describe "GET /admin/hooks" do it "should be ok" do visit admin_root_path - within ".main-nav" do + within ".sidebar-wrapper" do click_on "Hooks" end current_path.should == admin_hooks_path -- cgit v1.2.1 From 5b49bb208a21fa96d0ae1bb93506725deee6c5b5 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 22 Dec 2014 16:42:26 +0200 Subject: Fix issueable context update and fix tests Signed-off-by: Dmitriy Zaporozhets --- app/assets/javascripts/issue.js.coffee | 4 ++-- app/assets/javascripts/merge_request.js.coffee | 4 ++-- app/views/projects/issues/show.html.haml | 2 +- app/views/projects/issues/update.js.haml | 2 +- app/views/projects/merge_requests/_show.html.haml | 2 +- app/views/projects/merge_requests/update.js.haml | 2 +- features/steps/project/merge_requests.rb | 10 +++------- features/steps/shared/active_tab.rb | 8 ++++---- features/steps/shared/issuable.rb | 2 +- 9 files changed, 16 insertions(+), 20 deletions(-) diff --git a/app/assets/javascripts/issue.js.coffee b/app/assets/javascripts/issue.js.coffee index 597b4695a6d..45c248e6fb6 100644 --- a/app/assets/javascripts/issue.js.coffee +++ b/app/assets/javascripts/issue.js.coffee @@ -1,9 +1,9 @@ class @Issue constructor: -> $('.edit-issue.inline-update input[type="submit"]').hide() - $(".issue-box .inline-update").on "change", "select", -> + $(".context .inline-update").on "change", "select", -> $(this).submit() - $(".issue-box .inline-update").on "change", "#issue_assignee_id", -> + $(".context .inline-update").on "change", "#issue_assignee_id", -> $(this).submit() if $("a.btn-close").length diff --git a/app/assets/javascripts/merge_request.js.coffee b/app/assets/javascripts/merge_request.js.coffee index 46e06424e5a..fba933ddab5 100644 --- a/app/assets/javascripts/merge_request.js.coffee +++ b/app/assets/javascripts/merge_request.js.coffee @@ -26,9 +26,9 @@ class @MergeRequest initContextWidget: -> $('.edit-merge_request.inline-update input[type="submit"]').hide() - $(".issue-box .inline-update").on "change", "select", -> + $(".context .inline-update").on "change", "select", -> $(this).submit() - $(".issue-box .inline-update").on "change", "#merge_request_assignee_id", -> + $(".context .inline-update").on "change", "#merge_request_assignee_id", -> $(this).submit() initMergeWidget: -> diff --git a/app/views/projects/issues/show.html.haml b/app/views/projects/issues/show.html.haml index 5e5098b73ef..1c9af4c4501 100644 --- a/app/views/projects/issues/show.html.haml +++ b/app/views/projects/issues/show.html.haml @@ -48,7 +48,7 @@ - else = link_to 'Close', project_issue_path(@project, @issue, issue: {state_event: :close }, status_only: true), method: :put, class: "btn btn-block btn-close", title: "Close Issue" - = link_to edit_project_issue_path(@project, @issue), class: "btn btn-block" do + = link_to edit_project_issue_path(@project, @issue), class: "btn btn-block issuable-edit" do %i.fa.fa-pencil-square-o Edit .clearfix diff --git a/app/views/projects/issues/update.js.haml b/app/views/projects/issues/update.js.haml index 5199e9fc61f..6e50667b084 100644 --- a/app/views/projects/issues/update.js.haml +++ b/app/views/projects/issues/update.js.haml @@ -3,7 +3,7 @@ :plain $("##{dom_id(@issue)}").fadeOut(); - elsif params[:issue_context] - $('.issue-box .context').effect('highlight'); + $('.context').effect('highlight'); - if @issue.milestone $('.milestone-nav-link').replaceWith("| Milestone #{escape_javascript(link_to @issue.milestone.title, project_milestone_path(@issue.project, @issue.milestone))}") - else diff --git a/app/views/projects/merge_requests/_show.html.haml b/app/views/projects/merge_requests/_show.html.haml index fd45ca87b8e..a05c78bc3e9 100644 --- a/app/views/projects/merge_requests/_show.html.haml +++ b/app/views/projects/merge_requests/_show.html.haml @@ -67,7 +67,7 @@ %li= link_to "Email Patches", project_merge_request_path(@project, @merge_request, format: :patch) %li= link_to "Plain Diff", project_merge_request_path(@project, @merge_request, format: :diff) = link_to 'Close', project_merge_request_path(@project, @merge_request, merge_request: { state_event: :close }), method: :put, class: "btn btn-block btn-close", title: "Close merge request" - = link_to edit_project_merge_request_path(@project, @merge_request), class: "btn btn-block", id:"edit_merge_request" do + = link_to edit_project_merge_request_path(@project, @merge_request), class: "btn btn-block issuable-edit", id: "edit_merge_request" do %i.fa.fa-pencil-square-o Edit - if @merge_request.closed? diff --git a/app/views/projects/merge_requests/update.js.haml b/app/views/projects/merge_requests/update.js.haml index 6452cc6382d..6f4c5dd7a3b 100644 --- a/app/views/projects/merge_requests/update.js.haml +++ b/app/views/projects/merge_requests/update.js.haml @@ -1,2 +1,2 @@ - if params[:merge_request_context] - $('.issue-box .context').effect('highlight'); + $('.context').effect('highlight'); diff --git a/features/steps/project/merge_requests.rb b/features/steps/project/merge_requests.rb index d5e060bdbe8..b00f610cfae 100644 --- a/features/steps/project/merge_requests.rb +++ b/features/steps/project/merge_requests.rb @@ -57,9 +57,7 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps end step 'I click link "Close"' do - within '.page-title' do - click_link "Close" - end + first(:css, '.close-mr-link').click end step 'I submit new merge request "Wiki Feature"' do @@ -181,13 +179,11 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps end step 'I click link "Reopen"' do - within '.page-title' do - click_link "Reopen" - end + first(:css, '.reopen-mr-link').click end step 'I should see reopened merge request "Bug NS-04"' do - within '.state-label' do + within '.issue-box' do page.should have_content "Open" end end diff --git a/features/steps/shared/active_tab.rb b/features/steps/shared/active_tab.rb index d7c7053edbd..c229864bc83 100644 --- a/features/steps/shared/active_tab.rb +++ b/features/steps/shared/active_tab.rb @@ -2,7 +2,7 @@ module SharedActiveTab include Spinach::DSL def ensure_active_main_tab(content) - find('.sidebar-wrapper li.active').should have_content(content) + find('.nav-sidebar > li.active').should have_content(content) end def ensure_active_sub_tab(content) @@ -10,11 +10,11 @@ module SharedActiveTab end def ensure_active_sub_nav(content) - find('div.content ul.nav-stacked-menu li.active').should have_content(content) + find('.sidebar-subnav > li.active').should have_content(content) end step 'no other main tabs should be active' do - page.should have_selector('.sidebar-wrapper li.active', count: 1) + page.should have_selector('.nav-sidebar > li.active', count: 1) end step 'no other sub tabs should be active' do @@ -22,7 +22,7 @@ module SharedActiveTab end step 'no other sub navs should be active' do - page.should have_selector('div.content ul.nav-stacked-menu li.active', count: 1) + page.should have_selector('.sidebar-subnav > li.active', count: 1) end step 'the active main tab should be Home' do diff --git a/features/steps/shared/issuable.rb b/features/steps/shared/issuable.rb index a0150e90380..41db2612f26 100644 --- a/features/steps/shared/issuable.rb +++ b/features/steps/shared/issuable.rb @@ -2,7 +2,7 @@ module SharedIssuable include Spinach::DSL def edit_issuable - find('.issue-btn-group').click_link 'Edit' + find(:css, '.issuable-edit').click end step 'I click link "Edit" for the merge request' do -- cgit v1.2.1 From 3eb586c12cf46fe0098c5c0fbec8478a44a5d77d Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 22 Dec 2014 17:18:53 +0200 Subject: Fix tests Signed-off-by: Dmitriy Zaporozhets --- features/steps/groups.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/features/steps/groups.rb b/features/steps/groups.rb index 616a297db99..66a32a51d75 100644 --- a/features/steps/groups.rb +++ b/features/steps/groups.rb @@ -89,7 +89,6 @@ class Spinach::Features::Groups < Spinach::FeatureSteps step 'I should see newly created group "Samurai"' do page.should have_content "Samurai" page.should have_content "Tokugawa Shogunate" - page.should have_content "Currently you are only seeing events from the" end step 'I change group "Owned" name to "new-name"' do @@ -99,7 +98,7 @@ class Spinach::Features::Groups < Spinach::FeatureSteps step 'I should see new group "Owned" name' do within ".navbar-gitlab" do - page.should have_content "group: new-name" + page.should have_content "new-name" end end -- cgit v1.2.1 From a2d188f688759b3889de576bb8019e189bcac902 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 22 Dec 2014 20:36:15 +0200 Subject: Render MR diff full size of screen Signed-off-by: Dmitriy Zaporozhets --- .../stylesheets/sections/merge_requests.scss | 4 -- app/assets/stylesheets/sections/notes.scss | 17 +++++-- app/helpers/notes_helper.rb | 7 ++- app/views/projects/merge_requests/_show.html.haml | 56 +++++++++++----------- 4 files changed, 46 insertions(+), 38 deletions(-) diff --git a/app/assets/stylesheets/sections/merge_requests.scss b/app/assets/stylesheets/sections/merge_requests.scss index ec844cc00b0..a0f709070ac 100644 --- a/app/assets/stylesheets/sections/merge_requests.scss +++ b/app/assets/stylesheets/sections/merge_requests.scss @@ -20,16 +20,12 @@ } .merge-request .merge-request-tabs{ - border-bottom: 2px solid $border_primary; margin: 20px 0; li { a { padding: 15px 40px; font-size: 14px; - margin-bottom: -2px; - border-bottom: 2px solid $border_primary; - @include border-radius(0px); } } } diff --git a/app/assets/stylesheets/sections/notes.scss b/app/assets/stylesheets/sections/notes.scss index e1f9c0cb258..74c500f88b3 100644 --- a/app/assets/stylesheets/sections/notes.scss +++ b/app/assets/stylesheets/sections/notes.scss @@ -155,19 +155,26 @@ ul.notes { } .add-diff-note { - background: image-url("diff_note_add.png") no-repeat left 0; - border: none; - height: 22px; - margin-left: -65px; + margin-top: -4px; + @include border-radius(40px); + background: #FFF; + padding: 4px; + font-size: 16px; + color: $link_color; + margin-left: -60px; position: absolute; - width: 22px; z-index: 10; + transition: all 0.2s ease; + // "hide" it by default opacity: 0.0; filter: alpha(opacity=0); &:hover { + font-size: 24px; + background: $bg_primary; + color: #FFF; @include show-add-diff-note; } } diff --git a/app/helpers/notes_helper.rb b/app/helpers/notes_helper.rb index 901052edec6..6d2244b8714 100644 --- a/app/helpers/notes_helper.rb +++ b/app/helpers/notes_helper.rb @@ -52,8 +52,11 @@ module NotesHelper discussion_id: discussion_id } - button_tag '', class: 'btn add-diff-note js-add-diff-note-button', - data: data, title: 'Add a comment to this line' + button_tag(class: 'btn add-diff-note js-add-diff-note-button', + data: data, + title: 'Add a comment to this line') do + content_tag :i, nil, class: 'fa fa-comment-o' + end end def link_to_reply_diff(note) diff --git a/app/views/projects/merge_requests/_show.html.haml b/app/views/projects/merge_requests/_show.html.haml index a05c78bc3e9..57ab6bdd545 100644 --- a/app/views/projects/merge_requests/_show.html.haml +++ b/app/views/projects/merge_requests/_show.html.haml @@ -26,33 +26,6 @@ = render "projects/merge_requests/show/commits" = render "projects/merge_requests/show/participants" - - if @commits.present? - %ul.nav.nav-pills.merge-request-tabs - %li.notes-tab{data: {action: 'notes'}} - = link_to project_merge_request_path(@project, @merge_request) do - %i.fa.fa-comment - Discussion - %span.badge= @merge_request.mr_and_commit_notes.count - %li.diffs-tab{data: {action: 'diffs'}} - = link_to diffs_project_merge_request_path(@project, @merge_request) do - %i.fa.fa-list-alt - Changes - %span.badge= @merge_request.diffs.size - - - content_for :note_actions do - - if can?(current_user, :modify_merge_request, @merge_request) - - if @merge_request.open? - = link_to 'Close', project_merge_request_path(@project, @merge_request, merge_request: {state_event: :close }), method: :put, class: "btn btn-grouped btn-close close-mr-link js-note-target-close", title: "Close merge request" - - if @merge_request.closed? - = link_to 'Reopen', project_merge_request_path(@project, @merge_request, merge_request: {state_event: :reopen }), method: :put, class: "btn btn-grouped btn-reopen reopen-mr-link js-note-target-reopen", title: "Reopen merge request" - - .diffs.tab-content - - if current_page?(action: 'diffs') - = render "projects/merge_requests/show/diffs" - .notes.tab-content.voting_notes#notes{ class: (controller.action_name == 'show') ? "" : "hide" } - = render "projects/notes/notes_with_form" - .mr-loading-status - = spinner .col-sm-3 .issue-btn-group - if can?(current_user, :modify_merge_request, @merge_request) @@ -84,6 +57,35 @@ %cite.cgray = render partial: 'projects/merge_requests/show/context', locals: { merge_request: @merge_request } + - if @commits.present? + %ul.nav.nav-tabs.merge-request-tabs + %li.notes-tab{data: {action: 'notes'}} + = link_to project_merge_request_path(@project, @merge_request) do + %i.fa.fa-comment + Discussion + %span.badge= @merge_request.mr_and_commit_notes.count + %li.diffs-tab{data: {action: 'diffs'}} + = link_to diffs_project_merge_request_path(@project, @merge_request) do + %i.fa.fa-list-alt + Changes + %span.badge= @merge_request.diffs.size + + - content_for :note_actions do + - if can?(current_user, :modify_merge_request, @merge_request) + - if @merge_request.open? + = link_to 'Close', project_merge_request_path(@project, @merge_request, merge_request: {state_event: :close }), method: :put, class: "btn btn-grouped btn-close close-mr-link js-note-target-close", title: "Close merge request" + - if @merge_request.closed? + = link_to 'Reopen', project_merge_request_path(@project, @merge_request, merge_request: {state_event: :reopen }), method: :put, class: "btn btn-grouped btn-reopen reopen-mr-link js-note-target-reopen", title: "Reopen merge request" + + .diffs.tab-content + - if current_page?(action: 'diffs') + = render "projects/merge_requests/show/diffs" + .notes.tab-content.voting_notes#notes{ class: (controller.action_name == 'show') ? "" : "hide" } + .row + .col-sm-9 + = render "projects/notes/notes_with_form" + .mr-loading-status + = spinner :javascript -- cgit v1.2.1 From 9a8ac2accc78f231fdf7ad7fd8b8bb405a24942b Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Tue, 23 Dec 2014 10:51:14 +0200 Subject: Show issuable context labels as blocks Signed-off-by: Dmitriy Zaporozhets --- app/views/projects/issues/_issue_context.html.haml | 4 ++-- app/views/projects/merge_requests/show/_context.html.haml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/views/projects/issues/_issue_context.html.haml b/app/views/projects/issues/_issue_context.html.haml index d443aae43ac..98777a58f9d 100644 --- a/app/views/projects/issues/_issue_context.html.haml +++ b/app/views/projects/issues/_issue_context.html.haml @@ -1,6 +1,6 @@ = form_for [@project, @issue], remote: true, html: {class: 'edit-issue inline-update'} do |f| %div.prepend-top-20 - %strong + %p Assignee: - if can?(current_user, :modify_issue, @issue) @@ -11,7 +11,7 @@ None %div.prepend-top-20 - %strong + %p Milestone: - if can?(current_user, :modify_issue, @issue) = f.select(:milestone_id, milestone_options(@issue), { include_blank: "Select milestone" }, {class: 'select2 select2-compact js-select2 js-milestone'}) diff --git a/app/views/projects/merge_requests/show/_context.html.haml b/app/views/projects/merge_requests/show/_context.html.haml index d4b6434b171..5b6e64f0657 100644 --- a/app/views/projects/merge_requests/show/_context.html.haml +++ b/app/views/projects/merge_requests/show/_context.html.haml @@ -1,6 +1,6 @@ = form_for [@project, @merge_request], remote: true, html: {class: 'edit-merge_request inline-update'} do |f| %div.prepend-top-20 - %strong + %p Assignee: - if can?(current_user, :modify_merge_request, @merge_request) @@ -11,7 +11,7 @@ None %div.prepend-top-20 - %strong + %p Milestone: - if can?(current_user, :modify_merge_request, @merge_request) = f.select(:milestone_id, milestone_options(@merge_request), { include_blank: "Select milestone" }, {class: 'select2 select2-compact js-select2 js-milestone'}) -- cgit v1.2.1 From 32eb5de510a7e32d9bb886595aa47d95dc00490f Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Tue, 23 Dec 2014 17:31:38 +0200 Subject: One column issue/mr lists for project Signed-off-by: Dmitriy Zaporozhets --- app/assets/stylesheets/gl_bootstrap.scss | 4 ++ app/helpers/projects_helper.rb | 25 --------- app/views/projects/_issuable_filter.html.haml | 39 ++++++++++++++ app/views/projects/issues/index.html.haml | 11 ++-- app/views/projects/merge_requests/index.html.haml | 30 +++++------ app/views/shared/_project_filter.html.haml | 64 ----------------------- 6 files changed, 59 insertions(+), 114 deletions(-) delete mode 100644 app/views/shared/_project_filter.html.haml diff --git a/app/assets/stylesheets/gl_bootstrap.scss b/app/assets/stylesheets/gl_bootstrap.scss index 9c5e76ab8e2..2a68d922bb7 100644 --- a/app/assets/stylesheets/gl_bootstrap.scss +++ b/app/assets/stylesheets/gl_bootstrap.scss @@ -148,6 +148,10 @@ $list-group-active-bg: $bg_primary; color: #666; } +.nav-compact > li > a { + padding: 6px 12px; +} + .nav-small > li > a { padding: 3px 5px; font-size: 12px; diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index fb5470d98e5..6568f438e25 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -68,31 +68,6 @@ module ProjectsHelper project_nav_tabs.include? name end - def selected_label?(label_name) - params[:label_name].to_s.split(',').include?(label_name) - end - - def labels_filter_path(label_name) - label_name = - if selected_label?(label_name) - params[:label_name].split(',').reject { |l| l == label_name }.join(',') - elsif params[:label_name].present? - "#{params[:label_name]},#{label_name}" - else - label_name - end - - project_filter_path(label_name: label_name) - end - - def label_filter_class(label_name) - if selected_label?(label_name) - 'label-filter-item active' - else - 'label-filter-item light' - end - end - def project_filter_path(options={}) exist_opts = { state: params[:state], diff --git a/app/views/projects/_issuable_filter.html.haml b/app/views/projects/_issuable_filter.html.haml index b3e5efd938f..45b5137a1b3 100644 --- a/app/views/projects/_issuable_filter.html.haml +++ b/app/views/projects/_issuable_filter.html.haml @@ -1,4 +1,19 @@ .issues-filters + .pull-left.append-right-20 + %ul.nav.nav-pills.nav-compact + %li{class: ("active" if params[:state] == 'opened')} + = link_to project_filter_path(state: 'opened') do + %i.fa.fa-exclamation-circle + Open + %li{class: ("active" if params[:state] == 'closed')} + = link_to project_filter_path(state: 'closed') do + %i.fa.fa-check-circle + Closed + %li{class: ("active" if params[:state] == 'all')} + = link_to project_filter_path(state: 'all') do + %i.fa.fa-compass + All + .dropdown.inline %a.dropdown-toggle.btn{href: '#', "data-toggle" => "dropdown"} %i.fa.fa-user @@ -68,5 +83,29 @@ %strong= milestone.title %small.light= milestone.expires_at + .dropdown.inline.prepend-left-10 + %a.dropdown-toggle.btn{href: '#', "data-toggle" => "dropdown"} + %i.fa.fa-user + %span.light label: + - if params[:label_name].present? + %strong= params[:label_name] + - else + Any + %b.caret + %ul.dropdown-menu + %li + = link_to project_filter_path(label_name: nil) do + Any + - if @project.labels.any? + - @project.labels.order_by_name.each do |label| + %li + = link_to project_filter_path(label_name: label.name) do + = render_colored_label(label) + - else + %li + = link_to generate_project_labels_path(@project, redirect: request.original_url), method: :post do + %i.fa.fa-plus-circle + Create default labels + .pull-right = render 'shared/sort_dropdown' diff --git a/app/views/projects/issues/index.html.haml b/app/views/projects/issues/index.html.haml index 8db6241f21f..0d00d6bfded 100644 --- a/app/views/projects/issues/index.html.haml +++ b/app/views/projects/issues/index.html.haml @@ -1,9 +1,4 @@ = render "projects/issues_nav" -.row - .fixed.fixed.sidebar-expand-button.hidden-lg.hidden-md.hidden-xs - %i.fa.fa-list.fa-2x - .col-md-3.responsive-side - = render 'shared/project_filter', project_entities_path: project_issues_path(@project), - labels: true, redirect: 'issues', entity: 'issue' - .col-md-9.issues-holder - = render "issues" + +.issues-holder + = render "issues" diff --git a/app/views/projects/merge_requests/index.html.haml b/app/views/projects/merge_requests/index.html.haml index b93e0f9da3e..6a615266ca3 100644 --- a/app/views/projects/merge_requests/index.html.haml +++ b/app/views/projects/merge_requests/index.html.haml @@ -1,23 +1,19 @@ = render "projects/issues_nav" -.row - .col-md-3.responsive-side - = render 'shared/project_filter', project_entities_path: project_merge_requests_path(@project), - labels: true, redirect: 'merge_requests', entity: 'merge_request' - .col-md-9 - .append-bottom-10 - = render 'projects/issuable_filter' - .panel.panel-default - %ul.well-list.mr-list - = render @merge_requests - - if @merge_requests.blank? - %li - .nothing-here-block No merge requests to show - - if @merge_requests.present? - .pull-right - %span.cgray.pull-right #{@merge_requests.total_count} merge requests for this filter +.merge-requests-holder + .append-bottom-10 + = render 'projects/issuable_filter' + .panel.panel-default + %ul.well-list.mr-list + = render @merge_requests + - if @merge_requests.blank? + %li + .nothing-here-block No merge requests to show + - if @merge_requests.present? + .pull-right + %span.cgray.pull-right #{@merge_requests.total_count} merge requests for this filter - = paginate @merge_requests, theme: "gitlab" + = paginate @merge_requests, theme: "gitlab" :javascript $(merge_requestsPage); diff --git a/app/views/shared/_project_filter.html.haml b/app/views/shared/_project_filter.html.haml deleted file mode 100644 index ea6a49e1501..00000000000 --- a/app/views/shared/_project_filter.html.haml +++ /dev/null @@ -1,64 +0,0 @@ -.side-filters - = form_tag project_entities_path, method: 'get' do - - if current_user - %fieldset - %ul.nav.nav-pills.nav-stacked - %li{class: ("active" if params[:scope] == 'all')} - = link_to project_filter_path(scope: 'all') do - Everyone's - %span.pull-right - = authorized_entities_count(current_user, entity, @project) - %li{class: ("active" if params[:scope] == 'assigned-to-me')} - = link_to project_filter_path(scope: 'assigned-to-me') do - Assigned to me - %span.pull-right - = assigned_entities_count(current_user, entity, @project) - %li{class: ("active" if params[:scope] == 'created-by-me')} - = link_to project_filter_path(scope: 'created-by-me') do - Created by me - %span.pull-right - = authored_entities_count(current_user, entity, @project) - - %fieldset - %legend State - %ul.nav.nav-pills - %li{class: ("active" if params[:state] == 'opened')} - = link_to project_filter_path(state: 'opened') do - Open - %li{class: ("active" if params[:state] == 'closed')} - = link_to project_filter_path(state: 'closed') do - Closed - %li{class: ("active" if params[:state] == 'all')} - = link_to project_filter_path(state: 'all') do - All - - - if defined?(labels) - %fieldset - %legend - Labels - %small.pull-right - = link_to project_labels_path(@project), class: 'light' do - %i.fa.fa-pencil-square-o - %ul.nav.nav-pills.nav-stacked.nav-small.labels-filter - - @project.labels.order_by_name.each do |label| - %li{class: label_filter_class(label.name)} - = link_to labels_filter_path(label.name) do - = render_colored_label(label) - - if selected_label?(label.name) - .pull-right - %i.fa.fa-times - - - if @project.labels.empty? - .light-well - Create first label at - = link_to 'labels page', project_labels_path(@project) - %br - or #{link_to 'generate', generate_project_labels_path(@project, redirect: redirect), method: :post} default set of labels - - %fieldset - - if %w(state scope milestone_id assignee_id label_name).select { |k| params[k].present? }.any? - = link_to project_entities_path, class: 'cgray pull-right' do - %i.fa.fa-times - %strong Clear filter - - -- cgit v1.2.1 From 47634e392fab457dd0634225961944804bc04efe Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Tue, 23 Dec 2014 18:49:39 +0200 Subject: Refactor issues and merge requests lists Signed-off-by: Dmitriy Zaporozhets --- app/controllers/application_controller.rb | 42 ++++++++ app/controllers/dashboard_controller.rb | 12 +-- app/controllers/groups_controller.rb | 18 +--- app/controllers/projects/application_controller.rb | 27 ----- app/controllers/projects/issues_controller.rb | 6 +- .../projects/merge_requests_controller.rb | 6 +- app/helpers/application_helper.rb | 18 ++++ app/helpers/dashboard_helper.rb | 14 --- app/helpers/projects_helper.rb | 17 ---- app/views/dashboard/issues.html.haml | 10 +- app/views/dashboard/merge_requests.html.haml | 10 +- app/views/groups/issues.html.haml | 10 +- app/views/groups/merge_requests.html.haml | 10 +- app/views/layouts/nav/_group.html.haml | 4 +- app/views/projects/_issuable_filter.html.haml | 111 -------------------- app/views/projects/_issues_nav.html.haml | 11 +- app/views/projects/issues/_issues.html.haml | 2 +- app/views/projects/merge_requests/index.html.haml | 2 +- app/views/shared/_filter.html.haml | 50 --------- app/views/shared/_issuable_filter.html.haml | 112 +++++++++++++++++++++ app/views/shared/_sort_dropdown.html.haml | 12 +-- 21 files changed, 217 insertions(+), 287 deletions(-) delete mode 100644 app/views/projects/_issuable_filter.html.haml delete mode 100644 app/views/shared/_filter.html.haml create mode 100644 app/views/shared/_issuable_filter.html.haml diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index f1e1bebe5ce..0ddd743f053 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -239,4 +239,46 @@ class ApplicationController < ActionController::Base redirect_to profile_path, notice: 'Please complete your profile with email address' and return end end + + def set_filters_defaults + params[:sort] ||= 'newest' + params[:scope] = 'all' if params[:scope].blank? + params[:state] = 'opened' if params[:state].blank? + + @sort = params[:sort].humanize + + if @project + params[:project_id] = @project.id + elsif @group + params[:group_id] = @group.id + else + params[:authorized_only] = true + + unless params[:assignee_id].present? + params[:assignee_id] = current_user.id + end + end + end + + def set_filter_values(collection) + assignee_id = params[:assignee_id] + author_id = params[:author_id] + milestone_id = params[:milestone_id] + + @assignees = User.where(id: collection.pluck(:assignee_id)) + @authors = User.where(id: collection.pluck(:author_id)) + @milestones = Milestone.where(id: collection.pluck(:milestone_id)) + + if assignee_id.present? && !assignee_id.to_i.zero? + @assignee = @assignees.find(assignee_id) + end + + if author_id.present? && !author_id.to_i.zero? + @author = @authors.find(author_id) + end + + if milestone_id.present? && !milestone_id.to_i.zero? + @milestone = @milestones.find(milestone_id) + end + end end diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index 5aff526d1b5..bfd1361f2df 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -3,8 +3,6 @@ class DashboardController < ApplicationController before_filter :load_projects, except: [:projects] before_filter :event_filter, only: :show - before_filter :default_filter, only: [:issues, :merge_requests] - def show # Fetch only 30 projects. @@ -55,13 +53,17 @@ class DashboardController < ApplicationController end def merge_requests + set_filters_defaults @merge_requests = MergeRequestsFinder.new.execute(current_user, params) + set_filter_values(@merge_requests) @merge_requests = @merge_requests.page(params[:page]).per(20) @merge_requests = @merge_requests.preload(:author, :target_project) end def issues + set_filters_defaults @issues = IssuesFinder.new.execute(current_user, params) + set_filter_values(@issues) @issues = @issues.page(params[:page]).per(20) @issues = @issues.preload(:author, :project) @@ -76,10 +78,4 @@ class DashboardController < ApplicationController def load_projects @projects = current_user.authorized_projects.sorted_by_activity.non_archived end - - def default_filter - params[:scope] = 'assigned-to-me' if params[:scope].blank? - params[:state] = 'opened' if params[:state].blank? - params[:authorized_only] = true - end end diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb index 36222758eb2..a28f4cc4072 100644 --- a/app/controllers/groups_controller.rb +++ b/app/controllers/groups_controller.rb @@ -11,8 +11,6 @@ class GroupsController < ApplicationController # Load group projects before_filter :load_projects, except: [:new, :create, :projects, :edit, :update] - before_filter :default_filter, only: [:issues, :merge_requests] - layout :determine_layout before_filter :set_title, only: [:new, :create] @@ -47,13 +45,17 @@ class GroupsController < ApplicationController end def merge_requests + set_filters_defaults @merge_requests = MergeRequestsFinder.new.execute(current_user, params) + set_filter_values(@merge_requests) @merge_requests = @merge_requests.page(params[:page]).per(20) @merge_requests = @merge_requests.preload(:author, :target_project) end def issues + set_filters_defaults @issues = IssuesFinder.new.execute(current_user, params) + set_filter_values(@issues) @issues = @issues.page(params[:page]).per(20) @issues = @issues.preload(:author, :project) @@ -148,18 +150,6 @@ class GroupsController < ApplicationController end end - def default_filter - if params[:scope].blank? - if current_user - params[:scope] = 'assigned-to-me' - else - params[:scope] = 'all' - end - end - params[:state] = 'opened' if params[:state].blank? - params[:group_id] = @group.id - end - def group_params params.require(:group).permit(:name, :description, :path, :avatar) end diff --git a/app/controllers/projects/application_controller.rb b/app/controllers/projects/application_controller.rb index 6b7fe06d59f..7e4580017dd 100644 --- a/app/controllers/projects/application_controller.rb +++ b/app/controllers/projects/application_controller.rb @@ -29,31 +29,4 @@ class Projects::ApplicationController < ApplicationController redirect_to project_tree_path(@project, @ref), notice: "This action is not allowed unless you are on top of a branch" end end - - def set_filter_variables(collection) - params[:sort] ||= 'newest' - params[:scope] = 'all' if params[:scope].blank? - params[:state] = 'opened' if params[:state].blank? - - @sort = params[:sort].humanize - - assignee_id = params[:assignee_id] - author_id = params[:author_id] - milestone_id = params[:milestone_id] - - if assignee_id.present? && !assignee_id.to_i.zero? - @assignee = @project.team.find(assignee_id) - end - - if author_id.present? && !author_id.to_i.zero? - @author = @project.team.find(assignee_id) - end - - if milestone_id.present? && !milestone_id.to_i.zero? - @milestone = @project.milestones.find(milestone_id) - end - - @assignees = User.where(id: collection.pluck(:assignee_id)) - @authors = User.where(id: collection.pluck(:author_id)) - end end diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb index 22235123826..0266c51babb 100644 --- a/app/controllers/projects/issues_controller.rb +++ b/app/controllers/projects/issues_controller.rb @@ -18,9 +18,9 @@ class Projects::IssuesController < Projects::ApplicationController def index terms = params['issue_search'] - set_filter_variables(@project.issues) - - @issues = IssuesFinder.new.execute(current_user, params.merge(project_id: @project.id)) + set_filters_defaults + @issues = IssuesFinder.new.execute(current_user, params) + set_filter_values(@issues) @issues = @issues.full_search(terms) if terms.present? @issues = @issues.page(params[:page]).per(20) diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index 4d6f41e9de5..20d1222326e 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -17,9 +17,9 @@ class Projects::MergeRequestsController < Projects::ApplicationController before_filter :authorize_modify_merge_request!, only: [:close, :edit, :update, :sort] def index - set_filter_variables(@project.merge_requests) - - @merge_requests = MergeRequestsFinder.new.execute(current_user, params.merge(project_id: @project.id)) + set_filters_defaults + @merge_requests = MergeRequestsFinder.new.execute(current_user, params) + set_filter_values(@merge_requests) @merge_requests = @merge_requests.page(params[:page]).per(20) end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 01aa4a60d4c..90cc58f44b7 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -275,4 +275,22 @@ module ApplicationHelper def promo_url 'https://' + promo_host end + + def page_filter_path(options={}) + exist_opts = { + state: params[:state], + scope: params[:scope], + label_name: params[:label_name], + milestone_id: params[:milestone_id], + assignee_id: params[:assignee_id], + author_id: params[:author_id], + sort: params[:sort], + } + + options = exist_opts.merge(options) + + path = request.path + path << "?#{options.to_param}" + path + end end diff --git a/app/helpers/dashboard_helper.rb b/app/helpers/dashboard_helper.rb index acc0eeb76b3..976a396e7b6 100644 --- a/app/helpers/dashboard_helper.rb +++ b/app/helpers/dashboard_helper.rb @@ -1,18 +1,4 @@ module DashboardHelper - def filter_path(entity, options={}) - exist_opts = { - state: params[:state], - scope: params[:scope], - project_id: params[:project_id], - } - - options = exist_opts.merge(options) - - path = request.path - path << "?#{options.to_param}" - path - end - def entities_per_project(project, entity) case entity.to_sym when :issue then @issues.where(project_id: project.id) diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 6568f438e25..e489d431e84 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -68,23 +68,6 @@ module ProjectsHelper project_nav_tabs.include? name end - def project_filter_path(options={}) - exist_opts = { - state: params[:state], - scope: params[:scope], - label_name: params[:label_name], - milestone_id: params[:milestone_id], - assignee_id: params[:assignee_id], - sort: params[:sort], - } - - options = exist_opts.merge(options) - - path = request.path - path << "?#{options.to_param}" - path - end - def project_active_milestones @project.milestones.active.order("due_date, title ASC") end diff --git a/app/views/dashboard/issues.html.haml b/app/views/dashboard/issues.html.haml index 7c1f1ddbb80..db19a46cb26 100644 --- a/app/views/dashboard/issues.html.haml +++ b/app/views/dashboard/issues.html.haml @@ -5,10 +5,6 @@ List all issues from all projects you have access to. %hr -.row - .fixed.sidebar-expand-button.hidden-lg.hidden-md - %i.fa.fa-list.fa-2x - .col-md-3.responsive-side - = render 'shared/filter', entity: 'issue' - .col-md-9 - = render 'shared/issues' +.append-bottom-20 + = render 'shared/issuable_filter' += render 'shared/issues' diff --git a/app/views/dashboard/merge_requests.html.haml b/app/views/dashboard/merge_requests.html.haml index c96584c7b6b..97a42461b4e 100644 --- a/app/views/dashboard/merge_requests.html.haml +++ b/app/views/dashboard/merge_requests.html.haml @@ -5,10 +5,6 @@ %p.light List all merge requests from all projects you have access to. %hr -.row - .fixed.sidebar-expand-button.hidden-lg.hidden-md - %i.fa.fa-list.fa-2x - .col-md-3.responsive-side - = render 'shared/filter', entity: 'merge_request' - .col-md-9 - = render 'shared/merge_requests' +.append-bottom-20 + = render 'shared/issuable_filter' += render 'shared/merge_requests' diff --git a/app/views/groups/issues.html.haml b/app/views/groups/issues.html.haml index 1932ba2f644..6c0d89c4e7c 100644 --- a/app/views/groups/issues.html.haml +++ b/app/views/groups/issues.html.haml @@ -9,10 +9,6 @@ To see all issues you should visit #{link_to 'dashboard', issues_dashboard_path} page. %hr -.row - .fixed.sidebar-expand-button.hidden-lg.hidden-md - %i.fa.fa-list.fa-2x - .col-md-3.responsive-side - = render 'shared/filter', entity: 'issue' - .col-md-9 - = render 'shared/issues' +.append-bottom-20 + = render 'shared/issuable_filter' += render 'shared/issues' diff --git a/app/views/groups/merge_requests.html.haml b/app/views/groups/merge_requests.html.haml index 86d5acdaa32..1ad74905636 100644 --- a/app/views/groups/merge_requests.html.haml +++ b/app/views/groups/merge_requests.html.haml @@ -8,10 +8,6 @@ - if current_user To see all merge requests you should visit #{link_to 'dashboard', merge_requests_dashboard_path} page. %hr -.row - .fixed.sidebar-expand-button.hidden-lg.hidden-md - %i.fa.fa-list.fa-2x - .col-md-3.responsive-side - = render 'shared/filter', entity: 'merge_request' - .col-md-9 - = render 'shared/merge_requests' +.append-bottom-20 + = render 'shared/issuable_filter' += render 'shared/merge_requests' diff --git a/app/views/layouts/nav/_group.html.haml b/app/views/layouts/nav/_group.html.haml index 78d6b768155..3c8f47a7bea 100644 --- a/app/views/layouts/nav/_group.html.haml +++ b/app/views/layouts/nav/_group.html.haml @@ -13,13 +13,13 @@ %i.fa.fa-exclamation-circle Issues - if current_user - %span.count= current_user.assigned_issues.opened.of_group(@group).count + %span.count= Issue.opened.of_group(@group).count = nav_link(path: 'groups#merge_requests') do = link_to merge_requests_group_path(@group) do %i.fa.fa-tasks Merge Requests - if current_user - %span.count= current_user.cared_merge_requests.opened.of_group(@group).count + %span.count= MergeRequest.opened.of_group(@group).count = nav_link(path: 'groups#members') do = link_to members_group_path(@group) do %i.fa.fa-users diff --git a/app/views/projects/_issuable_filter.html.haml b/app/views/projects/_issuable_filter.html.haml deleted file mode 100644 index 45b5137a1b3..00000000000 --- a/app/views/projects/_issuable_filter.html.haml +++ /dev/null @@ -1,111 +0,0 @@ -.issues-filters - .pull-left.append-right-20 - %ul.nav.nav-pills.nav-compact - %li{class: ("active" if params[:state] == 'opened')} - = link_to project_filter_path(state: 'opened') do - %i.fa.fa-exclamation-circle - Open - %li{class: ("active" if params[:state] == 'closed')} - = link_to project_filter_path(state: 'closed') do - %i.fa.fa-check-circle - Closed - %li{class: ("active" if params[:state] == 'all')} - = link_to project_filter_path(state: 'all') do - %i.fa.fa-compass - All - - .dropdown.inline - %a.dropdown-toggle.btn{href: '#', "data-toggle" => "dropdown"} - %i.fa.fa-user - %span.light assignee: - - if @assignee.present? - %strong= @assignee.name - - elsif params[:assignee_id] == "0" - Unassigned - - else - Any - %b.caret - %ul.dropdown-menu - %li - = link_to project_filter_path(assignee_id: nil) do - Any - = link_to project_filter_path(assignee_id: 0) do - Unassigned - - @assignees.sort_by(&:name).each do |user| - %li - = link_to project_filter_path(assignee_id: user.id) do - = image_tag avatar_icon(user.email), class: "avatar s16", alt: '' - = user.name - - .dropdown.inline.prepend-left-10 - %a.dropdown-toggle.btn{href: '#', "data-toggle" => "dropdown"} - %i.fa.fa-user - %span.light author: - - if @author.present? - %strong= @author.name - - elsif params[:author_id] == "0" - Unassigned - - else - Any - %b.caret - %ul.dropdown-menu - %li - = link_to project_filter_path(author_id: nil) do - Any - = link_to project_filter_path(author_id: 0) do - Unassigned - - @authors.sort_by(&:name).each do |user| - %li - = link_to project_filter_path(author_id: user.id) do - = image_tag avatar_icon(user.email), class: "avatar s16", alt: '' - = user.name - - .dropdown.inline.prepend-left-10 - %a.dropdown-toggle.btn{href: '#', "data-toggle" => "dropdown"} - %i.fa.fa-clock-o - %span.light milestone: - - if @milestone.present? - %strong= @milestone.title - - elsif params[:milestone_id] == "0" - None (backlog) - - else - Any - %b.caret - %ul.dropdown-menu - %li - = link_to project_filter_path(milestone_id: nil) do - Any - = link_to project_filter_path(milestone_id: 0) do - None (backlog) - - project_active_milestones.each do |milestone| - %li - = link_to project_filter_path(milestone_id: milestone.id) do - %strong= milestone.title - %small.light= milestone.expires_at - - .dropdown.inline.prepend-left-10 - %a.dropdown-toggle.btn{href: '#', "data-toggle" => "dropdown"} - %i.fa.fa-user - %span.light label: - - if params[:label_name].present? - %strong= params[:label_name] - - else - Any - %b.caret - %ul.dropdown-menu - %li - = link_to project_filter_path(label_name: nil) do - Any - - if @project.labels.any? - - @project.labels.order_by_name.each do |label| - %li - = link_to project_filter_path(label_name: label.name) do - = render_colored_label(label) - - else - %li - = link_to generate_project_labels_path(@project, redirect: request.original_url), method: :post do - %i.fa.fa-plus-circle - Create default labels - - .pull-right - = render 'shared/sort_dropdown' diff --git a/app/views/projects/_issues_nav.html.haml b/app/views/projects/_issues_nav.html.haml index 18628eb6207..4e2ef3202f9 100644 --- a/app/views/projects/_issues_nav.html.haml +++ b/app/views/projects/_issues_nav.html.haml @@ -2,15 +2,22 @@ - if project_nav_tab? :issues = nav_link(controller: :issues) do = link_to project_issues_path(@project), class: "tab" do + %i.fa.fa-exclamation-circle Issues - if project_nav_tab? :merge_requests = nav_link(controller: :merge_requests) do = link_to project_merge_requests_path(@project), class: "tab" do + %i.fa.fa-tasks Merge Requests = nav_link(controller: :milestones) do - = link_to 'Milestones', project_milestones_path(@project), class: "tab" + = link_to project_milestones_path(@project), class: "tab" do + %i.fa.fa-clock-o + Milestones = nav_link(controller: :labels) do - = link_to 'Labels', project_labels_path(@project), class: "tab" + = link_to project_labels_path(@project), class: "tab" do + %i.fa.fa-tags + Labels + - if current_controller?(:milestones) %li.pull-right diff --git a/app/views/projects/issues/_issues.html.haml b/app/views/projects/issues/_issues.html.haml index 15c84c7ced2..010ca3b68b3 100644 --- a/app/views/projects/issues/_issues.html.haml +++ b/app/views/projects/issues/_issues.html.haml @@ -1,7 +1,7 @@ .append-bottom-10 .check-all-holder = check_box_tag "check_all_issues", nil, false, class: "check_all_issues left" - = render 'projects/issuable_filter' + = render 'shared/issuable_filter' .clearfix .issues_bulk_update.hide diff --git a/app/views/projects/merge_requests/index.html.haml b/app/views/projects/merge_requests/index.html.haml index 6a615266ca3..2654ea70990 100644 --- a/app/views/projects/merge_requests/index.html.haml +++ b/app/views/projects/merge_requests/index.html.haml @@ -2,7 +2,7 @@ .merge-requests-holder .append-bottom-10 - = render 'projects/issuable_filter' + = render 'shared/issuable_filter' .panel.panel-default %ul.well-list.mr-list = render @merge_requests diff --git a/app/views/shared/_filter.html.haml b/app/views/shared/_filter.html.haml deleted file mode 100644 index d366dd97a71..00000000000 --- a/app/views/shared/_filter.html.haml +++ /dev/null @@ -1,50 +0,0 @@ -.side-filters - = form_tag filter_path(entity), method: 'get' do - - if current_user - %fieldset.scope-filter - %ul.nav.nav-pills.nav-stacked - %li{class: ("active" if params[:scope] == 'assigned-to-me')} - = link_to filter_path(entity, scope: 'assigned-to-me') do - Assigned to me - %span.pull-right - = assigned_entities_count(current_user, entity, @group) - %li{class: ("active" if params[:scope] == 'authored')} - = link_to filter_path(entity, scope: 'authored') do - Created by me - %span.pull-right - = authored_entities_count(current_user, entity, @group) - %li{class: ("active" if params[:scope] == 'all')} - = link_to filter_path(entity, scope: 'all') do - Everyone's - %span.pull-right - = authorized_entities_count(current_user, entity, @group) - - %fieldset.status-filter - %legend State - %ul.nav.nav-pills - %li{class: ("active" if params[:state] == 'opened')} - = link_to filter_path(entity, state: 'opened') do - Open - %li{class: ("active" if params[:state] == 'closed')} - = link_to filter_path(entity, state: 'closed') do - Closed - %li{class: ("active" if params[:state] == 'all')} - = link_to filter_path(entity, state: 'all') do - All - - %fieldset - %legend Projects - %ul.nav.nav-pills.nav-stacked.nav-small - - @projects.each do |project| - - unless entities_per_project(project, entity).zero? - %li{class: ("active" if params[:project_id] == project.id.to_s)} - = link_to filter_path(entity, project_id: project.id) do - = project.name_with_namespace - %small.pull-right= entities_per_project(project, entity) - - %fieldset - - if params[:state].present? || params[:project_id].present? - = link_to filter_path(entity, state: nil, project_id: nil), class: 'pull-right cgray' do - %i.fa.fa-times - %strong Clear filter - diff --git a/app/views/shared/_issuable_filter.html.haml b/app/views/shared/_issuable_filter.html.haml new file mode 100644 index 00000000000..56d58a52686 --- /dev/null +++ b/app/views/shared/_issuable_filter.html.haml @@ -0,0 +1,112 @@ +.issues-filters + .pull-left.append-right-20 + %ul.nav.nav-pills.nav-compact + %li{class: ("active" if params[:state] == 'opened')} + = link_to page_filter_path(state: 'opened') do + %i.fa.fa-exclamation-circle + Open + %li{class: ("active" if params[:state] == 'closed')} + = link_to page_filter_path(state: 'closed') do + %i.fa.fa-check-circle + Closed + %li{class: ("active" if params[:state] == 'all')} + = link_to page_filter_path(state: 'all') do + %i.fa.fa-compass + All + + .dropdown.inline + %a.dropdown-toggle.btn{href: '#', "data-toggle" => "dropdown"} + %i.fa.fa-user + %span.light assignee: + - if @assignee.present? + %strong= @assignee.name + - elsif params[:assignee_id] == "0" + Unassigned + - else + Any + %b.caret + %ul.dropdown-menu + %li + = link_to page_filter_path(assignee_id: nil) do + Any + = link_to page_filter_path(assignee_id: 0) do + Unassigned + - @assignees.sort_by(&:name).each do |user| + %li + = link_to page_filter_path(assignee_id: user.id) do + = image_tag avatar_icon(user.email), class: "avatar s16", alt: '' + = user.name + + .dropdown.inline.prepend-left-10 + %a.dropdown-toggle.btn{href: '#', "data-toggle" => "dropdown"} + %i.fa.fa-user + %span.light author: + - if @author.present? + %strong= @author.name + - elsif params[:author_id] == "0" + Unassigned + - else + Any + %b.caret + %ul.dropdown-menu + %li + = link_to page_filter_path(author_id: nil) do + Any + = link_to page_filter_path(author_id: 0) do + Unassigned + - @authors.sort_by(&:name).each do |user| + %li + = link_to page_filter_path(author_id: user.id) do + = image_tag avatar_icon(user.email), class: "avatar s16", alt: '' + = user.name + + .dropdown.inline.prepend-left-10 + %a.dropdown-toggle.btn{href: '#', "data-toggle" => "dropdown"} + %i.fa.fa-clock-o + %span.light milestone: + - if @milestone.present? + %strong= @milestone.title + - elsif params[:milestone_id] == "0" + None (backlog) + - else + Any + %b.caret + %ul.dropdown-menu + %li + = link_to page_filter_path(milestone_id: nil) do + Any + = link_to page_filter_path(milestone_id: 0) do + None (backlog) + - @milestones.each do |milestone| + %li + = link_to page_filter_path(milestone_id: milestone.id) do + %strong= milestone.title + %small.light= milestone.expires_at + + - if @project + .dropdown.inline.prepend-left-10 + %a.dropdown-toggle.btn{href: '#', "data-toggle" => "dropdown"} + %i.fa.fa-tags + %span.light label: + - if params[:label_name].present? + %strong= params[:label_name] + - else + Any + %b.caret + %ul.dropdown-menu + %li + = link_to page_filter_path(label_name: nil) do + Any + - if @project.labels.any? + - @project.labels.order_by_name.each do |label| + %li + = link_to page_filter_path(label_name: label.name) do + = render_colored_label(label) + - else + %li + = link_to generate_project_labels_path(@project, redirect: request.original_url), method: :post do + %i.fa.fa-plus-circle + Create default labels + + .pull-right + = render 'shared/sort_dropdown' diff --git a/app/views/shared/_sort_dropdown.html.haml b/app/views/shared/_sort_dropdown.html.haml index 54f59245690..93ed9b67336 100644 --- a/app/views/shared/_sort_dropdown.html.haml +++ b/app/views/shared/_sort_dropdown.html.haml @@ -8,15 +8,15 @@ %b.caret %ul.dropdown-menu %li - = link_to project_filter_path(sort: 'newest') do + = link_to page_filter_path(sort: 'newest') do = sort_title_recently_created - = link_to project_filter_path(sort: 'oldest') do + = link_to page_filter_path(sort: 'oldest') do = sort_title_oldest_created - = link_to project_filter_path(sort: 'recently_updated') do + = link_to page_filter_path(sort: 'recently_updated') do = sort_title_recently_updated - = link_to project_filter_path(sort: 'last_updated') do + = link_to page_filter_path(sort: 'last_updated') do = sort_title_oldest_updated - = link_to project_filter_path(sort: 'milestone_due_soon') do + = link_to page_filter_path(sort: 'milestone_due_soon') do Milestone due soon - = link_to project_filter_path(sort: 'milestone_due_later') do + = link_to page_filter_path(sort: 'milestone_due_later') do Milestone due later -- cgit v1.2.1 From 016981c009a2a8c6066085300a838d9c9d6bfd5d Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 24 Dec 2014 11:04:33 +0200 Subject: Refactor issuable list pages Signed-off-by: Dmitriy Zaporozhets --- app/controllers/application_controller.rb | 37 ++++++++++++++++------ app/controllers/dashboard_controller.rb | 8 ++--- app/controllers/groups_controller.rb | 8 ++--- app/controllers/projects/issues_controller.rb | 4 +-- .../projects/merge_requests_controller.rb | 4 +-- 5 files changed, 33 insertions(+), 28 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 0ddd743f053..79824116b41 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -240,24 +240,26 @@ class ApplicationController < ActionController::Base end end - def set_filters_defaults + def set_filters_params params[:sort] ||= 'newest' params[:scope] = 'all' if params[:scope].blank? params[:state] = 'opened' if params[:state].blank? - @sort = params[:sort].humanize + @filter_params = params.dup if @project - params[:project_id] = @project.id + @filter_params[:project_id] = @project.id elsif @group - params[:group_id] = @group.id + @filter_params[:group_id] = @group.id else - params[:authorized_only] = true + @filter_params[:authorized_only] = true - unless params[:assignee_id].present? - params[:assignee_id] = current_user.id + unless @filter_params[:assignee_id] + @filter_params[:assignee_id] = current_user.id end end + + @filter_params end def set_filter_values(collection) @@ -265,20 +267,35 @@ class ApplicationController < ActionController::Base author_id = params[:author_id] milestone_id = params[:milestone_id] + @sort = params[:sort].try(:humanize) @assignees = User.where(id: collection.pluck(:assignee_id)) @authors = User.where(id: collection.pluck(:author_id)) @milestones = Milestone.where(id: collection.pluck(:milestone_id)) if assignee_id.present? && !assignee_id.to_i.zero? - @assignee = @assignees.find(assignee_id) + @assignee = @assignees.find_by(id: assignee_id) end if author_id.present? && !author_id.to_i.zero? - @author = @authors.find(author_id) + @author = @authors.find_by(id: author_id) end if milestone_id.present? && !milestone_id.to_i.zero? - @milestone = @milestones.find(milestone_id) + @milestone = @milestones.find_by(id: milestone_id) end end + + def get_issues_collection + set_filters_params + issues = IssuesFinder.new.execute(current_user, @filter_params) + set_filter_values(issues) + issues + end + + def get_merge_requests_collection + set_filters_params + merge_requests = MergeRequestsFinder.new.execute(current_user, @filter_params) + set_filter_values(merge_requests) + merge_requests + end end diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index bfd1361f2df..cd876024ba3 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -53,17 +53,13 @@ class DashboardController < ApplicationController end def merge_requests - set_filters_defaults - @merge_requests = MergeRequestsFinder.new.execute(current_user, params) - set_filter_values(@merge_requests) + @merge_requests = get_merge_requests_collection @merge_requests = @merge_requests.page(params[:page]).per(20) @merge_requests = @merge_requests.preload(:author, :target_project) end def issues - set_filters_defaults - @issues = IssuesFinder.new.execute(current_user, params) - set_filter_values(@issues) + @issues = get_issues_collection @issues = @issues.page(params[:page]).per(20) @issues = @issues.preload(:author, :project) diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb index a28f4cc4072..6cd12c35bf9 100644 --- a/app/controllers/groups_controller.rb +++ b/app/controllers/groups_controller.rb @@ -45,17 +45,13 @@ class GroupsController < ApplicationController end def merge_requests - set_filters_defaults - @merge_requests = MergeRequestsFinder.new.execute(current_user, params) - set_filter_values(@merge_requests) + @merge_requests = get_merge_requests_collection @merge_requests = @merge_requests.page(params[:page]).per(20) @merge_requests = @merge_requests.preload(:author, :target_project) end def issues - set_filters_defaults - @issues = IssuesFinder.new.execute(current_user, params) - set_filter_values(@issues) + @issues = get_issues_collection @issues = @issues.page(params[:page]).per(20) @issues = @issues.preload(:author, :project) diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb index 0266c51babb..42e207cf376 100644 --- a/app/controllers/projects/issues_controller.rb +++ b/app/controllers/projects/issues_controller.rb @@ -18,9 +18,7 @@ class Projects::IssuesController < Projects::ApplicationController def index terms = params['issue_search'] - set_filters_defaults - @issues = IssuesFinder.new.execute(current_user, params) - set_filter_values(@issues) + @issues = get_issues_collection @issues = @issues.full_search(terms) if terms.present? @issues = @issues.page(params[:page]).per(20) diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index 20d1222326e..d23461821d7 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -17,9 +17,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController before_filter :authorize_modify_merge_request!, only: [:close, :edit, :update, :sort] def index - set_filters_defaults - @merge_requests = MergeRequestsFinder.new.execute(current_user, params) - set_filter_values(@merge_requests) + @merge_requests = get_merge_requests_collection @merge_requests = @merge_requests.page(params[:page]).per(20) end -- cgit v1.2.1 From 7b792af872699cd9439c750b780b0b906342cff0 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 24 Dec 2014 11:39:03 +0200 Subject: Improvements to issues/mr filters: * use filter_params variable when set filter values * fix project issues spinach tests Signed-off-by: Dmitriy Zaporozhets --- app/controllers/application_controller.rb | 8 ++++---- app/views/shared/_issuable_filter.html.haml | 8 ++++---- features/steps/dashboard/issues.rb | 14 ++++++++++---- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 79824116b41..1b48572f2b8 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -263,11 +263,11 @@ class ApplicationController < ActionController::Base end def set_filter_values(collection) - assignee_id = params[:assignee_id] - author_id = params[:author_id] - milestone_id = params[:milestone_id] + assignee_id = @filter_params[:assignee_id] + author_id = @filter_params[:author_id] + milestone_id = @filter_params[:milestone_id] - @sort = params[:sort].try(:humanize) + @sort = @filter_params[:sort].try(:humanize) @assignees = User.where(id: collection.pluck(:assignee_id)) @authors = User.where(id: collection.pluck(:author_id)) @milestones = Milestone.where(id: collection.pluck(:milestone_id)) diff --git a/app/views/shared/_issuable_filter.html.haml b/app/views/shared/_issuable_filter.html.haml index 56d58a52686..4f683258fac 100644 --- a/app/views/shared/_issuable_filter.html.haml +++ b/app/views/shared/_issuable_filter.html.haml @@ -14,7 +14,7 @@ %i.fa.fa-compass All - .dropdown.inline + .dropdown.inline.assignee-filter %a.dropdown-toggle.btn{href: '#', "data-toggle" => "dropdown"} %i.fa.fa-user %span.light assignee: @@ -37,7 +37,7 @@ = image_tag avatar_icon(user.email), class: "avatar s16", alt: '' = user.name - .dropdown.inline.prepend-left-10 + .dropdown.inline.prepend-left-10.author-filter %a.dropdown-toggle.btn{href: '#', "data-toggle" => "dropdown"} %i.fa.fa-user %span.light author: @@ -60,7 +60,7 @@ = image_tag avatar_icon(user.email), class: "avatar s16", alt: '' = user.name - .dropdown.inline.prepend-left-10 + .dropdown.inline.prepend-left-10.milestone-filter %a.dropdown-toggle.btn{href: '#', "data-toggle" => "dropdown"} %i.fa.fa-clock-o %span.light milestone: @@ -84,7 +84,7 @@ %small.light= milestone.expires_at - if @project - .dropdown.inline.prepend-left-10 + .dropdown.inline.prepend-left-10.labels-filter %a.dropdown-toggle.btn{href: '#', "data-toggle" => "dropdown"} %i.fa.fa-tags %span.light label: diff --git a/features/steps/dashboard/issues.rb b/features/steps/dashboard/issues.rb index 2a5850d091b..b77113e3974 100644 --- a/features/steps/dashboard/issues.rb +++ b/features/steps/dashboard/issues.rb @@ -35,14 +35,20 @@ class Spinach::Features::DashboardIssues < Spinach::FeatureSteps end step 'I click "Authored by me" link' do - within ".scope-filter" do - click_link 'Created by me' + within ".assignee-filter" do + click_link "Any" + end + within ".author-filter" do + click_link current_user.name end end step 'I click "All" link' do - within ".scope-filter" do - click_link "Everyone's" + within ".author-filter" do + click_link "Any" + end + within ".assignee-filter" do + click_link "Any" end end -- cgit v1.2.1 From 97d7c06f781f17a21689cf35410009f1247427e9 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 24 Dec 2014 12:56:03 +0200 Subject: Fix scroll problems and disable authorized_only filter Signed-off-by: Dmitriy Zaporozhets --- app/assets/stylesheets/main/layout.scss | 4 ---- app/assets/stylesheets/sections/sidebar.scss | 1 - app/controllers/application_controller.rb | 6 +++++- features/steps/dashboard/merge_requests.rb | 14 ++++++++++---- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/app/assets/stylesheets/main/layout.scss b/app/assets/stylesheets/main/layout.scss index 2800feb81f2..71522443f10 100644 --- a/app/assets/stylesheets/main/layout.scss +++ b/app/assets/stylesheets/main/layout.scss @@ -4,10 +4,6 @@ html { &.touch .tooltip { display: none !important; } } -body { - padding-bottom: 20px; -} - .container { padding-top: 0; z-index: 5; diff --git a/app/assets/stylesheets/sections/sidebar.scss b/app/assets/stylesheets/sections/sidebar.scss index f3b2167bc6e..80b49d751b9 100644 --- a/app/assets/stylesheets/sections/sidebar.scss +++ b/app/assets/stylesheets/sections/sidebar.scss @@ -3,7 +3,6 @@ } .sidebar-wrapper { - z-index: 1000; overflow-y: auto; background: #F5F5F5; } diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 1b48572f2b8..41ad5f98ace 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -252,7 +252,11 @@ class ApplicationController < ActionController::Base elsif @group @filter_params[:group_id] = @group.id else - @filter_params[:authorized_only] = true + # TODO: this filter ignore issues/mr created in public or + # internal repos where you are not a member. Enable this filter + # or improve current implementation to filter only issues you + # created or assigned or mentioned + #@filter_params[:authorized_only] = true unless @filter_params[:assignee_id] @filter_params[:assignee_id] = current_user.id diff --git a/features/steps/dashboard/merge_requests.rb b/features/steps/dashboard/merge_requests.rb index 75e53173d3f..6261c89924c 100644 --- a/features/steps/dashboard/merge_requests.rb +++ b/features/steps/dashboard/merge_requests.rb @@ -39,14 +39,20 @@ class Spinach::Features::DashboardMergeRequests < Spinach::FeatureSteps end step 'I click "Authored by me" link' do - within ".scope-filter" do - click_link 'Created by me' + within ".assignee-filter" do + click_link "Any" + end + within ".author-filter" do + click_link current_user.name end end step 'I click "All" link' do - within ".scope-filter" do - click_link "Everyone's" + within ".author-filter" do + click_link "Any" + end + within ".assignee-filter" do + click_link "Any" end end -- cgit v1.2.1 From 8045d96ea81ffd1a87018c751a4604613b04da71 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 24 Dec 2014 13:39:35 +0200 Subject: Fix diff comments Signed-off-by: Dmitriy Zaporozhets --- app/assets/javascripts/notes.js.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/javascripts/notes.js.coffee b/app/assets/javascripts/notes.js.coffee index 30f8530dfda..4d1c81d91d4 100644 --- a/app/assets/javascripts/notes.js.coffee +++ b/app/assets/javascripts/notes.js.coffee @@ -375,7 +375,7 @@ class @Notes ### addDiffNote: (e) => e.preventDefault() - link = e.target + link = e.currentTarget form = $(".js-new-note-form") row = $(link).closest("tr") nextRow = row.next() -- cgit v1.2.1 From 35eec009e50d85c7296a7c16fcbd313f620b53c8 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 24 Dec 2014 14:34:37 +0200 Subject: Fix spinach tests Signed-off-by: Dmitriy Zaporozhets --- features/explore/groups.feature | 4 ---- 1 file changed, 4 deletions(-) diff --git a/features/explore/groups.feature b/features/explore/groups.feature index b50a3e766c6..c11634bd74a 100644 --- a/features/explore/groups.feature +++ b/features/explore/groups.feature @@ -28,7 +28,6 @@ Feature: Explore Groups Given group "TestGroup" has internal project "Internal" When I sign in as a user And I visit group "TestGroup" issues page - And I change filter to Everyone's Then I should see project "Internal" items And I should not see project "Enterprise" items @@ -36,7 +35,6 @@ Feature: Explore Groups Given group "TestGroup" has internal project "Internal" When I sign in as a user And I visit group "TestGroup" merge requests page - And I change filter to Everyone's Then I should see project "Internal" items And I should not see project "Enterprise" items @@ -94,7 +92,6 @@ Feature: Explore Groups Given group "TestGroup" has public project "Community" When I sign in as a user And I visit group "TestGroup" issues page - And I change filter to Everyone's Then I should see project "Community" items And I should see project "Internal" items And I should not see project "Enterprise" items @@ -104,7 +101,6 @@ Feature: Explore Groups Given group "TestGroup" has public project "Community" When I sign in as a user And I visit group "TestGroup" merge requests page - And I change filter to Everyone's Then I should see project "Community" items And I should see project "Internal" items And I should not see project "Enterprise" items -- cgit v1.2.1