diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-04-28 18:10:08 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-04-28 18:10:08 +0300 |
commit | f7f0c0502763777f48964774a87b0a34dfb1d9ab (patch) | |
tree | 777821671f0eba38eadd5f60da96a1e54870350a /app | |
parent | 10cb807543dca60b59a380100d1b70730d0e8b29 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app')
30 files changed, 212 insertions, 139 deletions
diff --git a/app/assets/javascripts/boards/components/project_select.vue b/app/assets/javascripts/boards/components/project_select.vue index 1412411c275..f1cc7ae7d75 100644 --- a/app/assets/javascripts/boards/components/project_select.vue +++ b/app/assets/javascripts/boards/components/project_select.vue @@ -91,6 +91,9 @@ export default { loadMoreProjects() { this.fetchGroupProjects({ search: this.searchTerm, fetchNext: true }); }, + setFocus() { + this.$refs.search.focusInput(); + }, }, }; </script> @@ -107,8 +110,10 @@ export default { block menu-class="gl-w-full!" :loading="initialLoading" + @shown="setFocus" > <gl-search-box-by-type + ref="search" v-model.trim="searchTerm" debounce="250" :placeholder="$options.i18n.searchPlaceholder" diff --git a/app/assets/javascripts/pages/projects/merge_requests/init_merge_request_show.js b/app/assets/javascripts/pages/projects/merge_requests/init_merge_request_show.js index 0e0c1475eda..ac32cf951f8 100644 --- a/app/assets/javascripts/pages/projects/merge_requests/init_merge_request_show.js +++ b/app/assets/javascripts/pages/projects/merge_requests/init_merge_request_show.js @@ -8,6 +8,7 @@ import createDefaultClient from '~/lib/graphql'; import initSourcegraph from '~/sourcegraph'; import ZenMode from '~/zen_mode'; import initAwardsApp from '~/emoji/awards_app'; +import MrWidgetHowToMergeModal from '~/vue_merge_request_widget/components/mr_widget_how_to_merge_modal.vue'; import getStateQuery from './queries/get_state.query.graphql'; export default function initMergeRequestShow() { @@ -39,4 +40,24 @@ export default function initMergeRequestShow() { }); }, }); + + const modalEl = document.getElementById('js-check-out-modal'); + + // eslint-disable-next-line no-new + new Vue({ + el: modalEl, + render(h) { + return h(MrWidgetHowToMergeModal, { + props: { + canMerge: modalEl.dataset.canMerge === 'true', + isFork: modalEl.dataset.isFork === 'true', + sourceBranch: modalEl.dataset.sourceBranch, + sourceProjectPath: modalEl.dataset.sourceProjectPath, + targetBranch: modalEl.dataset.targetBranch, + sourceProjectDefaultUrl: modalEl.dataset.sourceProjectDefaultUrl, + reviewingDocsPath: modalEl.dataset.reviewingDocsPath, + }, + }); + }, + }); } diff --git a/app/assets/javascripts/security_configuration/components/app.vue b/app/assets/javascripts/security_configuration/components/app.vue index 8184658716f..ff0e0ed0ab2 100644 --- a/app/assets/javascripts/security_configuration/components/app.vue +++ b/app/assets/javascripts/security_configuration/components/app.vue @@ -3,12 +3,12 @@ import { GlTab, GlTabs, GlSprintf, GlLink, GlAlert } from '@gitlab/ui'; import { __, s__ } from '~/locale'; import LocalStorageSync from '~/vue_shared/components/local_storage_sync.vue'; import UserCalloutDismisser from '~/vue_shared/components/user_callout_dismisser.vue'; +import SectionLayout from '~/vue_shared/security_configuration/components/section_layout.vue'; import AutoDevOpsAlert from './auto_dev_ops_alert.vue'; import AutoDevOpsEnabledAlert from './auto_dev_ops_enabled_alert.vue'; import { AUTO_DEVOPS_ENABLED_ALERT_DISMISSED_STORAGE_KEY } from './constants'; import FeatureCard from './feature_card.vue'; import TrainingProviderList from './training_provider_list.vue'; -import SectionLayout from './section_layout.vue'; import UpgradeBanner from './upgrade_banner.vue'; export const i18n = { @@ -173,7 +173,7 @@ export default { @dismiss="dismissAutoDevopsEnabledAlert" /> - <section-layout :heading="$options.i18n.securityTesting"> + <section-layout class="gl-border-b-0" :heading="$options.i18n.securityTesting"> <template #description> <p> <span data-testid="latest-pipeline-info-security"> diff --git a/app/assets/javascripts/security_configuration/components/section_layout.vue b/app/assets/javascripts/security_configuration/components/section_layout.vue deleted file mode 100644 index 1fe8dd862a0..00000000000 --- a/app/assets/javascripts/security_configuration/components/section_layout.vue +++ /dev/null @@ -1,23 +0,0 @@ -<script> -export default { - name: 'SectionLayout', - props: { - heading: { - type: String, - required: true, - }, - }, -}; -</script> - -<template> - <div class="row gl-line-height-20 gl-pt-6"> - <div class="col-lg-4"> - <h2 class="gl-font-size-h2 gl-mt-0">{{ heading }}</h2> - <slot name="description"></slot> - </div> - <div class="col-lg-8"> - <slot name="features"></slot> - </div> - </div> -</template> diff --git a/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_header.vue b/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_header.vue index 8cdaa3316ee..e1d88099580 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_header.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_header.vue @@ -1,9 +1,5 @@ <script> import { - GlButton, - GlDropdown, - GlDropdownSectionHeader, - GlDropdownItem, GlLink, GlTooltipDirective, GlModalDirective, @@ -14,8 +10,6 @@ import { constructWebIDEPath } from '~/lib/utils/url_utility'; import { s__ } from '~/locale'; import clipboardButton from '~/vue_shared/components/clipboard_button.vue'; import TooltipOnTruncate from '~/vue_shared/components/tooltip_on_truncate/tooltip_on_truncate.vue'; -import WebIdeLink from '~/vue_shared/components/web_ide_link.vue'; -import MrWidgetHowToMergeModal from './mr_widget_how_to_merge_modal.vue'; import MrWidgetIcon from './mr_widget_icon.vue'; export default { @@ -24,14 +18,8 @@ export default { clipboardButton, TooltipOnTruncate, MrWidgetIcon, - MrWidgetHowToMergeModal, - GlButton, - GlDropdown, - GlDropdownSectionHeader, - GlDropdownItem, GlLink, GlSprintf, - WebIdeLink, }, directives: { GlTooltip: GlTooltipDirective, @@ -107,71 +95,6 @@ export default { </gl-sprintf> </div> </div> - - <div class="branch-actions d-flex"> - <template v-if="mr.isOpen"> - <web-ide-link - v-if="!mr.sourceBranchRemoved" - :show-edit-button="false" - :show-web-ide-button="true" - :web-ide-url="webIdePath" - :web-ide-text="$options.i18n.webIdeText" - :show-gitpod-button="mr.showGitpodButton" - :gitpod-url="mr.gitpodUrl" - :gitpod-enabled="mr.gitpodEnabled" - :user-preferences-gitpod-path="mr.userPreferencesGitpodPath" - :user-profile-enable-gitpod-path="mr.userProfileEnableGitpodPath" - :gitpod-text="$options.i18n.gitpodText" - class="gl-display-none gl-md-display-inline-block gl-mr-3" - data-placement="bottom" - tabindex="0" - data-qa-selector="open_in_web_ide_button" - /> - <gl-button - v-gl-modal-directive="'modal-merge-info'" - :disabled="mr.sourceBranchRemoved" - class="js-check-out-branch gl-mr-3" - > - {{ s__('mrWidget|Check out branch') }} - </gl-button> - <mr-widget-how-to-merge-modal - :is-fork="isFork" - :can-merge="mr.canMerge" - :source-branch="mr.sourceBranch" - :source-project="mr.sourceProject" - :source-project-path="mr.sourceProjectFullPath" - :target-branch="mr.targetBranch" - :source-project-default-url="mr.sourceProjectDefaultUrl" - :reviewing-docs-path="mr.reviewingDocsPath" - /> - </template> - <gl-dropdown - v-gl-tooltip - :title="__('Download as')" - :aria-label="__('Download as')" - icon="download" - right - data-qa-selector="download_dropdown" - > - <gl-dropdown-section-header>{{ __('Download as') }}</gl-dropdown-section-header> - <gl-dropdown-item - :href="mr.emailPatchesPath" - class="js-download-email-patches" - download - data-qa-selector="download_email_patches_menu_item" - > - {{ s__('mrWidget|Email patches') }} - </gl-dropdown-item> - <gl-dropdown-item - :href="mr.plainDiffPath" - class="js-download-plain-diff" - download - data-qa-selector="download_plain_diff_menu_item" - > - {{ s__('mrWidget|Plain diff') }} - </gl-dropdown-item> - </gl-dropdown> - </div> </div> </div> </template> diff --git a/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_how_to_merge_modal.vue b/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_how_to_merge_modal.vue index e906b8c3b59..729782cd7a1 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_how_to_merge_modal.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_how_to_merge_modal.vue @@ -112,11 +112,17 @@ export default { return escapeShellString(this.sourceBranch); }, }, + mounted() { + document.querySelector('.js-check-out-modal-trigger')?.addEventListener('click', () => { + this.$refs.modal.show(); + }); + }, }; </script> <template> <gl-modal + ref="modal" modal-id="modal-merge-info" :no-enforce-focus="true" :title="$options.i18n.title" diff --git a/app/assets/javascripts/vue_shared/security_configuration/components/section_layout.vue b/app/assets/javascripts/vue_shared/security_configuration/components/section_layout.vue new file mode 100644 index 00000000000..6045d75ac11 --- /dev/null +++ b/app/assets/javascripts/vue_shared/security_configuration/components/section_layout.vue @@ -0,0 +1,34 @@ +<script> +import SectionLoader from './section_loader.vue'; + +export default { + name: 'SectionLayout', + components: { + SectionLoader, + }, + props: { + heading: { + type: String, + required: true, + }, + isLoading: { + type: Boolean, + required: false, + default: false, + }, + }, +}; +</script> + +<template> + <div class="row gl-m-0 gl-border-b gl-line-height-20 gl-py-6"> + <div class="col-lg-4 gl-pl-0 gl-pr-9"> + <h2 class="gl-font-size-h2 gl-mt-0">{{ heading }}</h2> + <slot name="description"></slot> + </div> + <div class="col-lg-8 gl-pr-0 gl-pl-0"> + <section-loader v-if="isLoading" /> + <slot v-else name="features"></slot> + </div> + </div> +</template> diff --git a/app/assets/javascripts/vue_shared/security_configuration/components/section_loader.vue b/app/assets/javascripts/vue_shared/security_configuration/components/section_loader.vue new file mode 100644 index 00000000000..b15e25b0943 --- /dev/null +++ b/app/assets/javascripts/vue_shared/security_configuration/components/section_loader.vue @@ -0,0 +1,35 @@ +<script> +import { GlCard, GlSkeletonLoader } from '@gitlab/ui'; + +export default { + name: 'SectionLoader', + components: { + GlCard, + GlSkeletonLoader, + }, +}; +</script> + +<template> + <div> + <gl-skeleton-loader :width="1248" :height="180"> + <rect x="0" y="0" width="100" height="15" rx="4" /> + <rect x="0" y="24" width="460" height="32" rx="4" /> + <rect x="0" y="71" width="100" height="15" rx="4" /> + <rect x="0" y="95" width="460" height="72" rx="4" /> + </gl-skeleton-loader> + <gl-card v-for="i in 2" :key="i" class="gl-mb-5"> + <template #header> + <gl-skeleton-loader :width="1248" :height="15"> + <rect x="0" y="0" width="300" height="15" rx="4" /> + </gl-skeleton-loader> + </template> + <gl-skeleton-loader :width="1248" :height="15"> + <rect x="0" y="0" width="600" height="15" rx="4" /> + </gl-skeleton-loader> + <gl-skeleton-loader :width="1248" :height="15"> + <rect x="0" y="0" width="300" height="15" rx="4" /> + </gl-skeleton-loader> + </gl-card> + </div> +</template> diff --git a/app/assets/stylesheets/framework/buttons.scss b/app/assets/stylesheets/framework/buttons.scss index 9cebd4f49a4..d349bf7a1d3 100644 --- a/app/assets/stylesheets/framework/buttons.scss +++ b/app/assets/stylesheets/framework/buttons.scss @@ -261,7 +261,7 @@ .btn-block { width: 100%; margin: 0; - margin-bottom: 15px; + @include gl-mb-5; &.btn { padding: 6px 0; diff --git a/app/assets/stylesheets/pages/login.scss b/app/assets/stylesheets/pages/login.scss index 4a3ec5992a5..7f0bdadd2bc 100644 --- a/app/assets/stylesheets/pages/login.scss +++ b/app/assets/stylesheets/pages/login.scss @@ -45,7 +45,6 @@ .omniauth-container { box-shadow: 0 0 0 1px $border-color; border-radius: $border-radius; - padding: 15px; .login-heading h3 { font-weight: $gl-font-weight-normal; diff --git a/app/assets/stylesheets/startup/startup-dark.scss b/app/assets/stylesheets/startup/startup-dark.scss index 0683123c778..87921051f1d 100644 --- a/app/assets/stylesheets/startup/startup-dark.scss +++ b/app/assets/stylesheets/startup/startup-dark.scss @@ -1865,6 +1865,7 @@ body.gl-dark } body.gl-dark .header-search { background-color: rgba(250, 250, 250, 0.2) !important; + border-radius: 4px; } body.gl-dark .header-search svg.gl-search-box-by-type-search-icon { color: rgba(250, 250, 250, 0.8); diff --git a/app/assets/stylesheets/startup/startup-signin.scss b/app/assets/stylesheets/startup/startup-signin.scss index de6b8e6e672..fe840f50f1e 100644 --- a/app/assets/stylesheets/startup/startup-signin.scss +++ b/app/assets/stylesheets/startup/startup-signin.scss @@ -138,9 +138,8 @@ hr { margin-right: -15px; margin-left: -15px; } +.col-md-6, .col-sm-12, -.col-sm-7, -.col-sm-5, .col { position: relative; width: 100%; @@ -159,14 +158,6 @@ hr { order: 12; } @media (min-width: 576px) { - .col-sm-5 { - flex: 0 0 41.6666666667%; - max-width: 41.6666666667%; - } - .col-sm-7 { - flex: 0 0 58.3333333333%; - max-width: 58.3333333333%; - } .col-sm-12 { flex: 0 0 100%; max-width: 100%; @@ -178,6 +169,12 @@ hr { order: 12; } } +@media (min-width: 768px) { + .col-md-6 { + flex: 0 0 50%; + max-width: 50%; + } +} .form-control { display: block; width: 100%; @@ -578,7 +575,6 @@ svg { .login-page .omniauth-container { box-shadow: 0 0 0 1px #dbdbdb; border-radius: 0.25rem; - padding: 15px; } .login-page .login-box .login-heading h3, .login-page .omniauth-container .login-heading h3 { diff --git a/app/assets/stylesheets/themes/theme_helper.scss b/app/assets/stylesheets/themes/theme_helper.scss index 07194e2b532..234010074aa 100644 --- a/app/assets/stylesheets/themes/theme_helper.scss +++ b/app/assets/stylesheets/themes/theme_helper.scss @@ -150,6 +150,7 @@ .header-search { background-color: rgba($search-and-nav-links, 0.2) !important; + border-radius: $border-radius-default; &:hover { background-color: rgba($search-and-nav-links, 0.3) !important; diff --git a/app/assets/stylesheets/themes/theme_light.scss b/app/assets/stylesheets/themes/theme_light.scss index 10e03fb885c..66b2b3c3437 100644 --- a/app/assets/stylesheets/themes/theme_light.scss +++ b/app/assets/stylesheets/themes/theme_light.scss @@ -48,6 +48,7 @@ body { .header-search { background-color: $white !important; box-shadow: inset 0 0 0 1px $border-color !important; + border-radius: $border-radius-default; &:hover { background-color: $white !important; diff --git a/app/controllers/dashboard/projects_controller.rb b/app/controllers/dashboard/projects_controller.rb index cc18ab86251..0e4592259d8 100644 --- a/app/controllers/dashboard/projects_controller.rb +++ b/app/controllers/dashboard/projects_controller.rb @@ -15,7 +15,7 @@ class Dashboard::ProjectsController < Dashboard::ApplicationController skip_cross_project_access_check :index, :starred feature_category :projects - urgency :low, [:starred] + urgency :low, [:starred, :index] def index respond_to do |format| diff --git a/app/controllers/projects/autocomplete_sources_controller.rb b/app/controllers/projects/autocomplete_sources_controller.rb index f678e19d05d..90e13a7ec1a 100644 --- a/app/controllers/projects/autocomplete_sources_controller.rb +++ b/app/controllers/projects/autocomplete_sources_controller.rb @@ -9,7 +9,7 @@ class Projects::AutocompleteSourcesController < Projects::ApplicationController feature_category :users, [:members] feature_category :snippets, [:snippets] - urgency :low, [:merge_requests] + urgency :low, [:merge_requests, :members] def members render json: ::Projects::ParticipantsService.new(@project, current_user).execute(target) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 61eb7f52a8d..e57bacbd903 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -59,7 +59,8 @@ class ProjectsController < Projects::ApplicationController urgency :low, [:export, :remove_export, :generate_new_export, :download_export] # TODO: Set high urgency for #show https://gitlab.com/gitlab-org/gitlab/-/issues/334444 - urgency :low, [:refs, :show, :toggle_star, :transfer, :archive, :destroy, :update] + urgency :low, [:refs, :show, :toggle_star, :transfer, :archive, :destroy, :update, :activity, + :edit, :new, :export, :remove_export, :generate_new_export, :download_export] urgency :high, [:unfoldered_environment_names] def index diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index e5091a23268..4b239ed9a56 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -34,7 +34,8 @@ class UsersController < ApplicationController feature_category :snippets, [:snippets] # TODO: Set higher urgency after resolving https://gitlab.com/gitlab-org/gitlab/-/issues/357914 - urgency :low, [:show, :calendar_activities] + urgency :low, [:show, :calendar_activities, :activity, :projects, :groups] + urgency :medium, [:calendar] urgency :high, [:exists] def show diff --git a/app/helpers/merge_requests_helper.rb b/app/helpers/merge_requests_helper.rb index 2d93813d5ee..8c63b9eb930 100644 --- a/app/helpers/merge_requests_helper.rb +++ b/app/helpers/merge_requests_helper.rb @@ -206,6 +206,18 @@ module MergeRequestsHelper api_v4_projects_merge_requests_award_emoji_path(id: merge_request.project.id, merge_request_iid: merge_request.iid) end + def how_merge_modal_data(merge_request) + { + is_fork: merge_request.for_fork?, + can_merge: merge_request.can_be_merged_by?(current_user), + source_branch: merge_request.source_branch, + source_project: merge_request.source_project, + source_project_full_path: merge_request.source_project&.full_path, + target_branch: merge_request.target_branch, + reviewing_docs_path: help_page_path('user/project/merge_requests/reviews/index.md', anchor: "checkout-merge-requests-locally-through-the-head-ref") + } + end + private def review_requested_merge_requests_count diff --git a/app/services/concerns/ci/downstream_pipeline_helpers.rb b/app/services/concerns/ci/downstream_pipeline_helpers.rb index b738a332085..39c0adb6e4e 100644 --- a/app/services/concerns/ci/downstream_pipeline_helpers.rb +++ b/app/services/concerns/ci/downstream_pipeline_helpers.rb @@ -3,7 +3,6 @@ module Ci module DownstreamPipelineHelpers def log_downstream_pipeline_creation(downstream_pipeline) - return unless Feature.enabled?(:ci_log_downstream_pipeline_creation, project, default_enabled: :yaml) return unless downstream_pipeline&.persisted? hierarchy_size = downstream_pipeline.all_pipelines_in_hierarchy.count diff --git a/app/views/devise/sessions/_new_base.html.haml b/app/views/devise/sessions/_new_base.html.haml index 83e3fd85511..1280341ba66 100644 --- a/app/views/devise/sessions/_new_base.html.haml +++ b/app/views/devise/sessions/_new_base.html.haml @@ -1,12 +1,12 @@ = gitlab_ui_form_for(resource, as: resource_name, url: session_path(resource_name), html: { class: 'new_user gl-show-field-errors js-sign-in-form', aria: { live: 'assertive' }, data: { testid: 'sign-in-form' }}) do |f| - .form-group + .form-group.gl-px-5.gl-pt-5 = f.label _('Username or email'), for: 'user_login', class: 'label-bold' = f.text_field :login, value: @invite_email, class: 'form-control gl-form-input top js-username-field', autofocus: 'autofocus', autocapitalize: 'off', autocorrect: 'off', required: true, title: _('This field is required.'), data: { qa_selector: 'login_field', testid: 'username-field' } - .form-group + .form-group.gl-px-5 = f.label :password, class: 'label-bold' = f.password_field :password, class: 'form-control gl-form-input bottom', autocomplete: 'current-password', required: true, title: _('This field is required.'), data: { qa_selector: 'password_field' } - if devise_mapping.rememberable? - %div + .gl-px-5 .gl-display-inline-block = f.gitlab_ui_checkbox_component :remember_me, _('Remember me') .gl-float-right @@ -18,7 +18,8 @@ - if Feature.enabled?(:arkose_labs_login_challenge) = render_if_exists 'devise/sessions/arkose_labs' - elsif captcha_enabled? || captcha_on_login_required? - = recaptcha_tags nonce: content_security_policy_nonce + .gl-px-5 + = recaptcha_tags nonce: content_security_policy_nonce - .submit-container.move-submit-down + .submit-container.move-submit-down.gl-px-5 = f.button _('Sign in'), type: :submit, class: "gl-button btn btn-block btn-confirm js-sign-in-button#{' js-no-auto-disable' if Feature.enabled?(:arkose_labs_login_challenge)}", data: { qa_selector: 'sign_in_button', testid: 'sign-in-button' } diff --git a/app/views/devise/sessions/_new_crowd.html.haml b/app/views/devise/sessions/_new_crowd.html.haml index fb4c011dd49..bdf357c5f74 100644 --- a/app/views/devise/sessions/_new_crowd.html.haml +++ b/app/views/devise/sessions/_new_crowd.html.haml @@ -1,13 +1,13 @@ = form_tag(omniauth_authorize_path(:user, :crowd), id: 'new_crowd_user', class: 'gl-show-field-errors') do - .form-group + .form-group.gl-px-5.gl-pt-5 = label_tag :username, _('Username or email') = text_field_tag :username, nil, { class: "form-control top", title: _("This field is required."), autofocus: "autofocus", required: true } - .form-group + .form-group.gl-px-5 = label_tag :password = password_field_tag :password, nil, { autocomplete: 'current-password', class: "form-control bottom", title: _("This field is required."), required: true } - if devise_mapping.rememberable? - .remember-me + .remember-me.gl-px-5 %label{ for: "remember_me" } = check_box_tag :remember_me, '1', false, id: 'remember_me' %span= _('Remember me') - = submit_tag _("Sign in"), class: "gl-button btn-confirm btn" + = submit_tag _("Sign in"), class: "gl-button btn-confirm btn gl-px-5" diff --git a/app/views/devise/sessions/_new_ldap.html.haml b/app/views/devise/sessions/_new_ldap.html.haml index fea58779c17..4cde24f4afa 100644 --- a/app/views/devise/sessions/_new_ldap.html.haml +++ b/app/views/devise/sessions/_new_ldap.html.haml @@ -3,17 +3,17 @@ - submit_message = local_assigns.fetch(:submit_message, _('Sign in')) = form_tag(omniauth_callback_path(:user, server['provider_name']), id: 'new_ldap_user', class: "gl-show-field-errors") do - .form-group + .form-group.gl-px-5.gl-pt-5 = label_tag :username, "#{server['label']} Username" = text_field_tag :username, nil, { class: "form-control gl-form-input top", title: _("This field is required."), autofocus: "autofocus", data: { qa_selector: 'username_field' }, required: true } - .form-group + .form-group.gl-px-5 = label_tag :password = password_field_tag :password, nil, { autocomplete: 'current-password', class: "form-control gl-form-input bottom", title: _("This field is required."), data: { qa_selector: 'password_field' }, required: true } - if !hide_remember_me && devise_mapping.rememberable? - .remember-me + .remember-me.gl-px-5 %label{ for: "remember_me" } = check_box_tag :remember_me, '1', false, id: 'remember_me' %span= _('Remember me') - .submit-container.move-submit-down + .submit-container.move-submit-down.gl-px-5 = submit_tag submit_message, class: "gl-button btn btn-confirm", data: { qa_selector: 'sign_in_button' } diff --git a/app/views/devise/sessions/two_factor.html.haml b/app/views/devise/sessions/two_factor.html.haml index 29bcb3c158b..77a2fda021f 100644 --- a/app/views/devise/sessions/two_factor.html.haml +++ b/app/views/devise/sessions/two_factor.html.haml @@ -1,6 +1,6 @@ %div = render 'devise/shared/tab_single', tab_title: _('Two-Factor Authentication') - .login-box + .login-box.gl-p-5 .login-body - if @user.two_factor_otp_enabled? = form_for(resource, as: resource_name, url: session_path(resource_name), method: :post, html: { class: "edit_user gl-show-field-errors js-2fa-form #{'hidden' if @user.two_factor_webauthn_u2f_enabled?}" }) do |f| diff --git a/app/views/devise/shared/_omniauth_box.html.haml b/app/views/devise/shared/_omniauth_box.html.haml index bd7fe41ae8d..32b4a15517e 100644 --- a/app/views/devise/shared/_omniauth_box.html.haml +++ b/app/views/devise/shared/_omniauth_box.html.haml @@ -1,6 +1,6 @@ - hide_remember_me = local_assigns.fetch(:hide_remember_me, false) -.omniauth-container.gl-mt-5 +.omniauth-container.gl-mt-5.gl-p-5 %label.gl-font-weight-bold = _('Sign in with') - providers = enabled_button_based_providers diff --git a/app/views/layouts/devise.html.haml b/app/views/layouts/devise.html.haml index 5c9c6a06ac1..cee5c1b6b69 100644 --- a/app/views/layouts/devise.html.haml +++ b/app/views/layouts/devise.html.haml @@ -16,7 +16,7 @@ %h1.mb-3.font-weight-normal = current_appearance&.title.presence || _('GitLab') .row.mb-3 - .col-sm-7.order-12.order-sm-1.brand-holder + .col-md-6.order-12.order-sm-1.brand-holder - unless recently_confirmed_com? = brand_image - if current_appearance&.description? @@ -36,7 +36,7 @@ = render_if_exists 'layouts/devise_help_text' - .col-sm-5.order-1.new-session-forms-container{ class: recently_confirmed_com? ? 'order-sm-first' : 'order-sm-12' } + .col-md-6.order-1.new-session-forms-container{ class: recently_confirmed_com? ? 'order-sm-first' : 'order-sm-12' } = yield = render 'devise/shared/footer', footer_message: footer_message diff --git a/app/views/notify/merged_merge_request_email.html.haml b/app/views/notify/merged_merge_request_email.html.haml index 0622e2f6ffb..8ffe3edd969 100644 --- a/app/views/notify/merged_merge_request_email.html.haml +++ b/app/views/notify/merged_merge_request_email.html.haml @@ -1,2 +1,16 @@ %p = sprintf(s_('Notify|Merge request %{merge_request} was merged'), { merge_request: merge_request_reference_link(@merge_request) }).html_safe + +%p + = merge_path_description(@merge_request, 'to') + +%p + = sprintf(s_('Notify|Author: %{author_name}'), { author_name: sanitize_name(@merge_request.author_name) }) + +- if @merge_request.assignees.any? + %p + = assignees_label(@merge_request) + +- if @merge_request.reviewers.any? + %p + = reviewers_label(@merge_request) diff --git a/app/views/notify/merged_merge_request_email.text.haml b/app/views/notify/merged_merge_request_email.text.haml index d6ec916641d..9b9eb566903 100644 --- a/app/views/notify/merged_merge_request_email.text.haml +++ b/app/views/notify/merged_merge_request_email.text.haml @@ -5,5 +5,9 @@ = merge_path_description(@merge_request, 'to') = sprintf(s_('Notify|Author: %{author_name}'), { author_name: sanitize_name(@merge_request.author_name) }) -= assignees_label(@merge_request) -= reviewers_label(@merge_request) + +- if @merge_request.assignees.any? + = assignees_label(@merge_request) + +- if @merge_request.reviewers.any? + = reviewers_label(@merge_request) diff --git a/app/views/projects/merge_requests/_code_dropdown.html.haml b/app/views/projects/merge_requests/_code_dropdown.html.haml new file mode 100644 index 00000000000..ab5716d5485 --- /dev/null +++ b/app/views/projects/merge_requests/_code_dropdown.html.haml @@ -0,0 +1,39 @@ +.float-left.gl-md-ml-3.dropdown.gl-new-dropdown{ class: "gl-display-none! gl-md-display-flex!" } + #js-check-out-modal{ data: how_merge_modal_data(@merge_request) } + = button_tag type: 'button', class: "btn dropdown-toggle btn-confirm gl-button gl-dropdown-toggle", data: { toggle: 'dropdown', qa_selector: 'mr_code_drodpown' } do + %span.gl-new-dropdown-button-text= _('Code') + = sprite_icon "chevron-down", size: 16, css_class: "dropdown-icon gl-icon gl-ml-2 gl-mr-0!" + .dropdown-menu.dropdown-menu-right + .gl-new-dropdown-inner + .gl-new-dropdown-contents + %ul + %li.gl-new-dropdown-section-header + %header.dropdown-header + = _('Review changes') + %li.gl-new-dropdown-item + %button.dropdown-item.js-check-out-modal-trigger{ type: 'button' } + .gl-new-dropdown-item-text-wrapper + = _('Check out branch') + - if current_user + %li.gl-new-dropdown-item + = link_to ide_merge_request_path(@merge_request), class: 'dropdown-item', data: { qa_selector: 'open_in_web_ide_button' } do + .gl-new-dropdown-item-text-wrapper + = _('Open in Web IDE') + - if Gitlab::CurrentSettings.gitpod_enabled && current_user&.gitpod_enabled + %li.gl-new-dropdown-item + = link_to "#{Gitlab::CurrentSettings.gitpod_url}##{merge_request_url(@merge_request)}", class: 'dropdown-item' do + .gl-new-dropdown-item-text-wrapper + = _('Open in Gitpod') + %li.gl-new-dropdown-divider + %hr.dropdown-divider + %li.gl-new-dropdown-section-header + %header.dropdown-header + = _('Download') + %li.gl-new-dropdown-item{ data: { qa_selector: 'download_email_patches_menu_item' } } + = link_to merge_request_path(@merge_request, format: :patch), class: 'dropdown-item', download: '' do + .gl-new-dropdown-item-text-wrapper + = _('Email patches') + %li.gl-new-dropdown-item{ data: { qa_selector: 'download_plain_diff_menu_item' } } + = link_to merge_request_path(@merge_request, format: :diff), class: 'dropdown-item' do + .gl-new-dropdown-item-text-wrapper + = _('Plain diff') diff --git a/app/views/projects/merge_requests/_mr_title.html.haml b/app/views/projects/merge_requests/_mr_title.html.haml index ae44143f2ee..b40fef0e892 100644 --- a/app/views/projects/merge_requests/_mr_title.html.haml +++ b/app/views/projects/merge_requests/_mr_title.html.haml @@ -24,6 +24,9 @@ = sprite_icon('chevron-double-lg-left') .detail-page-header-actions.js-issuable-actions + - if @merge_request.source_project + = render 'projects/merge_requests/code_dropdown' + - if can_update_merge_request = link_to _('Edit'), edit_project_merge_request_path(@project, @merge_request), class: "gl-display-none gl-md-display-block btn gl-button btn-default btn-grouped js-issuable-edit", data: { qa_selector: "edit_button" } |