From 3bfe3febef2903e27b06e319cbf259546cea7841 Mon Sep 17 00:00:00 2001 From: Toon Claes Date: Thu, 6 Apr 2017 21:47:14 +0200 Subject: Make MR link in build sidebar bold It adds some consistency compared to the links in the header, which are also bold. --- app/views/projects/builds/_sidebar.html.haml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'app') diff --git a/app/views/projects/builds/_sidebar.html.haml b/app/views/projects/builds/_sidebar.html.haml index f4a66398c85..694f524faed 100644 --- a/app/views/projects/builds/_sidebar.html.haml +++ b/app/views/projects/builds/_sidebar.html.haml @@ -48,7 +48,8 @@ - if @build.merge_request %p.build-detail-row %span.build-light-text Merge Request: - = link_to "#{@build.merge_request.to_reference}", merge_request_path(@build.merge_request) + = link_to merge_request_path(@build.merge_request) do + %strong= "#{@build.merge_request.to_reference}" - if @build.duration %p.build-detail-row %span.build-light-text Duration: -- cgit v1.2.1 From 3f2578bce5afbb1f92acab2481ec6de2f38a6296 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Fri, 21 Apr 2017 15:09:37 +0100 Subject: Commit view correctly spans the full width when parallel view Closes #30881 --- app/assets/stylesheets/pages/issuable.scss | 11 ++++++++--- app/views/projects/commit/show.html.haml | 4 +++- 2 files changed, 11 insertions(+), 4 deletions(-) (limited to 'app') diff --git a/app/assets/stylesheets/pages/issuable.scss b/app/assets/stylesheets/pages/issuable.scss index 8d3d1a72b9b..cf8735e6fad 100644 --- a/app/assets/stylesheets/pages/issuable.scss +++ b/app/assets/stylesheets/pages/issuable.scss @@ -6,7 +6,13 @@ } .limit-container-width { - .detail-page-header { + .detail-page-header, + .page-content-header, + .commit-box, + .info-well, + .notes, + .commit-ci-menu, + .files-changed { @extend .fixed-width-container; } @@ -36,8 +42,7 @@ } .diffs { - .mr-version-controls, - .files-changed { + .mr-version-controls { @extend .fixed-width-container; } } diff --git a/app/views/projects/commit/show.html.haml b/app/views/projects/commit/show.html.haml index 0d11da2451a..cdf0f11dc5f 100644 --- a/app/views/projects/commit/show.html.haml +++ b/app/views/projects/commit/show.html.haml @@ -1,9 +1,11 @@ - @no_container = true +- container_class = !fluid_layout && diff_view == :inline ? 'container-limited' : '' +- limited_container_width = fluid_layout || diff_view == :inline ? '' : 'limit-container-width' - page_title "#{@commit.title} (#{@commit.short_id})", "Commits" - page_description @commit.description = render "projects/commits/head" -%div{ class: container_class } +%div.container-fluid{ class: [limited_container_width, container_class] } = render "commit_box" - if @commit.status = render "ci_menu" -- cgit v1.2.1 From 064739431a837ea644851f3f3d01f5da6ee05951 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Mon, 24 Apr 2017 16:20:23 +0100 Subject: Fixed HAML lint --- app/views/projects/commit/show.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/views/projects/commit/show.html.haml b/app/views/projects/commit/show.html.haml index cdf0f11dc5f..16d2646cb4e 100644 --- a/app/views/projects/commit/show.html.haml +++ b/app/views/projects/commit/show.html.haml @@ -5,7 +5,7 @@ - page_description @commit.description = render "projects/commits/head" -%div.container-fluid{ class: [limited_container_width, container_class] } +.container-fluid{ class: [limited_container_width, container_class] } = render "commit_box" - if @commit.status = render "ci_menu" -- cgit v1.2.1 From caadfe4cfdb2df56ea4b8bd104c94e8236fc9f9c Mon Sep 17 00:00:00 2001 From: Annabel Dunstone Gray Date: Mon, 24 Apr 2017 14:59:36 -0500 Subject: Use bold class --- app/views/projects/builds/_sidebar.html.haml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'app') diff --git a/app/views/projects/builds/_sidebar.html.haml b/app/views/projects/builds/_sidebar.html.haml index 694f524faed..26c892d0fd2 100644 --- a/app/views/projects/builds/_sidebar.html.haml +++ b/app/views/projects/builds/_sidebar.html.haml @@ -48,8 +48,7 @@ - if @build.merge_request %p.build-detail-row %span.build-light-text Merge Request: - = link_to merge_request_path(@build.merge_request) do - %strong= "#{@build.merge_request.to_reference}" + = link_to "#{@build.merge_request.to_reference}", merge_request_path(@build.merge_request), class: 'bold' - if @build.duration %p.build-detail-row %span.build-light-text Duration: -- cgit v1.2.1 From 967019f7792175c9fc010069657a7e09cf278575 Mon Sep 17 00:00:00 2001 From: Jose Ivan Vargas Date: Thu, 19 Jan 2017 18:11:12 -0600 Subject: Added a description for non project masters or owners for the members settings page Truncated the project name if it exceeds 18 characters --- app/views/projects/project_members/_index.html.haml | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'app') diff --git a/app/views/projects/project_members/_index.html.haml b/app/views/projects/project_members/_index.html.haml index ab0771b5751..f83521052ed 100644 --- a/app/views/projects/project_members/_index.html.haml +++ b/app/views/projects/project_members/_index.html.haml @@ -6,6 +6,12 @@ %p Add a new member to %strong= @project.name + - else + %p + Members can be added by project + %i Masters + or + %i Owners .col-lg-9 .light.prepend-top-default - if can?(current_user, :admin_project_member, @project) -- cgit v1.2.1 From 49e9fd05bfbb4dfe15b1698cc00883afdb3ef313 Mon Sep 17 00:00:00 2001 From: Jose Ivan Vargas Date: Mon, 23 Jan 2017 17:35:31 -0600 Subject: Changed the way to truncate the panel to title from ruby to a scss mixin --- app/assets/stylesheets/framework/common.scss | 4 ++++ app/views/projects/project_members/_team.html.haml | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/assets/stylesheets/framework/common.scss b/app/assets/stylesheets/framework/common.scss index 0fd7203e72b..f4f285f0fdc 100644 --- a/app/assets/stylesheets/framework/common.scss +++ b/app/assets/stylesheets/framework/common.scss @@ -425,6 +425,10 @@ table { } .str-truncated { + &-30 { + @include str-truncated(30%); + } + &-60 { @include str-truncated(60%); } diff --git a/app/views/projects/project_members/_team.html.haml b/app/views/projects/project_members/_team.html.haml index 81d57c77edf..b875fa2eec4 100644 --- a/app/views/projects/project_members/_team.html.haml +++ b/app/views/projects/project_members/_team.html.haml @@ -1,7 +1,9 @@ .panel.panel-default .panel-heading - Members with access to - %strong= @project.name + %span.str-truncated-30 + Members of + %strong + #{@project.name} %span.badge= @project_members.total_count = form_tag namespace_project_settings_members_path(@project.namespace, @project), method: :get, class: 'form-inline member-search-form' do .form-group -- cgit v1.2.1 From 9d6c769f18dace5699454ff211e8bb679420ddab Mon Sep 17 00:00:00 2001 From: Jose Ivan Vargas Date: Thu, 26 Jan 2017 14:16:56 -0600 Subject: Added a media query when there's a more width available to show more of the title --- app/assets/stylesheets/framework/common.scss | 3 +++ 1 file changed, 3 insertions(+) (limited to 'app') diff --git a/app/assets/stylesheets/framework/common.scss b/app/assets/stylesheets/framework/common.scss index f4f285f0fdc..1edea8b997f 100644 --- a/app/assets/stylesheets/framework/common.scss +++ b/app/assets/stylesheets/framework/common.scss @@ -427,6 +427,9 @@ table { .str-truncated { &-30 { @include str-truncated(30%); + @media (max-width: $screen-xs-max){ + max-width: 90%; + } } &-60 { -- cgit v1.2.1 From 88c772459e093d78823538fbb18f4942046ae2f1 Mon Sep 17 00:00:00 2001 From: Jose Ivan Vargas Date: Mon, 24 Apr 2017 13:24:51 -0500 Subject: Added flex wrapping --- app/assets/stylesheets/framework/common.scss | 7 --- app/assets/stylesheets/pages/members.scss | 52 ++++++++++++++++++++++ app/views/projects/project_members/_team.html.haml | 6 +-- 3 files changed, 55 insertions(+), 10 deletions(-) (limited to 'app') diff --git a/app/assets/stylesheets/framework/common.scss b/app/assets/stylesheets/framework/common.scss index 1edea8b997f..0fd7203e72b 100644 --- a/app/assets/stylesheets/framework/common.scss +++ b/app/assets/stylesheets/framework/common.scss @@ -425,13 +425,6 @@ table { } .str-truncated { - &-30 { - @include str-truncated(30%); - @media (max-width: $screen-xs-max){ - max-width: 90%; - } - } - &-60 { @include str-truncated(60%); } diff --git a/app/assets/stylesheets/pages/members.scss b/app/assets/stylesheets/pages/members.scss index be7193bae04..8dbac76e30a 100644 --- a/app/assets/stylesheets/pages/members.scss +++ b/app/assets/stylesheets/pages/members.scss @@ -133,3 +133,55 @@ right: 160px; } } + +.flex-project-members-panel { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + + @media (max-width: $screen-sm-min) { + display: block; + + .flex-project-title { + vertical-align: top; + display: inline-block; + max-width: 90%; + } + } + + .flex-project-title { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + + .badge { + height: 17px; + line-height: 16px; + margin-right: 5px; + padding-top: 1px; + padding-bottom: 1px; + } + + .flex-project-members-form { + flex-wrap: nowrap; + white-space: nowrap; + margin-left: auto; + } +} + +.panel { + .panel-heading { + .badge { + margin-top: 0; + } + + @media (max-width: $screen-sm-min) { + .badge { + margin-right: 0; + margin-left: 0; + } + } + } +} \ No newline at end of file diff --git a/app/views/projects/project_members/_team.html.haml b/app/views/projects/project_members/_team.html.haml index b875fa2eec4..7b1a26043e1 100644 --- a/app/views/projects/project_members/_team.html.haml +++ b/app/views/projects/project_members/_team.html.haml @@ -1,11 +1,11 @@ .panel.panel-default - .panel-heading - %span.str-truncated-30 + .panel-heading.flex-project-members-panel + %span.flex-project-title Members of %strong #{@project.name} %span.badge= @project_members.total_count - = form_tag namespace_project_settings_members_path(@project.namespace, @project), method: :get, class: 'form-inline member-search-form' do + = form_tag namespace_project_settings_members_path(@project.namespace, @project), method: :get, class: 'form-inline member-search-form flex-project-members-form' do .form-group = search_field_tag :search, params[:search], { placeholder: 'Find existing members by name', class: 'form-control', spellcheck: false } %button.member-search-btn{ type: "submit", "aria-label" => "Submit search" } -- cgit v1.2.1 From 52d59a4e5108d2ffd6f2bc543ee9aef1a87a8f14 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Tue, 25 Apr 2017 15:25:20 +0100 Subject: Load milestone tabs asynchronously --- app/assets/javascripts/milestone.js | 29 +++++++++++----- app/controllers/concerns/milestone_actions.rb | 42 +++++++++++++++++++++++ app/controllers/groups/milestones_controller.rb | 4 ++- app/controllers/projects/milestones_controller.rb | 4 ++- app/helpers/milestones_helper.rb | 24 +++++++++++++ app/views/shared/milestones/_tabs.html.haml | 24 ++++++++----- 6 files changed, 108 insertions(+), 19 deletions(-) create mode 100644 app/controllers/concerns/milestone_actions.rb (limited to 'app') diff --git a/app/assets/javascripts/milestone.js b/app/assets/javascripts/milestone.js index 38c673e8907..1026f458733 100644 --- a/app/assets/javascripts/milestone.js +++ b/app/assets/javascripts/milestone.js @@ -81,9 +81,7 @@ }; function Milestone() { - var oldMouseStart; this.bindIssuesSorting(); - this.bindMergeRequestSorting(); this.bindTabsSwitching(); } @@ -100,13 +98,14 @@ }; Milestone.prototype.bindTabsSwitching = function() { - return $('a[data-toggle="tab"]').on('show.bs.tab', function(e) { - var currentTabClass, previousTabClass; - currentTabClass = $(e.target).data('show'); - previousTabClass = $(e.relatedTarget).data('show'); - $(previousTabClass).hide(); - $(currentTabClass).removeClass('hidden'); - return $(currentTabClass).show(); + return $('a[data-toggle="tab"]').on('show.bs.tab', (e) => { + const $target = $(e.target); + const endpoint = $target.data('endpoint'); + + if (endpoint && !$target.hasClass('is-loaded')) { + this.loadMergeRequests($target.attr('href'), endpoint) + .done(() => $target.addClass('is-loaded')); + } }); }; @@ -169,6 +168,18 @@ }); }; + Milestone.prototype.loadMergeRequests = function(elId, url) { + return $.ajax({ + url, + dataType: 'JSON', + }) + .fail(() => new Flash('Error loading merge requests')) + .done((data) => { + $(elId).html(data.html); + this.bindMergeRequestSorting(); + }); + }; + return Milestone; })(); }).call(window); diff --git a/app/controllers/concerns/milestone_actions.rb b/app/controllers/concerns/milestone_actions.rb new file mode 100644 index 00000000000..c28d08201e0 --- /dev/null +++ b/app/controllers/concerns/milestone_actions.rb @@ -0,0 +1,42 @@ +module MilestoneActions + extend ActiveSupport::Concern + + def merge_requests + respond_to do |format| + format.json do + render json: tabs_json("shared/milestones/_merge_requests_tab", { + merge_requests: @milestone.merge_requests, + show_project_name: true + }) + end + end + end + + def participants + respond_to do |format| + format.json do + render json: tabs_json("shared/milestones/_participants_tab", { + users: @milestone.participants + }) + end + end + end + + def labels + respond_to do |format| + format.json do + render json: tabs_json("shared/milestones/_labels_tab", { + labels: @milestone.labels + }) + end + end + end + + private + + def tabs_json(partial, data = {}) + { + html: view_to_html_string(partial, data) + } + end +end diff --git a/app/controllers/groups/milestones_controller.rb b/app/controllers/groups/milestones_controller.rb index 43102596201..e52fa766044 100644 --- a/app/controllers/groups/milestones_controller.rb +++ b/app/controllers/groups/milestones_controller.rb @@ -1,6 +1,8 @@ class Groups::MilestonesController < Groups::ApplicationController + include MilestoneActions + before_action :group_projects - before_action :milestone, only: [:show, :update] + before_action :milestone, only: [:show, :update, :merge_requests, :participants, :labels] before_action :authorize_admin_milestones!, only: [:new, :create, :update] def index diff --git a/app/controllers/projects/milestones_controller.rb b/app/controllers/projects/milestones_controller.rb index d0dd524c484..5c270501a24 100644 --- a/app/controllers/projects/milestones_controller.rb +++ b/app/controllers/projects/milestones_controller.rb @@ -1,6 +1,8 @@ class Projects::MilestonesController < Projects::ApplicationController + include MilestoneActions + before_action :module_enabled - before_action :milestone, only: [:edit, :update, :destroy, :show, :sort_issues, :sort_merge_requests] + before_action :milestone, only: [:edit, :update, :destroy, :show, :sort_issues, :sort_merge_requests, :merge_requests, :participants, :labels] # Allow read any milestone before_action :authorize_read_milestone! diff --git a/app/helpers/milestones_helper.rb b/app/helpers/milestones_helper.rb index c9e70faa52e..d46b010f535 100644 --- a/app/helpers/milestones_helper.rb +++ b/app/helpers/milestones_helper.rb @@ -115,4 +115,28 @@ module MilestonesHelper end end end + + def milestone_merge_request_path(milestone) + if @project + merge_requests_namespace_project_milestone_path(@project.namespace, @project, milestone, format: :json) + elsif @group + merge_requests_group_milestone_path(@group, milestone.safe_title, title: milestone.title, format: :json) + end + end + + def milestone_participants_path(milestone) + if @project + participants_namespace_project_milestone_path(@project.namespace, @project, milestone, format: :json) + elsif @group + participants_group_milestone_path(@group, milestone.safe_title, title: milestone.title, format: :json) + end + end + + def milestone_labels_path(milestone) + if @project + labels_namespace_project_milestone_path(@project.namespace, @project, milestone, format: :json) + elsif @group + labels_group_milestone_path(@group, milestone.safe_title, title: milestone.title, format: :json) + end + end end diff --git a/app/views/shared/milestones/_tabs.html.haml b/app/views/shared/milestones/_tabs.html.haml index 9a4502873ef..bde2db756ce 100644 --- a/app/views/shared/milestones/_tabs.html.haml +++ b/app/views/shared/milestones/_tabs.html.haml @@ -8,20 +8,20 @@ Issues %span.badge= milestone.issues_visible_to_user(current_user).size %li - = link_to '#tab-merge-requests', 'data-toggle' => 'tab', 'data-show' => '.tab-merge-requests-buttons' do + = link_to '#tab-merge-requests', 'data-toggle' => 'tab', 'data-endpoint': milestone_merge_request_path(milestone) do Merge Requests %span.badge= milestone.merge_requests.size - else %li.active - = link_to '#tab-merge-requests', 'data-toggle' => 'tab', 'data-show' => '.tab-merge-requests-buttons' do + = link_to '#tab-merge-requests', 'data-toggle' => 'tab', 'data-endpoint': milestone_merge_request_path(milestone) do Merge Requests %span.badge= milestone.merge_requests.size %li - = link_to '#tab-participants', 'data-toggle' => 'tab' do + = link_to '#tab-participants', 'data-toggle' => 'tab', 'data-endpoint': milestone_participants_path(milestone) do Participants %span.badge= milestone.participants.count %li - = link_to '#tab-labels', 'data-toggle' => 'tab' do + = link_to '#tab-labels', 'data-toggle' => 'tab', 'data-endpoint': milestone_labels_path(milestone) do Labels %span.badge= milestone.labels.count @@ -33,11 +33,19 @@ .tab-pane.active#tab-issues = render 'shared/milestones/issues_tab', issues: milestone.issues_visible_to_user(current_user).include_associations, show_project_name: show_project_name, show_full_project_name: show_full_project_name .tab-pane#tab-merge-requests - = render 'shared/milestones/merge_requests_tab', merge_requests: milestone.merge_requests, show_project_name: show_project_name, show_full_project_name: show_full_project_name + -# loaded async + .text-center.prepend-top-default + = icon('spin spinner 2x') - else .tab-pane.active#tab-merge-requests - = render 'shared/milestones/merge_requests_tab', merge_requests: milestone.merge_requests, show_project_name: show_project_name, show_full_project_name: show_full_project_name + -# loaded async + .text-center.prepend-top-default + = icon('spin spinner 2x') .tab-pane#tab-participants - = render 'shared/milestones/participants_tab', users: milestone.participants + -# loaded async + .text-center.prepend-top-default + = icon('spin spinner 2x') .tab-pane#tab-labels - = render 'shared/milestones/labels_tab', labels: milestone.labels + -# loaded async + .text-center.prepend-top-default + = icon('spin spinner 2x') -- cgit v1.2.1 From 79c7188a870bbbf4fba294a8d88530fcfe2403be Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Tue, 25 Apr 2017 16:06:17 +0100 Subject: Change the hash when changing tab This allows the tab to be loaded by default when the page loads & the hash is present --- app/assets/javascripts/milestone.js | 54 +++++++++++++++------- app/helpers/milestones_helper.rb | 6 +-- app/views/shared/milestones/_tab_loading.html.haml | 2 + app/views/shared/milestones/_tabs.html.haml | 22 ++++----- 4 files changed, 51 insertions(+), 33 deletions(-) create mode 100644 app/views/shared/milestones/_tab_loading.html.haml (limited to 'app') diff --git a/app/assets/javascripts/milestone.js b/app/assets/javascripts/milestone.js index 1026f458733..cd6f94e1365 100644 --- a/app/assets/javascripts/milestone.js +++ b/app/assets/javascripts/milestone.js @@ -21,7 +21,7 @@ Milestone.sortIssues = function(data) { var sort_issues_url; - sort_issues_url = location.href + "/sort_issues"; + sort_issues_url = location.pathname + "/sort_issues"; return $.ajax({ type: "PUT", url: sort_issues_url, @@ -38,7 +38,7 @@ Milestone.sortMergeRequests = function(data) { var sort_mr_url; - sort_mr_url = location.href + "/sort_merge_requests"; + sort_mr_url = location.pathname + "/sort_merge_requests"; return $.ajax({ type: "PUT", url: sort_mr_url, @@ -83,6 +83,12 @@ function Milestone() { this.bindIssuesSorting(); this.bindTabsSwitching(); + + this.loadInitialTab(); + + // Load merge request tab if it is active + // merge request tab is active based on different conditions in the backend + this.loadTab($('.js-milestone-tabs .active a')); } Milestone.prototype.bindIssuesSorting = function() { @@ -100,12 +106,9 @@ Milestone.prototype.bindTabsSwitching = function() { return $('a[data-toggle="tab"]').on('show.bs.tab', (e) => { const $target = $(e.target); - const endpoint = $target.data('endpoint'); - if (endpoint && !$target.hasClass('is-loaded')) { - this.loadMergeRequests($target.attr('href'), endpoint) - .done(() => $target.addClass('is-loaded')); - } + location.hash = $target.attr('href'); + this.loadTab($target); }); }; @@ -168,16 +171,33 @@ }); }; - Milestone.prototype.loadMergeRequests = function(elId, url) { - return $.ajax({ - url, - dataType: 'JSON', - }) - .fail(() => new Flash('Error loading merge requests')) - .done((data) => { - $(elId).html(data.html); - this.bindMergeRequestSorting(); - }); + Milestone.prototype.loadInitialTab = function() { + const $target = $(`.js-milestone-tabs a[href="${location.hash}"]`); + + if ($target.length) { + $target.tab('show'); + } + }; + + Milestone.prototype.loadTab = function($target) { + const endpoint = $target.data('endpoint'); + const tabElId = $target.attr('href'); + + if (endpoint && !$target.hasClass('is-loaded')) { + $.ajax({ + url: endpoint, + dataType: 'JSON', + }) + .fail(() => new Flash('Error loading milestone tab')) + .done((data) => { + $(tabElId).html(data.html); + $target.addClass('is-loaded'); + + if (tabElId === '#tab-merge-requests') { + this.bindMergeRequestSorting(); + } + }); + } }; return Milestone; diff --git a/app/helpers/milestones_helper.rb b/app/helpers/milestones_helper.rb index d46b010f535..c515774140c 100644 --- a/app/helpers/milestones_helper.rb +++ b/app/helpers/milestones_helper.rb @@ -116,7 +116,7 @@ module MilestonesHelper end end - def milestone_merge_request_path(milestone) + def milestone_merge_request_tab_path(milestone) if @project merge_requests_namespace_project_milestone_path(@project.namespace, @project, milestone, format: :json) elsif @group @@ -124,7 +124,7 @@ module MilestonesHelper end end - def milestone_participants_path(milestone) + def milestone_participants_tab_path(milestone) if @project participants_namespace_project_milestone_path(@project.namespace, @project, milestone, format: :json) elsif @group @@ -132,7 +132,7 @@ module MilestonesHelper end end - def milestone_labels_path(milestone) + def milestone_labels_tab_path(milestone) if @project labels_namespace_project_milestone_path(@project.namespace, @project, milestone, format: :json) elsif @group diff --git a/app/views/shared/milestones/_tab_loading.html.haml b/app/views/shared/milestones/_tab_loading.html.haml new file mode 100644 index 00000000000..68458c2d0aa --- /dev/null +++ b/app/views/shared/milestones/_tab_loading.html.haml @@ -0,0 +1,2 @@ +.text-center.prepend-top-default + = icon('spin spinner 2x', 'aria-hidden': 'true', 'aria-label': 'Loading tab content') diff --git a/app/views/shared/milestones/_tabs.html.haml b/app/views/shared/milestones/_tabs.html.haml index bde2db756ce..6717d59f033 100644 --- a/app/views/shared/milestones/_tabs.html.haml +++ b/app/views/shared/milestones/_tabs.html.haml @@ -1,27 +1,27 @@ .scrolling-tabs-container.inner-page-scroll-tabs.is-smaller .fade-left= icon('angle-left') .fade-right= icon('angle-right') - %ul.nav-links.scrolling-tabs + %ul.nav-links.scrolling-tabs.js-milestone-tabs - if milestone.is_a?(GlobalMilestone) || can?(current_user, :read_issue, @project) %li.active = link_to '#tab-issues', 'data-toggle' => 'tab', 'data-show' => '.tab-issues-buttons' do Issues %span.badge= milestone.issues_visible_to_user(current_user).size %li - = link_to '#tab-merge-requests', 'data-toggle' => 'tab', 'data-endpoint': milestone_merge_request_path(milestone) do + = link_to '#tab-merge-requests', 'data-toggle' => 'tab', 'data-endpoint': milestone_merge_request_tab_path(milestone) do Merge Requests %span.badge= milestone.merge_requests.size - else %li.active - = link_to '#tab-merge-requests', 'data-toggle' => 'tab', 'data-endpoint': milestone_merge_request_path(milestone) do + = link_to '#tab-merge-requests', 'data-toggle' => 'tab', 'data-endpoint': milestone_merge_request_tab_path(milestone) do Merge Requests %span.badge= milestone.merge_requests.size %li - = link_to '#tab-participants', 'data-toggle' => 'tab', 'data-endpoint': milestone_participants_path(milestone) do + = link_to '#tab-participants', 'data-toggle' => 'tab', 'data-endpoint': milestone_participants_tab_path(milestone) do Participants %span.badge= milestone.participants.count %li - = link_to '#tab-labels', 'data-toggle' => 'tab', 'data-endpoint': milestone_labels_path(milestone) do + = link_to '#tab-labels', 'data-toggle' => 'tab', 'data-endpoint': milestone_labels_tab_path(milestone) do Labels %span.badge= milestone.labels.count @@ -34,18 +34,14 @@ = render 'shared/milestones/issues_tab', issues: milestone.issues_visible_to_user(current_user).include_associations, show_project_name: show_project_name, show_full_project_name: show_full_project_name .tab-pane#tab-merge-requests -# loaded async - .text-center.prepend-top-default - = icon('spin spinner 2x') + = render "shared/milestones/tab_loading" - else .tab-pane.active#tab-merge-requests -# loaded async - .text-center.prepend-top-default - = icon('spin spinner 2x') + = render "shared/milestones/tab_loading" .tab-pane#tab-participants -# loaded async - .text-center.prepend-top-default - = icon('spin spinner 2x') + = render "shared/milestones/tab_loading" .tab-pane#tab-labels -# loaded async - .text-center.prepend-top-default - = icon('spin spinner 2x') + = render "shared/milestones/tab_loading" -- cgit v1.2.1 From 8efa88a306f599f131100296f2b8bb7ae1590741 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Tue, 25 Apr 2017 17:41:13 +0100 Subject: Fixed feature spec not waiting for ajax request to finish Fixed 404 in project milestones when not logged in --- app/controllers/projects/milestones_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/controllers/projects/milestones_controller.rb b/app/controllers/projects/milestones_controller.rb index 5c270501a24..c56bce19eee 100644 --- a/app/controllers/projects/milestones_controller.rb +++ b/app/controllers/projects/milestones_controller.rb @@ -8,7 +8,7 @@ class Projects::MilestonesController < Projects::ApplicationController before_action :authorize_read_milestone! # Allow admin milestone - before_action :authorize_admin_milestone!, except: [:index, :show] + before_action :authorize_admin_milestone!, except: [:index, :show, :merge_requests, :participants, :labels] respond_to :html -- cgit v1.2.1 From 3c077fad8367264bed3b33fafa537d5c75c4c249 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Tue, 25 Apr 2017 17:45:11 +0100 Subject: Fixed tabs loading the ajax request twice --- app/assets/javascripts/milestone.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/assets/javascripts/milestone.js b/app/assets/javascripts/milestone.js index cd6f94e1365..cd2bd976160 100644 --- a/app/assets/javascripts/milestone.js +++ b/app/assets/javascripts/milestone.js @@ -84,11 +84,11 @@ this.bindIssuesSorting(); this.bindTabsSwitching(); - this.loadInitialTab(); - // Load merge request tab if it is active // merge request tab is active based on different conditions in the backend this.loadTab($('.js-milestone-tabs .active a')); + + this.loadInitialTab(); } Milestone.prototype.bindIssuesSorting = function() { -- cgit v1.2.1 From 480fcb5533e59151a6e9ae11baef59ebab64cc6c Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Wed, 26 Apr 2017 11:32:21 +0100 Subject: Added controller specs --- app/controllers/concerns/milestone_actions.rb | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'app') diff --git a/app/controllers/concerns/milestone_actions.rb b/app/controllers/concerns/milestone_actions.rb index c28d08201e0..2cc7e15c27d 100644 --- a/app/controllers/concerns/milestone_actions.rb +++ b/app/controllers/concerns/milestone_actions.rb @@ -3,6 +3,7 @@ module MilestoneActions def merge_requests respond_to do |format| + format.html { redirect_to milestone_path } format.json do render json: tabs_json("shared/milestones/_merge_requests_tab", { merge_requests: @milestone.merge_requests, @@ -14,6 +15,7 @@ module MilestoneActions def participants respond_to do |format| + format.html { redirect_to milestone_path } format.json do render json: tabs_json("shared/milestones/_participants_tab", { users: @milestone.participants @@ -24,6 +26,7 @@ module MilestoneActions def labels respond_to do |format| + format.html { redirect_to milestone_path } format.json do render json: tabs_json("shared/milestones/_labels_tab", { labels: @milestone.labels @@ -39,4 +42,12 @@ module MilestoneActions html: view_to_html_string(partial, data) } end + + def milestone_path + if @project + namespace_project_milestone_path(@project.namespace, @project, @milestone) + else + group_milestone_path(@group, @milestone.safe_title, title: @milestone.title) + end + end end -- cgit v1.2.1 From 4b812d979eafa244c9e6b014448bf09bf1b458fd Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Wed, 26 Apr 2017 12:22:09 +0100 Subject: Fixed failing specs --- app/controllers/concerns/milestone_actions.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'app') diff --git a/app/controllers/concerns/milestone_actions.rb b/app/controllers/concerns/milestone_actions.rb index 2cc7e15c27d..3e2a0fe4f8b 100644 --- a/app/controllers/concerns/milestone_actions.rb +++ b/app/controllers/concerns/milestone_actions.rb @@ -3,7 +3,7 @@ module MilestoneActions def merge_requests respond_to do |format| - format.html { redirect_to milestone_path } + format.html { redirect_to milestone_redirect_path } format.json do render json: tabs_json("shared/milestones/_merge_requests_tab", { merge_requests: @milestone.merge_requests, @@ -15,7 +15,7 @@ module MilestoneActions def participants respond_to do |format| - format.html { redirect_to milestone_path } + format.html { redirect_to milestone_redirect_path } format.json do render json: tabs_json("shared/milestones/_participants_tab", { users: @milestone.participants @@ -26,7 +26,7 @@ module MilestoneActions def labels respond_to do |format| - format.html { redirect_to milestone_path } + format.html { redirect_to milestone_redirect_path } format.json do render json: tabs_json("shared/milestones/_labels_tab", { labels: @milestone.labels @@ -43,7 +43,7 @@ module MilestoneActions } end - def milestone_path + def milestone_redirect_path if @project namespace_project_milestone_path(@project.namespace, @project, @milestone) else -- cgit v1.2.1 From 471888d60e0d91f4ab75e5d773bd69dee85e6cea Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Fri, 28 Apr 2017 11:08:18 +0100 Subject: Moved sort endpoints into data attributes --- app/assets/javascripts/milestone.js | 27 +++++++++++++++++---------- app/views/shared/milestones/_tabs.html.haml | 6 +++--- 2 files changed, 20 insertions(+), 13 deletions(-) (limited to 'app') diff --git a/app/assets/javascripts/milestone.js b/app/assets/javascripts/milestone.js index cd2bd976160..841b24a60a3 100644 --- a/app/assets/javascripts/milestone.js +++ b/app/assets/javascripts/milestone.js @@ -19,12 +19,10 @@ }); }; - Milestone.sortIssues = function(data) { - var sort_issues_url; - sort_issues_url = location.pathname + "/sort_issues"; + Milestone.sortIssues = function(url, data) { return $.ajax({ type: "PUT", - url: sort_issues_url, + url, data: data, success: function(_data) { return Milestone.successCallback(_data); @@ -36,12 +34,10 @@ }); }; - Milestone.sortMergeRequests = function(data) { - var sort_mr_url; - sort_mr_url = location.pathname + "/sort_merge_requests"; + Milestone.sortMergeRequests = function(url, data) { return $.ajax({ type: "PUT", - url: sort_mr_url, + url, data: data, success: function(_data) { return Milestone.successCallback(_data); @@ -81,6 +77,9 @@ }; function Milestone() { + this.issuesSortEndpoint = $('#tab-issues').data('sort-endpoint'); + this.mergeRequestsSortEndpoint = $('#tab-merge-requests').data('sort-endpoint'); + this.bindIssuesSorting(); this.bindTabsSwitching(); @@ -92,12 +91,16 @@ } Milestone.prototype.bindIssuesSorting = function() { + if (!this.issuesSortEndpoint) return; + $('#issues-list-unassigned, #issues-list-ongoing, #issues-list-closed').each(function (i, el) { this.createSortable(el, { group: 'issue-list', listEls: $('.issues-sortable-list'), fieldName: 'issue', - sortCallback: Milestone.sortIssues, + sortCallback: (data) => { + Milestone.sortIssues(this.issuesSortEndpoint, data); + }, updateCallback: Milestone.updateIssue, }); }.bind(this)); @@ -113,12 +116,16 @@ }; Milestone.prototype.bindMergeRequestSorting = function() { + if (!this.mergeRequestsSortEndpoint) return; + $("#merge_requests-list-unassigned, #merge_requests-list-ongoing, #merge_requests-list-closed").each(function (i, el) { this.createSortable(el, { group: 'merge-request-list', listEls: $(".merge_requests-sortable-list:not(#merge_requests-list-merged)"), fieldName: 'merge_request', - sortCallback: Milestone.sortMergeRequests, + sortCallback: (data) => { + Milestone.sortMergeRequests(this.mergeRequestsSortEndpoint, data); + }, updateCallback: Milestone.updateMergeRequest, }); }.bind(this)); diff --git a/app/views/shared/milestones/_tabs.html.haml b/app/views/shared/milestones/_tabs.html.haml index 6717d59f033..6a6d817b344 100644 --- a/app/views/shared/milestones/_tabs.html.haml +++ b/app/views/shared/milestones/_tabs.html.haml @@ -30,13 +30,13 @@ .tab-content.milestone-content - if milestone.is_a?(GlobalMilestone) || can?(current_user, :read_issue, @project) - .tab-pane.active#tab-issues + .tab-pane.active#tab-issues{ data: { sort_endpoint: (sort_issues_namespace_project_milestone_path(@project.namespace, @project, @milestone) if @project && current_user) } } = render 'shared/milestones/issues_tab', issues: milestone.issues_visible_to_user(current_user).include_associations, show_project_name: show_project_name, show_full_project_name: show_full_project_name - .tab-pane#tab-merge-requests + .tab-pane#tab-merge-requests{ data: { sort_endpoint: (sort_merge_requests_namespace_project_milestone_path(@project.namespace, @project, @milestone) if @project && current_user) } } -# loaded async = render "shared/milestones/tab_loading" - else - .tab-pane.active#tab-merge-requests + .tab-pane.active#tab-merge-requests{ data: { sort_endpoint: (sort_merge_requests_namespace_project_milestone_path(@project.namespace, @project, @milestone) if @project && current_user) } } -# loaded async = render "shared/milestones/tab_loading" .tab-pane#tab-participants -- cgit v1.2.1 From e9d94451959e4717e0ba4ca882b5a54437efbee1 Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Tue, 21 Feb 2017 17:20:50 +0900 Subject: - Add new parameters for Pipeline API - Expand PipelinesFinder functions --- app/controllers/projects/pipelines_controller.rb | 10 +-- app/finders/pipelines_finder.rb | 108 ++++++++++++++++++----- 2 files changed, 93 insertions(+), 25 deletions(-) (limited to 'app') diff --git a/app/controllers/projects/pipelines_controller.rb b/app/controllers/projects/pipelines_controller.rb index 1780cc0233c..454b8ee17af 100644 --- a/app/controllers/projects/pipelines_controller.rb +++ b/app/controllers/projects/pipelines_controller.rb @@ -9,19 +9,19 @@ class Projects::PipelinesController < Projects::ApplicationController def index @scope = params[:scope] @pipelines = PipelinesFinder - .new(project) - .execute(scope: @scope) + .new(project, scope: @scope) + .execute .page(params[:page]) .per(30) @running_count = PipelinesFinder - .new(project).execute(scope: 'running').count + .new(project, scope: 'running').execute.count @pending_count = PipelinesFinder - .new(project).execute(scope: 'pending').count + .new(project, scope: 'pending').execute.count @finished_count = PipelinesFinder - .new(project).execute(scope: 'finished').count + .new(project, scope: 'finished').execute.count @pipelines_count = PipelinesFinder .new(project).execute.count diff --git a/app/finders/pipelines_finder.rb b/app/finders/pipelines_finder.rb index a9172f6767f..5a5416d00cc 100644 --- a/app/finders/pipelines_finder.rb +++ b/app/finders/pipelines_finder.rb @@ -1,29 +1,21 @@ class PipelinesFinder - attr_reader :project, :pipelines + attr_reader :project, :pipelines, :params - def initialize(project) + def initialize(project, params = {}) @project = project @pipelines = project.pipelines + @params = params end - def execute(scope: nil) - scoped_pipelines = - case scope - when 'running' - pipelines.running - when 'pending' - pipelines.pending - when 'finished' - pipelines.finished - when 'branches' - from_ids(ids_for_ref(branches)) - when 'tags' - from_ids(ids_for_ref(tags)) - else - pipelines - end - - scoped_pipelines.order(id: :desc) + def execute + items = pipelines + items = by_scope(items) + items = by_status(items) + items = by_ref(items) + items = by_user(items) + items = by_duration(items) + items = by_yaml_error(items) + order_and_sort(items) end private @@ -43,4 +35,80 @@ class PipelinesFinder def tags project.repository.tag_names end + + def by_scope(items) + case params[:scope] + when 'running' + items.running + when 'pending' + items.pending + when 'finished' + items.finished + when 'branches' + from_ids(ids_for_ref(branches)) + when 'tags' + from_ids(ids_for_ref(tags)) + else + items + end + end + + def by_status(items) + case params[:status] + when 'running' + items.running + when 'pending' + items.pending + when 'success' + items.success + when 'failed' + items.failed + when 'canceled' + items.canceled + when 'skipped' + items.skipped + else + items + end + end + + def by_ref(items) + if params[:ref].present? + items.where(ref: params[:ref]) + else + items + end + end + + def by_user(items) + if params[:user_id].present? + items.where(user_id: params[:user_id]) + else + items + end + end + + def by_duration(items) + if params[:duration].present? + items.where("duration > ?", params[:duration]) + else + items + end + end + + def by_yaml_error(items) + if params[:yaml_error].present? && params[:yaml_error] + items.where("yaml_errors IS NOT NULL") + else + items + end + end + + def order_and_sort(items) + if params[:order_by].present? && params[:sort].present? + items.order("#{params[:order_by]} #{params[:sort]}") + else + items.order(id: :desc) + end + end end -- cgit v1.2.1 From 01f6083939f8f9559f7e134f111bd40d17d357f9 Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Tue, 21 Feb 2017 18:19:27 +0900 Subject: Remove unnecessary comment --- app/finders/pipelines_finder.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/finders/pipelines_finder.rb b/app/finders/pipelines_finder.rb index 5a5416d00cc..3a95a1eb2ae 100644 --- a/app/finders/pipelines_finder.rb +++ b/app/finders/pipelines_finder.rb @@ -87,7 +87,7 @@ class PipelinesFinder items end end - + def by_duration(items) if params[:duration].present? items.where("duration > ?", params[:duration]) -- cgit v1.2.1 From 994e49b3fbc261f8e59429c1681d83c81ba25df3 Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Tue, 28 Feb 2017 21:24:49 +0900 Subject: Fixed those points. - username to user_id - Drop duration - Resolve comments - Add Changelog - Edit docs --- app/finders/pipelines_finder.rb | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) (limited to 'app') diff --git a/app/finders/pipelines_finder.rb b/app/finders/pipelines_finder.rb index 3a95a1eb2ae..c2e247a7ded 100644 --- a/app/finders/pipelines_finder.rb +++ b/app/finders/pipelines_finder.rb @@ -12,9 +12,8 @@ class PipelinesFinder items = by_scope(items) items = by_status(items) items = by_ref(items) - items = by_user(items) - items = by_duration(items) - items = by_yaml_error(items) + items = by_username(items) + items = by_yaml_errors(items) order_and_sort(items) end @@ -80,24 +79,16 @@ class PipelinesFinder end end - def by_user(items) - if params[:user_id].present? - items.where(user_id: params[:user_id]) + def by_username(items) + if params[:username].present? + items.joins(:user).where("users.name = ?", params[:username]) else items end end - def by_duration(items) - if params[:duration].present? - items.where("duration > ?", params[:duration]) - else - items - end - end - - def by_yaml_error(items) - if params[:yaml_error].present? && params[:yaml_error] + def by_yaml_errors(items) + if params[:yaml_errors].present? && params[:yaml_errors] items.where("yaml_errors IS NOT NULL") else items @@ -105,7 +96,9 @@ class PipelinesFinder end def order_and_sort(items) - if params[:order_by].present? && params[:sort].present? + if params[:order_by].present? && params[:sort].present? && + items.column_names.include?(params[:order_by]) && + (params[:sort].downcase == 'asc' || params[:sort].downcase == 'desc') items.order("#{params[:order_by]} #{params[:sort]}") else items.order(id: :desc) -- cgit v1.2.1 From df834306c1794ed72d6d655c7941dee28f7e85c7 Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Wed, 1 Mar 2017 02:34:48 +0900 Subject: Add specs. Plus, minor fixes. --- app/finders/pipelines_finder.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/finders/pipelines_finder.rb b/app/finders/pipelines_finder.rb index c2e247a7ded..ff16d7305ad 100644 --- a/app/finders/pipelines_finder.rb +++ b/app/finders/pipelines_finder.rb @@ -88,8 +88,12 @@ class PipelinesFinder end def by_yaml_errors(items) - if params[:yaml_errors].present? && params[:yaml_errors] - items.where("yaml_errors IS NOT NULL") + if params[:yaml_errors].present? + if params[:yaml_errors] + items.where("yaml_errors IS NOT NULL") + else + items.where("yaml_errors IS NULL") + end else items end -- cgit v1.2.1 From fd302061f915f535b2dd419d5a76efb76ab534be Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Wed, 1 Mar 2017 15:58:06 +0900 Subject: Fix rubocop offences and rspec failures --- app/finders/pipelines_finder.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/finders/pipelines_finder.rb b/app/finders/pipelines_finder.rb index ff16d7305ad..4a44a469a48 100644 --- a/app/finders/pipelines_finder.rb +++ b/app/finders/pipelines_finder.rb @@ -101,8 +101,8 @@ class PipelinesFinder def order_and_sort(items) if params[:order_by].present? && params[:sort].present? && - items.column_names.include?(params[:order_by]) && - (params[:sort].downcase == 'asc' || params[:sort].downcase == 'desc') + items.column_names.include?(params[:order_by]) && + (params[:sort].casecmp('ASC') || params[:sort].casecmp('DESC')) items.order("#{params[:order_by]} #{params[:sort]}") else items.order(id: :desc) -- cgit v1.2.1 From a114c988b4c17e37508f1d0f96b93fd8b96d2df9 Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Wed, 1 Mar 2017 21:43:25 +0900 Subject: Fixed SQL injection --- app/finders/pipelines_finder.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/finders/pipelines_finder.rb b/app/finders/pipelines_finder.rb index 4a44a469a48..5408cc09096 100644 --- a/app/finders/pipelines_finder.rb +++ b/app/finders/pipelines_finder.rb @@ -103,9 +103,9 @@ class PipelinesFinder if params[:order_by].present? && params[:sort].present? && items.column_names.include?(params[:order_by]) && (params[:sort].casecmp('ASC') || params[:sort].casecmp('DESC')) - items.order("#{params[:order_by]} #{params[:sort]}") + items.reorder(params[:order_by] => params[:sort]) else - items.order(id: :desc) + items.reorder(id: :desc) end end end -- cgit v1.2.1 From f0bc9af36b716066347549de4c0a5a3ec997a983 Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Thu, 2 Mar 2017 17:43:37 +0900 Subject: Fixed the following. - Fix inappropriate evaluation(casecmp) to regex - Fix missed boolean conversion - Improve spec --- app/finders/pipelines_finder.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'app') diff --git a/app/finders/pipelines_finder.rb b/app/finders/pipelines_finder.rb index 5408cc09096..03183efadda 100644 --- a/app/finders/pipelines_finder.rb +++ b/app/finders/pipelines_finder.rb @@ -88,8 +88,9 @@ class PipelinesFinder end def by_yaml_errors(items) - if params[:yaml_errors].present? - if params[:yaml_errors] + flg = Gitlab::Utils.to_boolean(params[:yaml_errors]) + if flg.present? + if flg items.where("yaml_errors IS NOT NULL") else items.where("yaml_errors IS NULL") @@ -102,7 +103,7 @@ class PipelinesFinder def order_and_sort(items) if params[:order_by].present? && params[:sort].present? && items.column_names.include?(params[:order_by]) && - (params[:sort].casecmp('ASC') || params[:sort].casecmp('DESC')) + params[:sort] =~ /\A(ASC|DESC)\Z/i items.reorder(params[:order_by] => params[:sort]) else items.reorder(id: :desc) -- cgit v1.2.1 From e3fd8caf94c4d5ca0b6bc086d43effc2fb7c5792 Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Thu, 2 Mar 2017 18:41:27 +0900 Subject: Improved CI. Fix yaml_errors boolean evaluation. --- app/finders/pipelines_finder.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/finders/pipelines_finder.rb b/app/finders/pipelines_finder.rb index 03183efadda..93f1ab9598f 100644 --- a/app/finders/pipelines_finder.rb +++ b/app/finders/pipelines_finder.rb @@ -89,7 +89,7 @@ class PipelinesFinder def by_yaml_errors(items) flg = Gitlab::Utils.to_boolean(params[:yaml_errors]) - if flg.present? + if !flg.nil? if flg items.where("yaml_errors IS NOT NULL") else -- cgit v1.2.1 From fa64da65e7205b101569a3e515a0a65ae2d679c9 Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Tue, 7 Mar 2017 21:35:15 +0900 Subject: Use 'case/when/end' --- app/finders/pipelines_finder.rb | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'app') diff --git a/app/finders/pipelines_finder.rb b/app/finders/pipelines_finder.rb index 93f1ab9598f..46588cf3c16 100644 --- a/app/finders/pipelines_finder.rb +++ b/app/finders/pipelines_finder.rb @@ -88,13 +88,11 @@ class PipelinesFinder end def by_yaml_errors(items) - flg = Gitlab::Utils.to_boolean(params[:yaml_errors]) - if !flg.nil? - if flg - items.where("yaml_errors IS NOT NULL") - else - items.where("yaml_errors IS NULL") - end + case Gitlab::Utils.to_boolean(params[:yaml_errors]) + when true + items.where("yaml_errors IS NOT NULL") + when false + items.where("yaml_errors IS NULL") else items end -- cgit v1.2.1 From a46c91f43225931f94a7d3c7f47beef82152f0ce Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Wed, 8 Mar 2017 17:33:10 +0900 Subject: Fix inappropriate regex --- app/finders/pipelines_finder.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/finders/pipelines_finder.rb b/app/finders/pipelines_finder.rb index 46588cf3c16..aa0210fa7f2 100644 --- a/app/finders/pipelines_finder.rb +++ b/app/finders/pipelines_finder.rb @@ -101,7 +101,7 @@ class PipelinesFinder def order_and_sort(items) if params[:order_by].present? && params[:sort].present? && items.column_names.include?(params[:order_by]) && - params[:sort] =~ /\A(ASC|DESC)\Z/i + params[:sort] =~ /\A(ASC|DESC)\z/i items.reorder(params[:order_by] => params[:sort]) else items.reorder(id: :desc) -- cgit v1.2.1 From 83d02a0b609ea71ef8448b9012221962dda69aba Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Wed, 8 Mar 2017 18:19:11 +0900 Subject: Change name to username --- app/finders/pipelines_finder.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/finders/pipelines_finder.rb b/app/finders/pipelines_finder.rb index aa0210fa7f2..c01a1a73666 100644 --- a/app/finders/pipelines_finder.rb +++ b/app/finders/pipelines_finder.rb @@ -81,7 +81,7 @@ class PipelinesFinder def by_username(items) if params[:username].present? - items.joins(:user).where("users.name = ?", params[:username]) + items.joins(:user).where("users.username = ?", params[:username]) else items end -- cgit v1.2.1 From 175800299bf497591e625e82fd71420644c0bc6b Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Wed, 8 Mar 2017 20:24:00 +0900 Subject: Add name(User) --- app/finders/pipelines_finder.rb | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'app') diff --git a/app/finders/pipelines_finder.rb b/app/finders/pipelines_finder.rb index c01a1a73666..10c8f5e0b2e 100644 --- a/app/finders/pipelines_finder.rb +++ b/app/finders/pipelines_finder.rb @@ -79,6 +79,14 @@ class PipelinesFinder end end + def by_name(items) + if params[:name].present? + items.joins(:user).where("users.name = ?", params[:name]) + else + items + end + end + def by_username(items) if params[:username].present? items.joins(:user).where("users.username = ?", params[:username]) -- cgit v1.2.1 From 284cf0bfb5d56dd847e48b74b6ae6c2627e164d1 Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Wed, 8 Mar 2017 21:05:33 +0900 Subject: Add name. Improve order_and_sort. --- app/finders/pipelines_finder.rb | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'app') diff --git a/app/finders/pipelines_finder.rb b/app/finders/pipelines_finder.rb index 10c8f5e0b2e..f6532377374 100644 --- a/app/finders/pipelines_finder.rb +++ b/app/finders/pipelines_finder.rb @@ -12,6 +12,7 @@ class PipelinesFinder items = by_scope(items) items = by_status(items) items = by_ref(items) + items = by_name(items) items = by_username(items) items = by_yaml_errors(items) order_and_sort(items) @@ -107,12 +108,16 @@ class PipelinesFinder end def order_and_sort(items) - if params[:order_by].present? && params[:sort].present? && - items.column_names.include?(params[:order_by]) && - params[:sort] =~ /\A(ASC|DESC)\z/i - items.reorder(params[:order_by] => params[:sort]) - else - items.reorder(id: :desc) - end + order_by = if params[:order_by].present? && items.column_names.include?(params[:order_by]) + params[:order_by] + else + :id + end + sort = if params[:sort].present? && params[:sort] =~ /\A(ASC|DESC)\z/i + params[:sort] + else + :desc + end + items.reorder(order_by => sort) end end -- cgit v1.2.1 From d74a04c499d511d6fec8d1f0ddcfc087596b9224 Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Tue, 14 Mar 2017 23:47:06 +0900 Subject: Avoid hardcode table name --- app/finders/pipelines_finder.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/finders/pipelines_finder.rb b/app/finders/pipelines_finder.rb index f6532377374..5e50eb46c7e 100644 --- a/app/finders/pipelines_finder.rb +++ b/app/finders/pipelines_finder.rb @@ -82,7 +82,7 @@ class PipelinesFinder def by_name(items) if params[:name].present? - items.joins(:user).where("users.name = ?", params[:name]) + items.joins(:user).where(users: { name: params[:name] }) else items end @@ -90,7 +90,7 @@ class PipelinesFinder def by_username(items) if params[:username].present? - items.joins(:user).where("users.username = ?", params[:username]) + items.joins(:user).where(users: { username: params[:username] }) else items end -- cgit v1.2.1 From 3735b8aaa1f48ea3803e31e18f1e40d2fd091b26 Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Fri, 17 Mar 2017 18:27:11 +0900 Subject: Allow only indexed columns in #order_and_sort. Remove present (Because unnecessary) from condition. Added spec just in case. --- app/finders/pipelines_finder.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/finders/pipelines_finder.rb b/app/finders/pipelines_finder.rb index 5e50eb46c7e..6a92aedc873 100644 --- a/app/finders/pipelines_finder.rb +++ b/app/finders/pipelines_finder.rb @@ -108,12 +108,12 @@ class PipelinesFinder end def order_and_sort(items) - order_by = if params[:order_by].present? && items.column_names.include?(params[:order_by]) + order_by = if %w[id status ref user_id].include?(params[:order_by]) # Allow only indexed columns params[:order_by] else :id end - sort = if params[:sort].present? && params[:sort] =~ /\A(ASC|DESC)\z/i + sort = if params[:sort] =~ /\A(ASC|DESC)\z/i params[:sort] else :desc -- cgit v1.2.1 From 7fb3a78a6d23b1fe0b14fab30e1fac4ec8d27d85 Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Fri, 17 Mar 2017 22:34:38 +0900 Subject: Fix improper method name and spec description --- app/finders/pipelines_finder.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/finders/pipelines_finder.rb b/app/finders/pipelines_finder.rb index 6a92aedc873..0c91c136a8f 100644 --- a/app/finders/pipelines_finder.rb +++ b/app/finders/pipelines_finder.rb @@ -15,7 +15,7 @@ class PipelinesFinder items = by_name(items) items = by_username(items) items = by_yaml_errors(items) - order_and_sort(items) + sort_items(items) end private @@ -107,7 +107,7 @@ class PipelinesFinder end end - def order_and_sort(items) + def sort_items(items) order_by = if %w[id status ref user_id].include?(params[:order_by]) # Allow only indexed columns params[:order_by] else -- cgit v1.2.1 From 98ac988d4d9525b3f07a19e495a9c2666ebee3c6 Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Sun, 19 Mar 2017 02:50:42 +0900 Subject: Use order instead of reorder. Improve tests. --- app/finders/pipelines_finder.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/finders/pipelines_finder.rb b/app/finders/pipelines_finder.rb index 0c91c136a8f..22507472e15 100644 --- a/app/finders/pipelines_finder.rb +++ b/app/finders/pipelines_finder.rb @@ -118,6 +118,6 @@ class PipelinesFinder else :desc end - items.reorder(order_by => sort) + items.order(order_by => sort) end end -- cgit v1.2.1 From 22a4d124f70598c7c21b08b11db3f38c7bcb71ec Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Wed, 22 Mar 2017 02:37:19 +0900 Subject: Use JSON type for sorting parameter (halfway) --- app/finders/pipelines_finder.rb | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) (limited to 'app') diff --git a/app/finders/pipelines_finder.rb b/app/finders/pipelines_finder.rb index 22507472e15..d56cf8fe790 100644 --- a/app/finders/pipelines_finder.rb +++ b/app/finders/pipelines_finder.rb @@ -108,16 +108,20 @@ class PipelinesFinder end def sort_items(items) - order_by = if %w[id status ref user_id].include?(params[:order_by]) # Allow only indexed columns - params[:order_by] - else - :id - end - sort = if params[:sort] =~ /\A(ASC|DESC)\z/i - params[:sort] - else - :desc - end - items.order(order_by => sort) + return items.order(id: :desc) unless params[:sort].present? + params[:sort].each do |s| + order_by = if %w[id status ref user_id].include?(s['order_by']) # Allow only indexed columns + s['order_by'] + else + :id + end + sort = if s['asc_desc'] =~ /\A(ASC|DESC)\z/i + s['asc_desc'] + else + :desc + end + items = items.order(order_by => sort) + end + items end end -- cgit v1.2.1 From 0e8266f2386351906e2d6357282e011d373b2c94 Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Fri, 24 Mar 2017 16:06:19 +0900 Subject: Revert "Use JSON type for sorting parameter (halfway)" This reverts commit 34127cb13ad72f65a24bdc8fc051363d3edd77cb. --- app/finders/pipelines_finder.rb | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) (limited to 'app') diff --git a/app/finders/pipelines_finder.rb b/app/finders/pipelines_finder.rb index d56cf8fe790..22507472e15 100644 --- a/app/finders/pipelines_finder.rb +++ b/app/finders/pipelines_finder.rb @@ -108,20 +108,16 @@ class PipelinesFinder end def sort_items(items) - return items.order(id: :desc) unless params[:sort].present? - params[:sort].each do |s| - order_by = if %w[id status ref user_id].include?(s['order_by']) # Allow only indexed columns - s['order_by'] - else - :id - end - sort = if s['asc_desc'] =~ /\A(ASC|DESC)\z/i - s['asc_desc'] - else - :desc - end - items = items.order(order_by => sort) - end - items + order_by = if %w[id status ref user_id].include?(params[:order_by]) # Allow only indexed columns + params[:order_by] + else + :id + end + sort = if params[:sort] =~ /\A(ASC|DESC)\z/i + params[:sort] + else + :desc + end + items.order(order_by => sort) end end -- cgit v1.2.1 From f7b5800a1dc6a2a59758aea502a2ddb8f103634b Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Mon, 27 Mar 2017 14:51:28 +0900 Subject: Add a blank line between blocks --- app/finders/pipelines_finder.rb | 2 ++ 1 file changed, 2 insertions(+) (limited to 'app') diff --git a/app/finders/pipelines_finder.rb b/app/finders/pipelines_finder.rb index 22507472e15..7935878d1d5 100644 --- a/app/finders/pipelines_finder.rb +++ b/app/finders/pipelines_finder.rb @@ -113,11 +113,13 @@ class PipelinesFinder else :id end + sort = if params[:sort] =~ /\A(ASC|DESC)\z/i params[:sort] else :desc end + items.order(order_by => sort) end end -- cgit v1.2.1 From 0a36bfa994582b690a7935fed4c15d42b22bd0ed Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Thu, 30 Mar 2017 18:59:45 +0900 Subject: Use HasStatus::AVAILABLE_STATUSES instead of hard coding --- app/finders/pipelines_finder.rb | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) (limited to 'app') diff --git a/app/finders/pipelines_finder.rb b/app/finders/pipelines_finder.rb index 7935878d1d5..c6666802b7f 100644 --- a/app/finders/pipelines_finder.rb +++ b/app/finders/pipelines_finder.rb @@ -54,22 +54,9 @@ class PipelinesFinder end def by_status(items) - case params[:status] - when 'running' - items.running - when 'pending' - items.pending - when 'success' - items.success - when 'failed' - items.failed - when 'canceled' - items.canceled - when 'skipped' - items.skipped - else - items - end + return items unless HasStatus::AVAILABLE_STATUSES.include?(params[:status]) + + items.where(status: params[:status]) end def by_ref(items) -- cgit v1.2.1 From 8653c2dfc943b5536ab99155c8b950e30ba1f567 Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Thu, 30 Mar 2017 19:30:02 +0900 Subject: Add constant as ALLOWED_INDEXED_COLUMNS --- app/finders/pipelines_finder.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'app') diff --git a/app/finders/pipelines_finder.rb b/app/finders/pipelines_finder.rb index c6666802b7f..f187a3b61fe 100644 --- a/app/finders/pipelines_finder.rb +++ b/app/finders/pipelines_finder.rb @@ -1,6 +1,8 @@ class PipelinesFinder attr_reader :project, :pipelines, :params + ALLOWED_INDEXED_COLUMNS = %w[id status ref user_id].freeze + def initialize(project, params = {}) @project = project @pipelines = project.pipelines @@ -95,7 +97,7 @@ class PipelinesFinder end def sort_items(items) - order_by = if %w[id status ref user_id].include?(params[:order_by]) # Allow only indexed columns + order_by = if ALLOWED_INDEXED_COLUMNS.include?(params[:order_by]) params[:order_by] else :id -- cgit v1.2.1 From 9548942cef4483aa4b414762fffc3d4bc7669c32 Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Tue, 2 May 2017 20:11:34 +0200 Subject: Fix misaligned buttons in wiki pages --- app/assets/stylesheets/pages/wiki.scss | 1 - 1 file changed, 1 deletion(-) (limited to 'app') diff --git a/app/assets/stylesheets/pages/wiki.scss b/app/assets/stylesheets/pages/wiki.scss index 04ff2d52b91..b64b89485f7 100644 --- a/app/assets/stylesheets/pages/wiki.scss +++ b/app/assets/stylesheets/pages/wiki.scss @@ -71,7 +71,6 @@ .nav-controls { width: auto; min-width: 50%; - white-space: nowrap; } } -- cgit v1.2.1 From 4f7811b7381f8475aef58101004238870f2fbcb9 Mon Sep 17 00:00:00 2001 From: Douwe Maan Date: Tue, 2 May 2017 17:46:24 -0500 Subject: Extract common parts of snippet and blob pages into partial --- app/views/projects/blob/_header.html.haml | 11 +---------- app/views/projects/blob/_header_content.html.haml | 10 ++++++++++ app/views/shared/snippets/_blob.html.haml | 11 +---------- 3 files changed, 12 insertions(+), 20 deletions(-) create mode 100644 app/views/projects/blob/_header_content.html.haml (limited to 'app') diff --git a/app/views/projects/blob/_header.html.haml b/app/views/projects/blob/_header.html.haml index 219dc14645b..cd098acda81 100644 --- a/app/views/projects/blob/_header.html.haml +++ b/app/views/projects/blob/_header.html.haml @@ -1,15 +1,6 @@ - blame = local_assigns.fetch(:blame, false) .js-file-title.file-title-flex-parent - .file-header-content - = blob_icon blob.mode, blob.name - - %strong.file-title-name - = blob.name - - = copy_file_path_button(blob.path) - - %small - = number_to_human_size(blob.raw_size) + = render 'projects/blob/header_content', blob: blob .file-actions.hidden-xs = render 'projects/blob/viewer_switcher', blob: blob unless blame diff --git a/app/views/projects/blob/_header_content.html.haml b/app/views/projects/blob/_header_content.html.haml new file mode 100644 index 00000000000..98bedae650a --- /dev/null +++ b/app/views/projects/blob/_header_content.html.haml @@ -0,0 +1,10 @@ +.file-header-content + = blob_icon blob.mode, blob.name + + %strong.file-title-name + = blob.name + + = copy_file_path_button(blob.path) + + %small + = number_to_human_size(blob.raw_size) diff --git a/app/views/shared/snippets/_blob.html.haml b/app/views/shared/snippets/_blob.html.haml index 9bcb4544b97..11f0fa7c49f 100644 --- a/app/views/shared/snippets/_blob.html.haml +++ b/app/views/shared/snippets/_blob.html.haml @@ -1,15 +1,6 @@ - blob = @snippet.blob .js-file-title.file-title-flex-parent - .file-header-content - = blob_icon blob.mode, blob.path - - %strong.file-title-name - = blob.path - - = copy_file_path_button(blob.path) - - %small - = number_to_human_size(blob.raw_size) + = render 'projects/blob/header_content', blob: blob .file-actions.hidden-xs = render 'projects/blob/viewer_switcher', blob: blob -- cgit v1.2.1 From d02e7226c47db88549f54d0fed0e2b33a726908d Mon Sep 17 00:00:00 2001 From: Mark Fletcher Date: Mon, 1 May 2017 13:22:11 +0800 Subject: Detect already enabled DeployKeys in EnableDeployKeyService Ensures deploy keys can't be re-added, which causes a validation error --- app/services/projects/enable_deploy_key_service.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'app') diff --git a/app/services/projects/enable_deploy_key_service.rb b/app/services/projects/enable_deploy_key_service.rb index 3cf4264ce9b..121385afca3 100644 --- a/app/services/projects/enable_deploy_key_service.rb +++ b/app/services/projects/enable_deploy_key_service.rb @@ -4,7 +4,10 @@ module Projects key = accessible_keys.find_by(id: params[:key_id] || params[:id]) return unless key - project.deploy_keys << key + unless project.deploy_keys.include?(key) + project.deploy_keys << key + end + key end -- cgit v1.2.1 From c99075e0d30560d347423a6de7b5f45e9ab73f3a Mon Sep 17 00:00:00 2001 From: Mark Fletcher Date: Mon, 1 May 2017 13:57:58 +0800 Subject: Fix label creation from issuable for subgroup projects --- app/views/shared/issuable/_sidebar.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/views/shared/issuable/_sidebar.html.haml b/app/views/shared/issuable/_sidebar.html.haml index 2e0d6a129fb..4150ec374d7 100644 --- a/app/views/shared/issuable/_sidebar.html.haml +++ b/app/views/shared/issuable/_sidebar.html.haml @@ -136,7 +136,7 @@ - selected_labels.each do |label| = hidden_field_tag "#{issuable.to_ability_name}[label_names][]", label.id, id: nil .dropdown - %button.dropdown-menu-toggle.js-label-select.js-multiselect.js-label-sidebar-dropdown{ type: "button", data: {toggle: "dropdown", default_label: "Labels", field_name: "#{issuable.to_ability_name}[label_names][]", ability_name: issuable.to_ability_name, show_no: "true", show_any: "true", namespace_path: @project.try(:namespace).try(:path), project_path: @project.try(:path), issue_update: issuable_json_path(issuable), labels: (namespace_project_labels_path(@project.namespace, @project, :json) if @project) } } + %button.dropdown-menu-toggle.js-label-select.js-multiselect.js-label-sidebar-dropdown{ type: "button", data: {toggle: "dropdown", default_label: "Labels", field_name: "#{issuable.to_ability_name}[label_names][]", ability_name: issuable.to_ability_name, show_no: "true", show_any: "true", namespace_path: @project.try(:namespace).try(:full_path), project_path: @project.try(:path), issue_update: issuable_json_path(issuable), labels: (namespace_project_labels_path(@project.namespace, @project, :json) if @project) } } %span.dropdown-toggle-text{ class: ("is-default" if selected_labels.empty?) } = multi_label_name(selected_labels, "Labels") = icon('chevron-down', 'aria-hidden': 'true') -- cgit v1.2.1 From d6da528b458942cf66b18b834840e0a6dbba0fc9 Mon Sep 17 00:00:00 2001 From: Mark Fletcher Date: Mon, 1 May 2017 14:25:52 +0800 Subject: Note Ghost user and refer to user deletion documentation + Add a partial for displaying user deletion guidance --- app/views/admin/users/show.html.haml | 6 +----- app/views/profiles/accounts/show.html.haml | 6 +----- app/views/users/_deletion_guidance.html.haml | 10 ++++++++++ 3 files changed, 12 insertions(+), 10 deletions(-) create mode 100644 app/views/users/_deletion_guidance.html.haml (limited to 'app') diff --git a/app/views/admin/users/show.html.haml b/app/views/admin/users/show.html.haml index 840d843f069..89d0bbb7126 100644 --- a/app/views/admin/users/show.html.haml +++ b/app/views/admin/users/show.html.haml @@ -175,11 +175,7 @@ .panel-body - if @user.can_be_removed? && can?(current_user, :destroy_user, @user) %p Deleting a user has the following effects: - %ul - %li All user content like authored issues, snippets, comments will be removed - - rp = @user.personal_projects.count - - unless rp.zero? - %li #{pluralize rp, 'personal project'} will be removed and cannot be restored + = render 'users/deletion_guidance', user: @user %br = link_to 'Remove user', [:admin, @user], data: { confirm: "USER #{@user.name} WILL BE REMOVED! Are you sure?" }, method: :delete, class: "btn btn-remove" - else diff --git a/app/views/profiles/accounts/show.html.haml b/app/views/profiles/accounts/show.html.haml index d843cacd52d..73f33e69d68 100644 --- a/app/views/profiles/accounts/show.html.haml +++ b/app/views/profiles/accounts/show.html.haml @@ -118,11 +118,7 @@ - if @user.can_be_removed? && can?(current_user, :destroy_user, @user) %p Deleting an account has the following effects: - %ul - %li All user content like authored issues, snippets, comments will be removed - - rp = current_user.personal_projects.count - - unless rp.zero? - %li #{pluralize rp, 'personal project'} will be removed and cannot be restored + = render 'users/deletion_guidance', user: current_user = link_to 'Delete account', user_registration_path, data: { confirm: "REMOVE #{current_user.name}? Are you sure?" }, method: :delete, class: "btn btn-remove" - else - if @user.solo_owned_groups.present? diff --git a/app/views/users/_deletion_guidance.html.haml b/app/views/users/_deletion_guidance.html.haml new file mode 100644 index 00000000000..0545cab538c --- /dev/null +++ b/app/views/users/_deletion_guidance.html.haml @@ -0,0 +1,10 @@ +- user = local_assigns.fetch(:user) + +%ul + %li + %p + Certain user content will be moved to a system-wide "Ghost User" in order to maintain content for posterity. For further information, please refer to the + = link_to 'user account deletion documentation.', help_page_path("user/profile/account/delete_account", anchor: "associated-records") + - personal_projects_count = user.personal_projects.count + - unless personal_projects_count.zero? + %li #{pluralize(personal_projects_count, 'personal project')} will be removed and cannot be restored -- cgit v1.2.1