diff options
author | Stan Hu <stanhu@gmail.com> | 2018-07-13 01:03:45 +0300 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2018-07-13 01:03:45 +0300 |
commit | fd2c27ac557e295765bf1c99b416a72ffdd71359 (patch) | |
tree | c023360af0a7f0e585959f00ae1e758e232acc14 /app | |
parent | 2d3fd6a142d286bb7d6355ed3601e618bc246112 (diff) | |
parent | 226d4d0eaa09a035ccb4cd8e83f92ffd9af9b40c (diff) |
Merge branch 'master' into sh-support-bitbucket-server-import
Diffstat (limited to 'app')
18 files changed, 70 insertions, 148 deletions
diff --git a/app/assets/javascripts/diffs/components/app.vue b/app/assets/javascripts/diffs/components/app.vue index 0327fceb38d..1d1415fe6ca 100644 --- a/app/assets/javascripts/diffs/components/app.vue +++ b/app/assets/javascripts/diffs/components/app.vue @@ -41,11 +41,6 @@ export default { required: true, }, }, - data() { - return { - activeFile: '', - }; - }, computed: { ...mapState({ isLoading: state => state.diffs.isLoading, @@ -126,14 +121,6 @@ export default { eventHub.$emit('fetchNotesData'); } }, - setActive(filePath) { - this.activeFile = filePath; - }, - unsetActive(filePath) { - if (this.activeFile === filePath) { - this.activeFile = ''; - } - }, adjustView() { if (this.shouldShow && this.isParallelView) { window.mrTabs.expandViewContainer(); @@ -195,7 +182,6 @@ export default { <changed-files :diff-files="diffFiles" - :active-file="activeFile" /> <div @@ -207,8 +193,6 @@ export default { :key="file.newPath" :file="file" :current-user="currentUser" - @setActive="setActive(file.filePath)" - @unsetActive="unsetActive(file.filePath)" /> </div> <no-changes v-else /> diff --git a/app/assets/javascripts/diffs/components/changed_files.vue b/app/assets/javascripts/diffs/components/changed_files.vue index 9d29357d800..97751db1254 100644 --- a/app/assets/javascripts/diffs/components/changed_files.vue +++ b/app/assets/javascripts/diffs/components/changed_files.vue @@ -16,13 +16,6 @@ export default { ClipboardButton, }, mixins: [changedFilesMixin], - props: { - activeFile: { - type: String, - required: false, - default: '', - }, - }, data() { return { isStuck: false, @@ -70,7 +63,7 @@ export default { pluralize, handleScroll() { if (!this.updating) { - requestAnimationFrame(this.updateIsStuck); + this.$nextTick(this.updateIsStuck); this.updating = true; } }, @@ -148,25 +141,8 @@ export default { /> <span - v-show="activeFile" - class="prepend-left-5" - > - <strong class="prepend-right-5"> - {{ truncatedDiffPath(activeFile) }} - </strong> - <clipboard-button - :text="activeFile" - :title="s__('Copy file name to clipboard')" - tooltip-placement="bottom" - tooltip-container="body" - class="btn btn-default btn-transparent btn-clipboard" - /> - </span> - - <span - v-show="!isStuck" - id="diff-stats" - class="diff-stats-additions-deletions-expanded" + class="js-diff-stats-additions-deletions-expanded + diff-stats-additions-deletions-expanded" > with <strong class="cgreen"> @@ -177,6 +153,17 @@ export default { {{ pluralize(`${sumRemovedLines} deletion`, sumRemovedLines) }} </strong> </span> + <div + class="js-diff-stats-additions-deletions-collapsed + diff-stats-additions-deletions-collapsed float-right d-sm-none" + > + <strong class="cgreen"> + +{{ sumAddedLines }} + </strong> + <strong class="cred"> + -{{ sumRemovedLines }} + </strong> + </div> </div> </div> </div> diff --git a/app/assets/javascripts/diffs/components/changed_files_dropdown.vue b/app/assets/javascripts/diffs/components/changed_files_dropdown.vue index b38d217fbe3..045688a32bf 100644 --- a/app/assets/javascripts/diffs/components/changed_files_dropdown.vue +++ b/app/assets/javascripts/diffs/components/changed_files_dropdown.vue @@ -40,7 +40,7 @@ export default { {{ n__('%d changed file', '%d changed files', diffFiles.length) }} </span> <icon - :size="8" + class="caret-icon" name="chevron-down" /> </button> diff --git a/app/assets/javascripts/diffs/components/diff_file.vue b/app/assets/javascripts/diffs/components/diff_file.vue index a61e368249a..944084f05c9 100644 --- a/app/assets/javascripts/diffs/components/diff_file.vue +++ b/app/assets/javascripts/diffs/components/diff_file.vue @@ -25,7 +25,6 @@ export default { }, data() { return { - isActive: false, isLoadingCollapsedDiff: false, forkMessageVisible: false, }; @@ -48,12 +47,6 @@ export default { return this.isCollapsed && !this.isLoadingCollapsedDiff && !this.file.tooLarge; }, }, - mounted() { - document.addEventListener('scroll', this.handleScroll); - }, - beforeDestroy() { - document.removeEventListener('scroll', this.handleScroll); - }, methods: { ...mapActions('diffs', ['loadCollapsedDiff']), handleToggle() { @@ -65,36 +58,6 @@ export default { this.file.collapsed = !this.file.collapsed; } }, - handleScroll() { - if (!this.updating) { - requestAnimationFrame(this.scrollUpdate.bind(this)); - this.updating = true; - } - }, - scrollUpdate() { - const header = document.querySelector('.js-diff-files-changed'); - if (!header) { - this.updating = false; - return; - } - - const { top, bottom } = this.$el.getBoundingClientRect(); - const { top: topOfFixedHeader, bottom: bottomOfFixedHeader } = header.getBoundingClientRect(); - - const headerOverlapsContent = top < topOfFixedHeader && bottom > bottomOfFixedHeader; - const fullyAboveHeader = bottom < bottomOfFixedHeader; - const fullyBelowHeader = top > topOfFixedHeader; - - if (headerOverlapsContent && !this.isActive) { - this.$emit('setActive'); - this.isActive = true; - } else if (this.isActive && (fullyAboveHeader || fullyBelowHeader)) { - this.$emit('unsetActive'); - this.isActive = false; - } - - this.updating = false; - }, handleLoadCollapsedDiff() { this.isLoadingCollapsedDiff = true; diff --git a/app/assets/javascripts/ide/stores/modules/merge_requests/actions.js b/app/assets/javascripts/ide/stores/modules/merge_requests/actions.js index cdd8076952f..6ef938b0ae2 100644 --- a/app/assets/javascripts/ide/stores/modules/merge_requests/actions.js +++ b/app/assets/javascripts/ide/stores/modules/merge_requests/actions.js @@ -31,7 +31,7 @@ export const fetchMergeRequests = ({ dispatch, state: { state } }, { type, searc dispatch('requestMergeRequests', type); dispatch('resetMergeRequests', type); - Api.mergeRequests({ scope, state, search }) + return Api.mergeRequests({ scope, state, search }) .then(({ data }) => dispatch('receiveMergeRequestsSuccess', { type, data })) .catch(() => dispatch('receiveMergeRequestsError', { type, search })); }; diff --git a/app/assets/javascripts/ide/stores/modules/pipelines/actions.js b/app/assets/javascripts/ide/stores/modules/pipelines/actions.js index 8cb01f25223..3e67b222e66 100644 --- a/app/assets/javascripts/ide/stores/modules/pipelines/actions.js +++ b/app/assets/javascripts/ide/stores/modules/pipelines/actions.js @@ -102,7 +102,7 @@ export const receiveJobsSuccess = ({ commit }, { id, data }) => export const fetchJobs = ({ dispatch }, stage) => { dispatch('requestJobs', stage.id); - axios + return axios .get(stage.dropdownPath) .then(({ data }) => dispatch('receiveJobsSuccess', { id: stage.id, data })) .catch(() => dispatch('receiveJobsError', stage)); diff --git a/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_status_icon.vue b/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_status_icon.vue index 55b87f3a8ec..9aff95dcfec 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_status_icon.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_status_icon.vue @@ -32,7 +32,7 @@ }; </script> <template> - <div class="space-children d-flex append-right-10"> + <div class="space-children d-flex append-right-10 widget-status-icon"> <div v-if="isLoading" class="mr-widget-icon" diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue index fe777a07189..a5ca7b719a1 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue @@ -233,7 +233,7 @@ export default { <status-icon :status="iconClass" /> <div class="media-body"> <div class="mr-widget-body-controls media space-children"> - <span class="btn-group append-bottom-5"> + <span class="btn-group"> <button :disabled="isMergeButtonDisabled" :class="mergeButtonClass" diff --git a/app/assets/stylesheets/pages/diff.scss b/app/assets/stylesheets/pages/diff.scss index 7e89f8998fb..5e39bbb9890 100644 --- a/app/assets/stylesheets/pages/diff.scss +++ b/app/assets/stylesheets/pages/diff.scss @@ -518,6 +518,12 @@ outline: none; color: $gl-link-hover-color; } + + .caret-icon { + position: relative; + top: 2px; + left: -1px; + } } // Mobile diff --git a/app/assets/stylesheets/pages/merge_requests.scss b/app/assets/stylesheets/pages/merge_requests.scss index 2af79c511ba..5835b8b8c9b 100644 --- a/app/assets/stylesheets/pages/merge_requests.scss +++ b/app/assets/stylesheets/pages/merge_requests.scss @@ -214,6 +214,10 @@ } } + .widget-status-icon { + align-self: flex-start; + } + .mr-widget-body { line-height: 28px; diff --git a/app/models/notification_setting.rb b/app/models/notification_setting.rb index 9195408551f..1933c46ee44 100644 --- a/app/models/notification_setting.rb +++ b/app/models/notification_setting.rb @@ -32,6 +32,7 @@ class NotificationSetting < ActiveRecord::Base :reopen_issue, :close_issue, :reassign_issue, + :issue_due, :new_merge_request, :push_to_merge_request, :reopen_merge_request, diff --git a/app/services/metrics_service.rb b/app/services/metrics_service.rb index 51ff9eff5e4..c237d2ae8c9 100644 --- a/app/services/metrics_service.rb +++ b/app/services/metrics_service.rb @@ -1,35 +1,16 @@ require 'prometheus/client/formats/text' class MetricsService - CHECKS = [ - Gitlab::HealthChecks::DbCheck, - Gitlab::HealthChecks::Redis::RedisCheck, - Gitlab::HealthChecks::Redis::CacheCheck, - Gitlab::HealthChecks::Redis::QueuesCheck, - Gitlab::HealthChecks::Redis::SharedStateCheck, - Gitlab::HealthChecks::GitalyCheck - ].freeze - def prometheus_metrics_text Prometheus::Client::Formats::Text.marshal_multiprocess(multiprocess_metrics_path) end - def health_metrics_text - metrics = CHECKS.flat_map(&:metrics) - - formatter.marshal(metrics) - end - def metrics_text - prometheus_metrics_text.concat(health_metrics_text) + prometheus_metrics_text end private - def formatter - @formatter ||= Gitlab::HealthChecks::PrometheusTextFormat.new - end - def multiprocess_metrics_path ::Prometheus::Client.configuration.multiprocess_files_dir end diff --git a/app/views/admin/groups/_form.html.haml b/app/views/admin/groups/_form.html.haml index c8008771236..a3773e90cfb 100644 --- a/app/views/admin/groups/_form.html.haml +++ b/app/views/admin/groups/_form.html.haml @@ -6,7 +6,7 @@ = render_if_exists 'admin/namespace_plan', f: f .form-group.row.group-description-holder - = f.label :avatar, "Group avatar", class: 'col-form-label col-sm-2' + = f.label :avatar, _("Group avatar"), class: 'col-form-label col-sm-2' .col-sm-10 = render 'shared/choose_group_avatar_button', f: f @@ -26,12 +26,12 @@ .alert.alert-info = render 'shared/group_tips' .form-actions - = f.submit 'Create group', class: "btn btn-create" - = link_to 'Cancel', admin_groups_path, class: "btn btn-cancel" + = f.submit _('Create group'), class: "btn btn-create" + = link_to _('Cancel'), admin_groups_path, class: "btn btn-cancel" - else .form-actions - = f.submit 'Save changes', class: "btn btn-save" - = link_to 'Cancel', admin_group_path(@group), class: "btn btn-cancel" + = f.submit _('Save changes'), class: "btn btn-save" + = link_to _('Cancel'), admin_group_path(@group), class: "btn btn-cancel" = render_if_exists 'ldap_group_links/ldap_syncrhonizations', group: @group diff --git a/app/views/admin/groups/_group.html.haml b/app/views/admin/groups/_group.html.haml index 3f96988c203..0a688b90f3a 100644 --- a/app/views/admin/groups/_group.html.haml +++ b/app/views/admin/groups/_group.html.haml @@ -3,8 +3,8 @@ %li.group-row{ class: css_class } .controls - = link_to 'Edit', admin_group_edit_path(group), id: "edit_#{dom_id(group)}", class: 'btn' - = link_to 'Delete', [:admin, group], data: { confirm: "Are you sure you want to remove #{group.name}?" }, method: :delete, class: 'btn btn-remove' + = link_to _('Edit'), admin_group_edit_path(group), id: "edit_#{dom_id(group)}", class: 'btn' + = link_to _('Delete'), [:admin, group], data: { confirm: _("Are you sure you want to remove %{group_name}?") % { group_name: group.name } }, method: :delete, class: 'btn btn-remove' .stats %span.badge.badge-pill = storage_counter(group.storage_size) diff --git a/app/views/admin/groups/edit.html.haml b/app/views/admin/groups/edit.html.haml index c2b9807015d..8e9e1a58a17 100644 --- a/app/views/admin/groups/edit.html.haml +++ b/app/views/admin/groups/edit.html.haml @@ -1,4 +1,4 @@ -- page_title "Edit", @group.name, "Groups" -%h3.page-title Edit group: #{@group.name} +- page_title _("Edit"), @group.name, _("Groups") +%h3.page-title= _('Edit group: %{group_name}') % { group_name: @group.name } %hr = render 'form', visibility_level: @group.visibility_level diff --git a/app/views/admin/groups/index.html.haml b/app/views/admin/groups/index.html.haml index 25946ba6eaf..6a9b85b4109 100644 --- a/app/views/admin/groups/index.html.haml +++ b/app/views/admin/groups/index.html.haml @@ -1,5 +1,5 @@ - @no_container = true -- page_title "Groups" +- page_title _("Groups") %div{ class: container_class } .top-area @@ -13,7 +13,7 @@ = icon("search", class: "search-icon") = render "shared/groups/dropdown", options_hash: admin_groups_sort_options_hash = link_to new_admin_group_path, class: "btn btn-new" do - New group + = _('New group') %ul.content-list = render @groups diff --git a/app/views/admin/groups/new.html.haml b/app/views/admin/groups/new.html.haml index 8f9fe96249f..553e8638e52 100644 --- a/app/views/admin/groups/new.html.haml +++ b/app/views/admin/groups/new.html.haml @@ -1,4 +1,4 @@ -- page_title "New Group" -%h3.page-title New group +- page_title _("New Group") +%h3.page-title= _('New group') %hr = render 'form', visibility_level: default_group_visibility diff --git a/app/views/admin/groups/show.html.haml b/app/views/admin/groups/show.html.haml index a40f98ad24f..72b068ea6b5 100644 --- a/app/views/admin/groups/show.html.haml +++ b/app/views/admin/groups/show.html.haml @@ -1,61 +1,58 @@ -- add_to_breadcrumbs "Groups", admin_groups_path +- add_to_breadcrumbs _("Groups"), admin_groups_path - breadcrumb_title @group.name -- page_title @group.name, "Groups" +- page_title @group.name, _("Groups") %h3.page-title - Group: #{@group.full_name} + = _('Group: %{group_name}') % { group_name: @group.full_name } = link_to admin_group_edit_path(@group), class: "btn float-right" do %i.fa.fa-pencil-square-o - Edit + = _('Edit') %hr .row .col-md-6 .card .card-header - Group info: + = _('Group info:') %ul.content-list %li .avatar-container.s60 = group_icon(@group, class: "avatar s60") %li - %span.light Name: + %span.light= _('Name:') %strong= @group.name %li - %span.light Path: + %span.light= _('Path:') %strong = @group.path %li - %span.light Description: + %span.light= _('Description:') %strong = @group.description %li - %span.light Visibility level: + %span.light= _('Visibility level:') %strong = visibility_level_label(@group.visibility_level) %li - %span.light Created on: + %span.light= _('Created on:') %strong = @group.created_at.to_s(:medium) = render_if_exists 'admin/namespace_plan_info', namespace: @group %li - %span.light Storage: - %strong= storage_counter(@group.storage_size) - ( - = storage_counter(@group.repository_size) - repositories, - = storage_counter(@group.build_artifacts_size) - build artifacts, - = storage_counter(@group.lfs_objects_size) - LFS - ) + %span.light= _('Storage:') + - counter_storage = storage_counter(@group.storage_size) + - counter_repositories = storage_counter(@group.repository_size) + - counter_build_artifacts = storage_counter(@group.build_artifacts_size) + - counter_lfs_objects = storage_counter(@group.lfs_objects_size) + %strong + = _("%{counter_storage} (%{counter_repositories} repositories, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS)") % { counter_storage: counter_storage, counter_repositories: counter_repositories, counter_build_artifacts: counter_build_artifacts, counter_lfs_objects: counter_lfs_objects } %li - %span.light Group Git LFS status: + %span.light= _('Group Git LFS status:') %strong = group_lfs_status(@group) = link_to icon('question-circle'), help_page_path('workflow/lfs/manage_large_binaries_with_git_lfs') @@ -67,7 +64,7 @@ .card .card-header %h3.card-title - Projects + = _('Projects') %span.badge.badge-pill #{@group.projects.count} %ul.content-list @@ -85,7 +82,7 @@ - if @group.shared_projects.any? .card .card-header - Projects shared with #{@group.name} + = _('Projects shared with %{group_name}') % { group_name: @group.name } %span.badge.badge-pill #{@group.shared_projects.count} %ul.content-list @@ -102,11 +99,11 @@ - if can?(current_user, :admin_group_member, @group) .card .card-header - Add user(s) to the group: + = _('Add user(s) to the group:') .card-body.form-holder %p.light - Read more about project permissions - %strong= link_to "here", help_page_path("user/permissions"), class: "vlink" + - link_to_help = link_to(_("here"), help_page_path("user/permissions"), class: "vlink") + = _('Read more about project permissions <strong>%{link_to_help}</strong>').html_safe % { link_to_help: link_to_help } = form_tag admin_group_members_update_path(@group), id: "new_project_member", class: "bulk_import", method: :put do %div @@ -114,16 +111,15 @@ .prepend-top-10 = select_tag :access_level, options_for_select(GroupMember.access_level_roles), class: "project-access-select select2" %hr - = button_tag 'Add users to group', class: "btn btn-create" + = button_tag _('Add users to group'), class: "btn btn-create" = render 'shared/members/requests', membership_source: @group, requesters: @requesters, force_mobile_view: true .card .card-header - %strong= @group.name - group members + = _("<strong>%{group_name}</strong> group members").html_safe % { group_name: @group.name } %span.badge.badge-pill= @group.members.size .float-right - = link_to icon('pencil-square-o', text: 'Manage access'), polymorphic_url([@group, :members]), class: "btn btn-sm" + = link_to icon('pencil-square-o', text: _('Manage access')), polymorphic_url([@group, :members]), class: "btn btn-sm" %ul.content-list.group-users-list.content-list.members-list = render partial: 'shared/members/member', collection: @members, as: :member, locals: { show_controls: false } .card-footer |