diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-07-20 18:40:28 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-07-20 18:40:28 +0300 |
commit | b595cb0c1dec83de5bdee18284abe86614bed33b (patch) | |
tree | 8c3d4540f193c5ff98019352f554e921b3a41a72 /app/views | |
parent | 2f9104a328fc8a4bddeaa4627b595166d24671d0 (diff) |
Add latest changes from gitlab-org/gitlab@15-2-stable-eev15.2.0-rc42
Diffstat (limited to 'app/views')
231 files changed, 915 insertions, 998 deletions
diff --git a/app/views/admin/application_settings/_eks.html.haml b/app/views/admin/application_settings/_eks.html.haml index 370d3cea07c..68eb33d6552 100644 --- a/app/views/admin/application_settings/_eks.html.haml +++ b/app/views/admin/application_settings/_eks.html.haml @@ -1,7 +1,7 @@ - expanded = integration_expanded?('eks_') %section.settings.as-eks.no-animate#js-eks-settings{ class: ('expanded' if expanded) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Amazon EKS') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded ? _('Collapse') : _('Expand') diff --git a/app/views/admin/application_settings/_error_tracking.html.haml b/app/views/admin/application_settings/_error_tracking.html.haml new file mode 100644 index 00000000000..2dcd9d0d2c0 --- /dev/null +++ b/app/views/admin/application_settings/_error_tracking.html.haml @@ -0,0 +1,40 @@ +- expanded = integration_expanded?('error_tracking_') + +%section.settings.as-error-tracking.no-animate#js-error-tracking-settings{ class: ('expanded' if expanded) } + .settings-header + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only + = _('GitLab Error Tracking') + = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do + = expanded ? _('Collapse') : _('Expand') + %p + = _('Allows projects to track errors using an Opstrace integration.').html_safe % { link: help_page_path('operations/error_tracking.md') } + = link_to _('Learn more.'), help_page_path('operations/error_tracking.md'), target: '_blank', rel: 'noopener noreferrer' + + .settings-content + + %fieldset + .sub-section + %h4= _('Access Token') + .form-group + .form-text + %p.text-secondary + = s_("ErrorTracking|Access token is %{token_in_code_tag}").html_safe % { token_in_code_tag: content_tag(:code, Gitlab::CurrentSettings.error_tracking_access_token, id: 'error-tracking-access-token') } + .form-inline + = button_to _("Reset error tracking access token"), reset_error_tracking_access_token_admin_application_settings_path, + method: :put, class: 'gl-button btn btn-danger btn-sm', + data: { confirm: _('Are you sure you want to reset the error tracking access token?') } + + = gitlab_ui_form_for @application_setting, url: general_admin_application_settings_path(anchor: 'js-error-tracking-settings'), html: { class: 'fieldset-form', id: 'error-tracking-settings' } do |f| + = form_errors(@application_setting, pajamas_alert: true) if expanded + + %fieldset + .sub-section + %h4= _('Configure Error Tracking') + .form-group + = f.gitlab_ui_checkbox_component :error_tracking_enabled, + _('Enable GitLab Error Tracking') + .form-group + = f.label :error_tracking_api_url, _('Opstrace endpoint for Error Tracking integration'), class: 'label-light' + = f.text_field :error_tracking_api_url, class: 'form-control gl-form-input' + + = f.submit _('Save changes'), class: 'gl-button btn btn-confirm' diff --git a/app/views/admin/application_settings/_external_authorization_service_form.html.haml b/app/views/admin/application_settings/_external_authorization_service_form.html.haml index 4d0faf69958..f287dba9866 100644 --- a/app/views/admin/application_settings/_external_authorization_service_form.html.haml +++ b/app/views/admin/application_settings/_external_authorization_service_form.html.haml @@ -1,6 +1,6 @@ %section.settings.as-external-auth.no-animate#js-external-auth-settings{ class: ('expanded' if expanded) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = s_('ExternalAuthorization|External authorization') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded ? _('Collapse') : _('Expand') diff --git a/app/views/admin/application_settings/_floc.html.haml b/app/views/admin/application_settings/_floc.html.haml index b5a63aa0847..d63eb2bd09d 100644 --- a/app/views/admin/application_settings/_floc.html.haml +++ b/app/views/admin/application_settings/_floc.html.haml @@ -2,7 +2,7 @@ %section.settings.no-animate#js-floc-settings{ class: ('expanded' if expanded) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = s_('FloC|Federated Learning of Cohorts') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded ? _('Collapse') : _('Expand') diff --git a/app/views/admin/application_settings/_gitpod.html.haml b/app/views/admin/application_settings/_gitpod.html.haml index eb47d177701..cc1e3f968cb 100644 --- a/app/views/admin/application_settings/_gitpod.html.haml +++ b/app/views/admin/application_settings/_gitpod.html.haml @@ -2,7 +2,7 @@ %section.settings.no-animate#js-gitpod-settings{ class: ('expanded' if expanded) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Gitpod') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded ? _('Collapse') : _('Expand') @@ -13,7 +13,7 @@ .settings-content = gitlab_ui_form_for @application_setting, url: general_admin_application_settings_path(anchor: 'js-gitpod-settings'), html: { class: 'fieldset-form', id: 'gitpod-settings' } do |f| - = form_errors(@application_setting) + = form_errors(@application_setting, pajamas_alert: true) %fieldset .form-group diff --git a/app/views/admin/application_settings/_grafana.html.haml b/app/views/admin/application_settings/_grafana.html.haml index 7f305b9ad9c..f17f63c7df7 100644 --- a/app/views/admin/application_settings/_grafana.html.haml +++ b/app/views/admin/application_settings/_grafana.html.haml @@ -1,5 +1,5 @@ = gitlab_ui_form_for @application_setting, url: metrics_and_profiling_admin_application_settings_path(anchor: 'js-grafana-settings'), html: { class: 'fieldset-form' } do |f| - = form_errors(@application_setting) + = form_errors(@application_setting, pajamas_alert: true) %fieldset .form-group diff --git a/app/views/admin/application_settings/_jira_connect_application_key.html.haml b/app/views/admin/application_settings/_jira_connect_application_key.html.haml index e395741dcaa..68a82288573 100644 --- a/app/views/admin/application_settings/_jira_connect_application_key.html.haml +++ b/app/views/admin/application_settings/_jira_connect_application_key.html.haml @@ -2,7 +2,7 @@ %section.settings.no-animate#js-jira_connect-settings{ class: ('expanded' if expanded) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = s_('JiraConnect|GitLab for Jira App') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded ? _('Collapse') : _('Expand') @@ -12,7 +12,7 @@ .settings-content = gitlab_ui_form_for @application_setting, url: general_admin_application_settings_path(anchor: 'js-jira-connect-application-id-settings'), html: { class: 'fieldset-form', id: 'jira-connect-application-id-settings' } do |f| - = form_errors(@application_setting) + = form_errors(@application_setting, pajamas_alert: true) %fieldset .form-group diff --git a/app/views/admin/application_settings/_kroki.html.haml b/app/views/admin/application_settings/_kroki.html.haml index b1dd8a282ec..c0ac924407f 100644 --- a/app/views/admin/application_settings/_kroki.html.haml +++ b/app/views/admin/application_settings/_kroki.html.haml @@ -1,7 +1,7 @@ - expanded = integration_expanded?('kroki_') %section.settings.as-kroki.no-animate#js-kroki-settings{ class: ('expanded' if expanded) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Kroki') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded ? _('Collapse') : _('Expand') diff --git a/app/views/admin/application_settings/_mailgun.html.haml b/app/views/admin/application_settings/_mailgun.html.haml index e84fdc56f93..cbe7e1c5bb6 100644 --- a/app/views/admin/application_settings/_mailgun.html.haml +++ b/app/views/admin/application_settings/_mailgun.html.haml @@ -1,7 +1,7 @@ - expanded = integration_expanded?('mailgun_') %section.settings.as-mailgun.no-animate#js-mailgun-settings{ class: ('expanded' if expanded) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Mailgun') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded ? _('Collapse') : _('Expand') @@ -9,7 +9,7 @@ = _('Configure the %{link} integration.').html_safe % { link: link_to(_('Mailgun events'), 'https://documentation.mailgun.com/en/latest/user_manual.html#webhooks', target: '_blank', rel: 'noopener noreferrer') } .settings-content = gitlab_ui_form_for @application_setting, url: general_admin_application_settings_path(anchor: 'js-mailgun-settings'), html: { class: 'fieldset-form', id: 'mailgun-settings' } do |f| - = form_errors(@application_setting) if expanded + = form_errors(@application_setting, pajamas_alert: true) if expanded %fieldset .form-group diff --git a/app/views/admin/application_settings/_package_registry.html.haml b/app/views/admin/application_settings/_package_registry.html.haml index c0fabb1d42e..b31576b5c48 100644 --- a/app/views/admin/application_settings/_package_registry.html.haml +++ b/app/views/admin/application_settings/_package_registry.html.haml @@ -1,7 +1,7 @@ - if Gitlab.config.packages.enabled %section.settings.as-package.no-animate#js-package-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Package Registry') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') diff --git a/app/views/admin/application_settings/_performance_bar.html.haml b/app/views/admin/application_settings/_performance_bar.html.haml index 4e37c4c3c98..a7f73edcf69 100644 --- a/app/views/admin/application_settings/_performance_bar.html.haml +++ b/app/views/admin/application_settings/_performance_bar.html.haml @@ -1,5 +1,5 @@ = gitlab_ui_form_for @application_setting, url: metrics_and_profiling_admin_application_settings_path(anchor: 'js-performance-bar-settings'), html: { class: 'fieldset-form' } do |f| - = form_errors(@application_setting) + = form_errors(@application_setting, pajamas_alert: true) %fieldset .form-group diff --git a/app/views/admin/application_settings/_plantuml.html.haml b/app/views/admin/application_settings/_plantuml.html.haml index 57931544e65..8be37ff1dda 100644 --- a/app/views/admin/application_settings/_plantuml.html.haml +++ b/app/views/admin/application_settings/_plantuml.html.haml @@ -1,7 +1,7 @@ - expanded = integration_expanded?('plantuml_') %section.settings.as-plantuml.no-animate#js-plantuml-settings{ class: ('expanded' if expanded) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('PlantUML') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded ? _('Collapse') : _('Expand') @@ -10,7 +10,7 @@ = link_to _('Learn more.'), help_page_path('administration/integration/plantuml.md'), target: '_blank', rel: 'noopener noreferrer' .settings-content = gitlab_ui_form_for @application_setting, url: general_admin_application_settings_path(anchor: 'js-plantuml-settings'), html: { class: 'fieldset-form', id: 'plantuml-settings' } do |f| - = form_errors(@application_setting) if expanded + = form_errors(@application_setting, pajamas_alert: true) if expanded %fieldset .form-group diff --git a/app/views/admin/application_settings/_prometheus.html.haml b/app/views/admin/application_settings/_prometheus.html.haml index 59681c0278e..d8dffd6bc16 100644 --- a/app/views/admin/application_settings/_prometheus.html.haml +++ b/app/views/admin/application_settings/_prometheus.html.haml @@ -1,5 +1,5 @@ = gitlab_ui_form_for @application_setting, url: metrics_and_profiling_admin_application_settings_path(anchor: 'js-prometheus-settings'), html: { class: 'fieldset-form' } do |f| - = form_errors(@application_setting) + = form_errors(@application_setting, pajamas_alert: true) %fieldset .form-group diff --git a/app/views/admin/application_settings/_registry.html.haml b/app/views/admin/application_settings/_registry.html.haml index 856db32e088..db4d1cb323c 100644 --- a/app/views/admin/application_settings/_registry.html.haml +++ b/app/views/admin/application_settings/_registry.html.haml @@ -1,5 +1,5 @@ = gitlab_ui_form_for @application_setting, url: ci_cd_admin_application_settings_path(anchor: 'js-registry-settings'), html: { class: 'fieldset-form' } do |f| - = form_errors(@application_setting) + = form_errors(@application_setting, pajamas_alert: true) %fieldset .form-group diff --git a/app/views/admin/application_settings/_repository_check.html.haml b/app/views/admin/application_settings/_repository_check.html.haml index ef8d3ccc8ab..40d847f4949 100644 --- a/app/views/admin/application_settings/_repository_check.html.haml +++ b/app/views/admin/application_settings/_repository_check.html.haml @@ -1,5 +1,5 @@ = gitlab_ui_form_for @application_setting, url: repository_admin_application_settings_path(anchor: 'js-repository-check-settings'), html: { class: 'fieldset-form' } do |f| - = form_errors(@application_setting) + = form_errors(@application_setting, pajamas_alert: true) %fieldset .sub-section diff --git a/app/views/admin/application_settings/_repository_mirrors_form.html.haml b/app/views/admin/application_settings/_repository_mirrors_form.html.haml index dad8d5f3fae..156a6bbcfa6 100644 --- a/app/views/admin/application_settings/_repository_mirrors_form.html.haml +++ b/app/views/admin/application_settings/_repository_mirrors_form.html.haml @@ -1,5 +1,5 @@ = gitlab_ui_form_for @application_setting, url: repository_admin_application_settings_path(anchor: 'js-mirror-settings') do |f| - = form_errors(@application_setting) + = form_errors(@application_setting, pajamas_alert: true) %fieldset .form-group diff --git a/app/views/admin/application_settings/_repository_static_objects.html.haml b/app/views/admin/application_settings/_repository_static_objects.html.haml index d962d050ebc..a8e109ce377 100644 --- a/app/views/admin/application_settings/_repository_static_objects.html.haml +++ b/app/views/admin/application_settings/_repository_static_objects.html.haml @@ -1,5 +1,5 @@ = form_for @application_setting, url: repository_admin_application_settings_path(anchor: 'js-repository-static-objects-settings'), html: { class: 'fieldset-form' } do |f| - = form_errors(@application_setting) + = form_errors(@application_setting, pajamas_alert: true) %fieldset .form-group diff --git a/app/views/admin/application_settings/_signup.html.haml b/app/views/admin/application_settings/_signup.html.haml index fccf039533b..2365daa2c70 100644 --- a/app/views/admin/application_settings/_signup.html.haml +++ b/app/views/admin/application_settings/_signup.html.haml @@ -1,3 +1,3 @@ -= form_errors(@application_setting) += form_errors(@application_setting, pajamas_alert: true) #js-signup-form{ data: signup_form_data } diff --git a/app/views/admin/application_settings/_snowplow.html.haml b/app/views/admin/application_settings/_snowplow.html.haml index e9387ab3f26..8684b909853 100644 --- a/app/views/admin/application_settings/_snowplow.html.haml +++ b/app/views/admin/application_settings/_snowplow.html.haml @@ -1,7 +1,7 @@ - expanded = integration_expanded?('snowplow_') %section.settings.as-snowplow.no-animate#js-snowplow-settings{ class: ('expanded' if expanded), data: { qa_selector: 'snowplow_settings_content' } } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Snowplow') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded ? _('Collapse') : _('Expand') diff --git a/app/views/admin/application_settings/_sourcegraph.html.haml b/app/views/admin/application_settings/_sourcegraph.html.haml index a0cbbecb943..43ff2bc02f5 100644 --- a/app/views/admin/application_settings/_sourcegraph.html.haml +++ b/app/views/admin/application_settings/_sourcegraph.html.haml @@ -3,7 +3,7 @@ %section.settings.as-sourcegraph.no-animate#js-sourcegraph-settings{ class: ('expanded' if expanded) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Sourcegraph') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded ? _('Collapse') : _('Expand') diff --git a/app/views/admin/application_settings/_spam.html.haml b/app/views/admin/application_settings/_spam.html.haml index bb512940be2..7f3125d91ba 100644 --- a/app/views/admin/application_settings/_spam.html.haml +++ b/app/views/admin/application_settings/_spam.html.haml @@ -1,5 +1,5 @@ = gitlab_ui_form_for @application_setting, url: reporting_admin_application_settings_path(anchor: 'js-spam-settings'), html: { class: 'fieldset-form' } do |f| - = form_errors(@application_setting) + = form_errors(@application_setting, pajamas_alert: true) %fieldset %h5 diff --git a/app/views/admin/application_settings/_terminal.html.haml b/app/views/admin/application_settings/_terminal.html.haml index c53f63e124b..5703fbb463e 100644 --- a/app/views/admin/application_settings/_terminal.html.haml +++ b/app/views/admin/application_settings/_terminal.html.haml @@ -1,5 +1,5 @@ = form_for @application_setting, url: general_admin_application_settings_path(anchor: 'js-terminal-settings'), html: { class: 'fieldset-form', id: 'terminal-settings' } do |f| - = form_errors(@application_setting) + = form_errors(@application_setting, pajamas_alert: true) %fieldset .form-group diff --git a/app/views/admin/application_settings/_third_party_offers.html.haml b/app/views/admin/application_settings/_third_party_offers.html.haml index 205e14fb8ab..397b47eefaa 100644 --- a/app/views/admin/application_settings/_third_party_offers.html.haml +++ b/app/views/admin/application_settings/_third_party_offers.html.haml @@ -1,7 +1,7 @@ - expanded = integration_expanded?('hide_third_party_') %section.settings.as-third-party-offers.no-animate#js-third-party-offers-settings{ class: ('expanded' if expanded) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Customer experience improvement and third-party offers') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded ? _('Collapse') : _('Expand') @@ -9,7 +9,7 @@ = _('Control whether to display customer experience improvement content and third-party offers in GitLab.') .settings-content = gitlab_ui_form_for @application_setting, url: general_admin_application_settings_path(anchor: 'js-third-party-offers-settings'), html: { class: 'fieldset-form', id: 'third-party-offers-settings' } do |f| - = form_errors(@application_setting) if expanded + = form_errors(@application_setting, pajamas_alert: true) if expanded %fieldset .form-group diff --git a/app/views/admin/application_settings/_visibility_and_access.html.haml b/app/views/admin/application_settings/_visibility_and_access.html.haml index 96dcd7e1111..d35fba7d3b2 100644 --- a/app/views/admin/application_settings/_visibility_and_access.html.haml +++ b/app/views/admin/application_settings/_visibility_and_access.html.haml @@ -1,5 +1,5 @@ = gitlab_ui_form_for @application_setting, url: general_admin_application_settings_path(anchor: 'js-visibility-settings'), html: { class: 'fieldset-form', id: 'visibility-settings' } do |f| - = form_errors(@application_setting) + = form_errors(@application_setting, pajamas_alert: true) %fieldset = render 'shared/project_creation_levels', f: f, method: :default_project_creation, legend: s_('ProjectCreationLevel|Default project creation protection') @@ -24,7 +24,7 @@ .form-group = f.label :import_sources, s_('AdminSettings|Import sources'), class: 'label-bold gl-mb-0' %span.form-text.gl-mt-0.gl-mb-3#import-sources-help - = _('Enabled sources for code import during project creation. OmniAuth must be configured for GitHub') + = _('Code can be imported from enabled sources during project creation. OmniAuth must be configured for GitHub') = link_to sprite_icon('question-o'), help_page_path("integration/github") , Bitbucket = link_to sprite_icon('question-o'), help_page_path("integration/bitbucket") diff --git a/app/views/admin/application_settings/appearances/_form.html.haml b/app/views/admin/application_settings/appearances/_form.html.haml index 5816bd42a83..224d9fbe953 100644 --- a/app/views/admin/application_settings/appearances/_form.html.haml +++ b/app/views/admin/application_settings/appearances/_form.html.haml @@ -1,7 +1,7 @@ - parsed_with_gfm = (_("Content parsed with %{link}.") % { link: link_to('GitLab Flavored Markdown', help_page_path('user/markdown'), target: '_blank') }).html_safe = gitlab_ui_form_for @appearance, url: admin_application_settings_appearances_path, html: { class: 'gl-mt-3' } do |f| - = form_errors(@appearance) + = form_errors(@appearance, pajamas_alert: true) .row diff --git a/app/views/admin/application_settings/ci/_header.html.haml b/app/views/admin/application_settings/ci/_header.html.haml index 5e3f0d6f2aa..0adb6cbbcf0 100644 --- a/app/views/admin/application_settings/ci/_header.html.haml +++ b/app/views/admin/application_settings/ci/_header.html.haml @@ -1,6 +1,6 @@ - expanded = local_assigns.fetch(:expanded) -%h4 +%h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Variables') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do diff --git a/app/views/admin/application_settings/ci_cd.html.haml b/app/views/admin/application_settings/ci_cd.html.haml index b635e7198cb..f0f7e6868da 100644 --- a/app/views/admin/application_settings/ci_cd.html.haml +++ b/app/views/admin/application_settings/ci_cd.html.haml @@ -14,7 +14,7 @@ %section.settings.as-ci-cd.no-animate#js-ci-cd-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Continuous Integration and Deployment') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -29,7 +29,7 @@ - if Gitlab.config.registry.enabled %section.settings.as-registry.no-animate#js-registry-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Container Registry') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -41,7 +41,7 @@ - if Feature.enabled?(:runner_registration_control) %section.settings.as-runner.no-animate#js-runner-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = s_('Runners|Runner registration') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? 'Collapse' : 'Expand' diff --git a/app/views/admin/application_settings/general.html.haml b/app/views/admin/application_settings/general.html.haml index 36b9ad189d8..d7559fcd48b 100644 --- a/app/views/admin/application_settings/general.html.haml +++ b/app/views/admin/application_settings/general.html.haml @@ -4,18 +4,18 @@ %section.settings.as-visibility-access.no-animate#js-visibility-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Visibility and access controls') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') %p - = _('Set default and restrict visibility levels. Configure import sources and git access protocol.') + = _('Set visibility of project contents. Configure import sources and Git access protocols.') .settings-content = render 'visibility_and_access' %section.settings.as-account-limit.no-animate#js-account-settings{ class: ('expanded' if expanded_by_default?), data: { qa_selector: 'account_and_limit_settings_content' } } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Account and limit') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -26,7 +26,7 @@ %section.settings.as-diff-limits.no-animate#js-merge-request-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Diff limits') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -37,7 +37,7 @@ %section.settings.as-signup.no-animate#js-signup-settings{ class: ('expanded' if expanded_by_default?), data: { qa_selector: 'sign_up_restrictions_settings_content' } } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Sign-up restrictions') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -48,7 +48,7 @@ %section.settings.as-signin.no-animate#js-signin-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Sign-in restrictions') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -60,7 +60,7 @@ %section.settings.as-terms.no-animate#js-terms-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Terms of Service and Privacy Policy') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -74,7 +74,7 @@ %section.settings.as-terminal.no-animate#js-terminal-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Web terminal') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -86,7 +86,7 @@ %section.settings.no-animate#js-web-ide-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Web IDE') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -94,7 +94,7 @@ = _('Manage Web IDE features.') .settings-content = gitlab_ui_form_for @application_setting, url: general_admin_application_settings_path(anchor: "js-web-ide-settings"), html: { class: 'fieldset-form', id: 'web-ide-settings' } do |f| - = form_errors(@application_setting) + = form_errors(@application_setting, pajamas_alert: true) %fieldset .form-group @@ -113,8 +113,11 @@ = render_if_exists 'admin/application_settings/slack' -# this partial is from JiHu, see details in https://jihulab.com/gitlab-cn/gitlab/-/merge_requests/417 = render_if_exists 'admin/application_settings/dingtalk_integration' +-# this partial is from JiHu, see details in https://jihulab.com/gitlab-cn/gitlab/-/merge_requests/640 += render_if_exists 'admin/application_settings/feishu_integration' = render 'admin/application_settings/third_party_offers' = render 'admin/application_settings/snowplow' += render 'admin/application_settings/error_tracking' if Feature.enabled?(:gitlab_error_tracking) = render 'admin/application_settings/eks' = render 'admin/application_settings/floc' = render_if_exists 'admin/application_settings/add_license' diff --git a/app/views/admin/application_settings/metrics_and_profiling.html.haml b/app/views/admin/application_settings/metrics_and_profiling.html.haml index 7cc0ff2c28e..d4476bf838a 100644 --- a/app/views/admin/application_settings/metrics_and_profiling.html.haml +++ b/app/views/admin/application_settings/metrics_and_profiling.html.haml @@ -6,7 +6,7 @@ %section.settings.as-prometheus.no-animate#js-prometheus-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Metrics - Prometheus') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -17,7 +17,7 @@ %section.settings.as-grafana.no-animate#js-grafana-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Metrics - Grafana') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -30,7 +30,7 @@ %section.settings.as-performance-bar.no-animate#js-performance-bar-settings{ class: ('expanded' if expanded_by_default?), data: { qa_selector: 'performance_bar_settings_content' } } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Profiling - Performance bar') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -44,7 +44,7 @@ %section.settings.as-usage.no-animate#js-usage-settings{ class: ('expanded' if expanded_by_default?), data: { qa_selector: 'usage_statistics_settings_content' } } .settings-header#usage-statistics - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Usage statistics') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -56,7 +56,7 @@ - if Feature.enabled?(:configure_sentry_in_application_settings) %section.settings.as-sentry.no-animate#js-sentry-settings{ class: ('expanded' if expanded_by_default?), data: { qa_selector: 'sentry_settings_content' } } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Sentry') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') diff --git a/app/views/admin/application_settings/network.html.haml b/app/views/admin/application_settings/network.html.haml index f3264f733ab..485b3a9828b 100644 --- a/app/views/admin/application_settings/network.html.haml +++ b/app/views/admin/application_settings/network.html.haml @@ -4,7 +4,7 @@ %section.settings.as-performance.no-animate#js-performance-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Performance optimization') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -15,7 +15,7 @@ %section.settings.as-ip-limits.no-animate#js-ip-limits-settings{ class: ('expanded' if expanded_by_default?), data: { qa_selector: 'ip_limits_content' } } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('User and IP rate limits') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -27,7 +27,7 @@ %section.settings.as-packages-limits.no-animate#js-packages-limits-settings{ class: ('expanded' if expanded_by_default?), data: { qa_selector: 'packages_limits_content' } } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Package registry rate limits') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -39,7 +39,7 @@ %section.settings.as-files-limits.no-animate#js-files-limits-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Files API Rate Limits') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -50,7 +50,7 @@ %section.settings.as-search-limits.no-animate#js-search-limits-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Search rate limits') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -61,7 +61,7 @@ %section.settings.as-deprecated-limits.no-animate#js-deprecated-limits-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Deprecated API rate limits') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -73,7 +73,7 @@ %section.settings.as-git-lfs-limits.no-animate#js-git-lfs-limits-settings{ class: ('expanded' if expanded_by_default?), data: { qa_selector: 'git_lfs_limits_content' } } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Git LFS Rate Limits') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -85,7 +85,7 @@ %section.settings.as-outbound.no-animate#js-outbound-settings{ class: ('expanded' if expanded_by_default?), data: { qa_selector: 'outbound_requests_content' } } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = s_('OutboundRequests|Outbound requests') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do @@ -98,7 +98,7 @@ %section.settings.as-protected-paths.no-animate#js-protected-paths-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Protected paths') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -111,7 +111,7 @@ %section.settings.as-issue-limits.no-animate#js-issue-limits-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Issues Rate Limits') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -123,7 +123,7 @@ %section.settings.as-note-limits.no-animate#js-note-limits-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Notes rate limit') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -135,7 +135,7 @@ %section.settings.as-users-api-limits.no-animate#js-users-api-limits-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Users API rate limit') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -147,7 +147,7 @@ %section.settings.as-import-export-limits.no-animate#js-import-export-limits-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Import and export rate limits') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -159,7 +159,7 @@ %section.settings.as-pipeline-limits.no-animate#js-pipeline-limits-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Pipeline creation rate limits') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') diff --git a/app/views/admin/application_settings/preferences.html.haml b/app/views/admin/application_settings/preferences.html.haml index 858f96fc0d0..bd92f7d490c 100644 --- a/app/views/admin/application_settings/preferences.html.haml +++ b/app/views/admin/application_settings/preferences.html.haml @@ -4,7 +4,7 @@ %section.settings.as-email.no-animate#js-email-settings{ class: ('expanded' if expanded_by_default?), data: { qa_selector: 'email_content' } } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Email') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -15,7 +15,7 @@ %section.settings.as-whats-new-page.no-animate#js-whats-new-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _("What's new") = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -26,7 +26,7 @@ %section.settings.as-help-page.no-animate#js-help-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Sign-in and Help page') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -38,7 +38,7 @@ %section.settings.as-pages.no-animate#js-pages-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Pages') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -49,7 +49,7 @@ %section.settings.as-realtime.no-animate#js-realtime-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Polling interval multiplier') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -61,7 +61,7 @@ %section.settings.as-gitaly.no-animate#js-gitaly-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Gitaly timeouts') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -74,7 +74,7 @@ %section.settings.as-localization.no-animate#js-localization-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Localization') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -85,7 +85,7 @@ %section.settings.as-sidekiq-job-limits.no-animate#js-sidekiq-job-limits-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Sidekiq job size limits') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') diff --git a/app/views/admin/application_settings/reporting.html.haml b/app/views/admin/application_settings/reporting.html.haml index b15fcd93d1a..af9145bf1e7 100644 --- a/app/views/admin/application_settings/reporting.html.haml +++ b/app/views/admin/application_settings/reporting.html.haml @@ -4,7 +4,7 @@ %section.settings.as-spam.no-animate#js-spam-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Spam and Anti-bot Protection') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -18,7 +18,7 @@ %section.settings.as-abuse.no-animate#js-abuse-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Abuse reports') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -27,3 +27,5 @@ = link_to _('Learn more.'), help_page_path('user/admin_area/review_abuse_reports.md'), target: '_blank', rel: 'noopener noreferrer' .settings-content = render 'abuse' + += render_if_exists 'admin/application_settings/git_abuse_rate_limit' diff --git a/app/views/admin/application_settings/repository.html.haml b/app/views/admin/application_settings/repository.html.haml index 785261b4c7b..12063ea700b 100644 --- a/app/views/admin/application_settings/repository.html.haml +++ b/app/views/admin/application_settings/repository.html.haml @@ -4,7 +4,7 @@ %section.settings.as-default-branch-name.no-animate#js-default-branch-name{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Default branch') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -15,7 +15,7 @@ %section.settings.as-mirror.no-animate#js-mirror-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Repository mirroring') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? 'Collapse' : 'Expand' @@ -27,7 +27,7 @@ %section.settings.as-repository-storage.no-animate#js-repository-storage-settings{ class: ('expanded' if expanded_by_default?), data: { qa_selector: 'repository_storage_settings_content' } } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Repository storage') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -39,7 +39,7 @@ %section.settings.as-repository-check.no-animate#js-repository-check-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Repository maintenance') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') @@ -54,7 +54,7 @@ %section.settings.as-repository-static-objects.no-animate#js-repository-static-objects-settings{ class: ('expanded' if expanded_by_default?) } .settings-header - %h4 + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('External storage for repository static objects') = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = expanded_by_default? ? _('Collapse') : _('Expand') diff --git a/app/views/admin/applications/_form.html.haml b/app/views/admin/applications/_form.html.haml index fd73d4c5671..e0926221bcc 100644 --- a/app/views/admin/applications/_form.html.haml +++ b/app/views/admin/applications/_form.html.haml @@ -1,5 +1,5 @@ = gitlab_ui_form_for [:admin, @application], url: @url, html: {role: 'form'} do |f| - = form_errors(application) + = form_errors(application, pajamas_alert: true) = content_tag :div, class: 'form-group row' do .col-sm-2.col-form-label diff --git a/app/views/admin/broadcast_messages/_form.html.haml b/app/views/admin/broadcast_messages/_form.html.haml index dfd3b87c674..865b60a74b8 100644 --- a/app/views/admin/broadcast_messages/_form.html.haml +++ b/app/views/admin/broadcast_messages/_form.html.haml @@ -2,7 +2,7 @@ = render 'preview' = gitlab_ui_form_for [:admin, @broadcast_message], html: { class: 'broadcast-message-form js-quick-submit js-requires-input'} do |f| - = form_errors(@broadcast_message) + = form_errors(@broadcast_message, pajamas_alert: true) .form-group.row.mt-4 .col-sm-2.col-form-label diff --git a/app/views/admin/groups/_form.html.haml b/app/views/admin/groups/_form.html.haml index 43a8d56d584..7bcc97914e5 100644 --- a/app/views/admin/groups/_form.html.haml +++ b/app/views/admin/groups/_form.html.haml @@ -1,40 +1,52 @@ = gitlab_ui_form_for [:admin, @group] do |f| = form_errors(@group, pajamas_alert: true) - = render 'shared/group_form', f: f - = render 'shared/group_form_description', f: f - - = render 'shared/admin/admin_note_form', f: f - - = render_if_exists 'shared/old_repository_size_limit_setting', form: f, type: :group - = render_if_exists 'admin/namespace_plan', f: f - - .form-group.row.group-description-holder - .col-sm-2.col-form-label - = f.label :avatar, _("Group avatar") - .col-sm-10 - = render 'shared/choose_avatar_button', f: f - - = render 'shared/old_visibility_level', f: f, visibility_level: visibility_level, can_change_visibility_level: can_change_group_visibility_level?(@group), form_model: @group, with_label: false - - .form-group.row - .offset-sm-2.col-sm-10 - = render 'shared/allow_request_access', form: f - - = render 'groups/group_admin_settings', f: f - - = render_if_exists 'namespaces/shared_runners_minutes_settings', group: @group, form: f + .gl-border-b.gl-mb-6 + .row + .col-lg-4 + %h4.gl-mt-0 + = _('Naming, visibility') + %p + = _('Update your group name, description, avatar, and visibility.') + = link_to _('Learn more about groups.'), help_page_path('user/group/index') + .col-lg-8 + = render 'shared/group_form', f: f + = render 'shared/group_form_description', f: f + .form-group.gl-form-group{ role: 'group' } + = f.label :avatar, _("Group avatar"), class: 'gl-display-block col-form-label' + = render 'shared/choose_avatar_button', f: f + = render 'shared/old_visibility_level', f: f, visibility_level: visibility_level, can_change_visibility_level: can_change_group_visibility_level?(@group), form_model: @group, with_label: false + + .gl-border-b.gl-pb-3.gl-mb-6 + .row + .col-lg-4 + %h4.gl-mt-0 + = _('Permissions and group features') + %p + = _('Configure advanced permissions, Large File Storage, two-factor authentication, and CI/CD settings.') + .col-lg-8 + = render_if_exists 'shared/old_repository_size_limit_setting', form: f, type: :group + = render_if_exists 'admin/namespace_plan', f: f + .form-group.gl-form-group{ role: 'group' } + = render 'shared/allow_request_access', form: f + = render 'groups/group_admin_settings', f: f + = render_if_exists 'namespaces/shared_runners_minutes_settings', group: @group, form: f + .gl-mb-3 + .row + .col-lg-4 + %h4.gl-mt-0 + = _('Admin notes') + .col-lg-8 + = render 'shared/admin/admin_note_form', f: f - if @group.new_record? - .form-group.row - .offset-sm-2.col-sm-10 - = render Pajamas::AlertComponent.new(dismissible: false) do |c| - = c.body do - = render 'shared/group_tips' - .form-actions + = render Pajamas::AlertComponent.new(dismissible: false) do |c| + = c.body do + = render 'shared/group_tips' + .gl-mt-5 = f.submit _('Create group'), class: "gl-button btn btn-confirm" = link_to _('Cancel'), admin_groups_path, class: "gl-button btn btn-default btn-cancel" - else - .form-actions + .gl-mt-5 = f.submit _('Save changes'), class: "gl-button btn btn-confirm", data: { qa_selector: 'save_changes_button' } = link_to _('Cancel'), admin_group_path(@group), class: "gl-button btn btn-cancel" diff --git a/app/views/admin/identities/_form.html.haml b/app/views/admin/identities/_form.html.haml index ba7687db9c7..40c4d292e9d 100644 --- a/app/views/admin/identities/_form.html.haml +++ b/app/views/admin/identities/_form.html.haml @@ -1,5 +1,5 @@ = form_for [:admin, @user, @identity], html: { class: 'fieldset-form' } do |f| - = form_errors(@identity) + = form_errors(@identity, pajamas_alert: true) .form-group.row .col-sm-2.col-form-label diff --git a/app/views/admin/identities/index.html.haml b/app/views/admin/identities/index.html.haml index b4dd92bf15c..2bab802b2c1 100644 --- a/app/views/admin/identities/index.html.haml +++ b/app/views/admin/identities/index.html.haml @@ -3,7 +3,6 @@ - page_title _("Identities"), @user.name, _("Users") = render 'admin/users/head' -= link_to _('New identity'), new_admin_user_identity_path, class: 'float-right gl-button btn-confirm' - if @identities.present? .table-holder %table.table diff --git a/app/views/admin/system_info/show.html.haml b/app/views/admin/system_info/show.html.haml index 7a34972dfbf..049f3d61294 100644 --- a/app/views/admin/system_info/show.html.haml +++ b/app/views/admin/system_info/show.html.haml @@ -29,9 +29,9 @@ %h4.page-title.d-flex .gl-display-flex.gl-align-items-center.gl-justify-content-center = sprite_icon('clock', size: 18, css_class: 'pod-icon gl-mr-3') - = _('Uptime') + = _('System started') .data - %h2= distance_of_time_in_words_to_now(Rails.application.config.booted_at) + %h2= time_ago_with_tooltip(Rails.application.config.booted_at) .col-sm .bg-light.info-well.p-3 %h4.page-title.d-flex diff --git a/app/views/admin/topics/_topic.html.haml b/app/views/admin/topics/_topic.html.haml index 462943263df..869194a21f6 100644 --- a/app/views/admin/topics/_topic.html.haml +++ b/app/views/admin/topics/_topic.html.haml @@ -18,3 +18,4 @@ .controls.gl-flex-shrink-0.gl-ml-5 = link_to _('Edit'), edit_admin_topic_path(topic), id: "edit_#{dom_id(topic)}", class: 'btn gl-button btn-default' + = link_to _('Remove'), admin_topic_path(topic), aria: { label: _('Remove') }, data: { confirm: _("Are you sure you want to remove %{topic_name}?") % { topic_name: title }, confirm_btn_variant: 'danger' }, method: :delete, class: 'gl-button btn btn-danger' diff --git a/app/views/admin/users/_access_levels.html.haml b/app/views/admin/users/_access_levels.html.haml index cf951ae0265..b255354f2c1 100644 --- a/app/views/admin/users/_access_levels.html.haml +++ b/app/views/admin/users/_access_levels.html.haml @@ -1,52 +1,48 @@ -%fieldset - %legend.gl-border-bottom-0 - = s_('AdminUsers|Access') - .form-group.row - .col-12 - = f.label :projects_limit - = f.number_field :projects_limit, min: 0, max: Gitlab::Database::MAX_INT_VALUE, class: 'form-control gl-form-input' - - .form-group.row - .col-12.gl-pt-0 - = f.label :can_create_group - = f.gitlab_ui_checkbox_component :can_create_group, '' - - .form-group.row - .col-12.gl-pt-0 - = f.label :access_level - - editing_current_user = (current_user == @user) - - = f.gitlab_ui_radio_component :access_level, :regular, - s_('AdminUsers|Regular'), - radio_options: { disabled: editing_current_user }, - help_text: s_('AdminUsers|Regular users have access to their groups and projects.') - - = render_if_exists 'admin/users/auditor_access_level_radio', f: f, disabled: editing_current_user - - - help_text = s_('AdminUsers|The user has unlimited access to all groups, projects, users, and features.') - - help_text += ' ' + s_('AdminUsers|You cannot remove your own administrator access.') if editing_current_user - = f.gitlab_ui_radio_component :access_level, :admin, - s_('AdminUsers|Administrator'), - radio_options: { disabled: editing_current_user }, - help_text: help_text - - - .form-group.row - .col-12.gl-pt-0 - = f.label :external - .hidden{ data: user_internal_regex_data } - .col-12.gl-display-flex.gl-align-items-baseline - = f.gitlab_ui_checkbox_component :external, s_('AdminUsers|External users cannot see internal or private projects unless access is explicitly granted. Also, external users cannot create projects, groups, or personal snippets.') - %row.hidden#warning_external_automatically_set - = gl_badge_tag s_('AdminUsers|Automatically marked as default internal user'), variant: :warning - - .form-group.row - - @user.credit_card_validation || @user.build_credit_card_validation - = f.fields_for :credit_card_validation do |ff| - .col-12.gl-pt-0 - = ff.label s_('AdminUsers|Validate user account') - .col-12.gl-display-flex.gl-align-items-baseline - = ff.gitlab_ui_checkbox_component :credit_card_validated_at, - s_('AdminUsers|User is validated and can use free CI minutes on shared runners.'), - help_text: s_('AdminUsers|A user can validate themselves by inputting a credit/debit card, or an admin can manually validate a user.'), - checkbox_options: { checked: @user.credit_card_validated_at.present? } +.gl-border-b.gl-pb-3.gl-mb-6 + .row + .col-lg-4 + %h4.gl-mt-0 + = s_('AdminUsers|Access') + .col-lg-8 + .form-group.gl-form-group{ role: 'group' } + = f.label :projects_limit, class: 'gl-display-block col-form-label' + = f.number_field :projects_limit, min: 0, max: Gitlab::Database::MAX_INT_VALUE, class: 'form-control gl-form-input' + + .form-group.gl-form-group{ role: 'group' } + = f.gitlab_ui_checkbox_component :can_create_group, s_('AdminUsers|Can create group') + + %fieldset.form-group.gl-form-group + %legend.col-form-label.col-form-label + = s_('AdminUsers|Access level') + - editing_current_user = (current_user == @user) + + = f.gitlab_ui_radio_component :access_level, :regular, + s_('AdminUsers|Regular'), + radio_options: { disabled: editing_current_user }, + help_text: s_('AdminUsers|Regular users have access to their groups and projects.') + + = render_if_exists 'admin/users/auditor_access_level_radio', f: f, disabled: editing_current_user + + - help_text = s_('AdminUsers|The user has unlimited access to all groups, projects, users, and features.') + - help_text += ' ' + s_('AdminUsers|You cannot remove your own administrator access.') if editing_current_user + = f.gitlab_ui_radio_component :access_level, :admin, + s_('AdminUsers|Administrator'), + radio_options: { disabled: editing_current_user }, + help_text: help_text + + .form-group.gl-form-group{ role: 'group' } + = f.gitlab_ui_checkbox_component :external, + s_('AdminUsers|External'), + help_text: s_('AdminUsers|External users cannot see internal or private projects unless access is explicitly granted. Also, external users cannot create projects, groups, or personal snippets.') + .hidden{ data: user_internal_regex_data } + .gl-display-flex.gl-align-items-baseline + %row.hidden#warning_external_automatically_set + = gl_badge_tag s_('AdminUsers|Automatically marked as default internal user'), variant: :warning + + .form-group.gl-form-group{ role: 'group' } + - @user.credit_card_validation || @user.build_credit_card_validation + = f.fields_for :credit_card_validation do |ff| + = ff.gitlab_ui_checkbox_component :credit_card_validated_at, + s_('AdminUsers|Validate user account'), + help_text: s_('AdminUsers|A user can validate themselves by inputting a credit/debit card, or an admin can manually validate a user. Validated users can use free CI minutes on shared runners.'), + checkbox_options: { checked: @user.credit_card_validated_at.present? } diff --git a/app/views/admin/users/_admin_notes.html.haml b/app/views/admin/users/_admin_notes.html.haml index 10f654e0f71..dce008afb26 100644 --- a/app/views/admin/users/_admin_notes.html.haml +++ b/app/views/admin/users/_admin_notes.html.haml @@ -1,6 +1,9 @@ -%fieldset - %legend.gl-border-bottom-0= _('Admin notes') - .form-group.row - .col-12 - = f.label :note, s_('Admin|Note') - = f.text_area :note, class: 'form-control gl-form-input gl-form-textarea' +.gl-mb-3 + .row + .col-lg-4 + %h4.gl-mt-0 + = _('Admin notes') + .col-lg-8 + .form-group.gl-form-group{ role: 'group' } + = f.label :note, s_('Admin|Note') + = f.text_area :note, class: 'form-control gl-form-input gl-form-textarea' diff --git a/app/views/admin/users/_form.html.haml b/app/views/admin/users/_form.html.haml index 7995bc1b6f4..5ac15694922 100644 --- a/app/views/admin/users/_form.html.haml +++ b/app/views/admin/users/_form.html.haml @@ -2,41 +2,42 @@ = gitlab_ui_form_for [:admin, @user], html: { class: 'fieldset-form' } do |f| = form_errors(@user, pajamas_alert: true) - %fieldset - %legend.gl-border-bottom-0= _('Account') - .form-group.row - .col-12 - = f.label "#{:name} (required)" - = f.text_field :name, required: true, autocomplete: 'off', class: 'form-control gl-form-input' - .form-group.row - .col-12 - = f.label "#{:username} (required)" - = f.text_field :username, required: true, autocomplete: 'off', autocorrect: 'off', autocapitalize: 'off', spellcheck: false, class: 'form-control gl-form-input' - .form-group.row - .col-12 - = f.label "#{:email} (required)" - = f.text_field :email, required: true, autocomplete: 'off', class: 'form-control gl-form-input' + .gl-border-b.gl-pb-3.gl-mb-6 + .row + .col-lg-4 + %h4.gl-mt-0 + = _('Account') + .col-lg-8 + .form-group.gl-form-group{ role: 'group' } + = f.label :name, _('Name'), class: 'gl-display-block col-form-label' + = f.text_field :name, required: true, autocomplete: 'off', class: 'form-control gl-form-input' - - if @user.new_record? - %fieldset - %legend.gl-border-bottom-0= _('Password') - .form-group.row - .col-12 - %strong - = _('Reset link will be generated and sent to the user. %{break} User will be forced to set the password on first sign in.').html_safe % { break: '<br />'.html_safe } - - else - %fieldset - %legend.gl-border-bottom-0= _('Password') - .form-group.row - .col-12 - = f.label :password - .col-12 - = f.password_field :password, disabled: f.object.force_random_password, autocomplete: 'new-password', class: 'form-control gl-form-input' - .form-group.row - .col-12 - = f.label :password_confirmation - .col-12 - = f.password_field :password_confirmation, disabled: f.object.force_random_password, autocomplete: 'new-password', class: 'form-control gl-form-input' + .form-group.gl-form-group{ role: 'group' } + = f.label :username, _('Username'), class: 'gl-display-block col-form-label' + = f.text_field :username, required: true, autocomplete: 'off', autocorrect: 'off', autocapitalize: 'off', spellcheck: false, class: 'form-control gl-form-input' + + .form-group.gl-form-group{ role: 'group' } + = f.label :email, _('Email'), class: 'gl-display-block col-form-label' + = f.text_field :email, required: true, autocomplete: 'off', class: 'form-control gl-form-input' + + .gl-border-b.gl-pb-3.gl-mb-6 + .row + .col-lg-4 + %h4.gl-mt-0 + = _('Password') + .col-lg-8 + - if @user.new_record? + = render Pajamas::AlertComponent.new(variant: :info, dismissible: false, alert_options: { class: 'gl-mb-5' }) do |c| + = c.body do + = s_('AdminUsers|Reset link will be generated and sent to the user. User will be forced to set the password on first sign in.') + - else + .form-group.gl-form-group{ role: 'group' } + = f.label :password, _('Password'), class: 'gl-display-block col-form-label' + = f.password_field :password, disabled: f.object.force_random_password, autocomplete: 'new-password', class: 'form-control gl-form-input js-password-complexity-validation' + = render_if_exists 'shared/password_requirements_list' + .form-group.gl-form-group{ role: 'group' } + = f.label :password_confirmation, _('Password confirmation'), class: 'gl-display-block col-form-label' + = f.password_field :password_confirmation, disabled: f.object.force_random_password, autocomplete: 'new-password', class: 'form-control gl-form-input' = render partial: 'access_levels', locals: { f: f } @@ -44,30 +45,31 @@ = render_if_exists 'admin/users/limits', f: f - %fieldset - %legend.gl-border-bottom-0= _('Profile') - .form-group.row - .col-12 - = f.label :avatar - .col-12 - = f.file_field :avatar + .gl-border-b.gl-pb-6.gl-mb-6 + .row + .col-lg-4 + %h4.gl-mt-0 + = _('Profile') + .col-lg-8 + .form-group.gl-form-group{ role: 'group' } + = f.label :avatar, s_('AdminUsers|Avatar'), class: 'gl-display-block col-form-label' + = f.file_field :avatar + + .form-group.gl-form-group{ role: 'group' } + = f.label :skype, s_('AdminUsers|Skype'), class: 'gl-display-block col-form-label' + = f.text_field :skype, class: 'form-control gl-form-input' + + .form-group.gl-form-group{ role: 'group' } + = f.label :linkedin, s_('AdminUsers|Linkedin'), class: 'gl-display-block col-form-label' + = f.text_field :linkedin, class: 'form-control gl-form-input' + + .form-group.gl-form-group{ role: 'group' } + = f.label :twitter, _('Twitter'), class: 'gl-display-block col-form-label' + = f.text_field :twitter, class: 'form-control gl-form-input' - .form-group.row - .col-12 - = f.label :skype - = f.text_field :skype, class: 'form-control gl-form-input' - .form-group.row - .col-12 - = f.label :linkedin - = f.text_field :linkedin, class: 'form-control gl-form-input' - .form-group.row - .col-12 - = f.label :twitter - = f.text_field :twitter, class: 'form-control gl-form-input' - .form-group.row - .col-12 - = f.label :website_url - = f.text_field :website_url, class: 'form-control gl-form-input' + .form-group.gl-form-group{ role: 'group' } + = f.label :website_url, s_('AdminUsers|Website URL'), class: 'gl-display-block col-form-label' + = f.text_field :website_url, class: 'form-control gl-form-input' = render 'admin/users/admin_notes', f: f diff --git a/app/views/admin/users/_head.html.haml b/app/views/admin/users/_head.html.haml index 529692df0b6..ed453b42725 100644 --- a/app/views/admin/users/_head.html.haml +++ b/app/views/admin/users/_head.html.haml @@ -27,15 +27,18 @@ = render_if_exists 'admin/users/gma_user_badge' .gl-my-3.gl-display-flex.gl-flex-wrap.gl-my-n2.gl-mx-n2 + .gl-p-2 + #js-admin-user-actions{ data: admin_user_actions_data_attributes(@user) } - if @user != current_user - .gl-p-2 - - if impersonation_enabled? && @user.can?(:log_in) + - if impersonation_enabled? && @user.can?(:log_in) + .gl-p-2 = link_to _('Impersonate'), impersonate_admin_user_path(@user), method: :post, class: "btn btn-default gl-button", data: { qa_selector: 'impersonate_user_link' } - - if can_force_email_confirmation?(@user) - = render Pajamas::ButtonComponent.new(variant: :confirm, button_options: { class: 'js-confirm-modal-button', data: confirm_user_data(@user) }) do + - if can_force_email_confirmation?(@user) + .gl-p-2 + = render Pajamas::ButtonComponent.new(variant: :default, button_options: { class: 'js-confirm-modal-button', data: confirm_user_data(@user) }) do = _('Confirm user') .gl-p-2 - #js-admin-user-actions{ data: admin_user_actions_data_attributes(@user) } + = link_to _('New identity'), new_admin_user_identity_path(@user), class: "btn btn-primary gl-button" = gl_tabs_nav do = gl_tab_link_to _("Account"), admin_user_path(@user) = gl_tab_link_to _("Groups and projects"), projects_admin_user_path(@user) diff --git a/app/views/admin/users/_users.html.haml b/app/views/admin/users/_users.html.haml index 2dbafb517be..8c77cb394ba 100644 --- a/app/views/admin/users/_users.html.haml +++ b/app/views/admin/users/_users.html.haml @@ -64,6 +64,6 @@ = gl_redirect_listbox_tag admin_users_sort_options(filter: params[:filter], search_query: params[:search_query]), @sort, data: { right: true } #js-admin-users-app{ data: admin_users_data_attributes(@users) } - = gl_loading_icon(size: 'lg', css_class: 'gl-my-7') + = render Pajamas::SpinnerComponent.new(size: :lg, class: 'gl-my-7') = paginate_collection @users diff --git a/app/views/clusters/clusters/_integrations.html.haml b/app/views/clusters/clusters/_integrations.html.haml index 62ae551fee7..4a3062def8c 100644 --- a/app/views/clusters/clusters/_integrations.html.haml +++ b/app/views/clusters/clusters/_integrations.html.haml @@ -14,15 +14,3 @@ s_('ClusterIntegration|Enable Prometheus integration'), help_text: '%{help_text} %{help_link}'.html_safe % { help_text: help_text, help_link: help_link } = prometheus_form.submit _('Save changes'), class: 'btn gl-button btn-confirm' - - - if Feature.enabled?(:monitor_logging, @project) - .sub-section.form-group - = gitlab_ui_form_for @elastic_stack_integration, as: :integration, namespace: :elastic_stack, url: @cluster.integrations_path, method: :post, html: { class: 'js-cluster-integrations-form' } do |elastic_stack_form| - = elastic_stack_form.hidden_field :application_type - .form-group.gl-form-group - - help_text = s_('ClusterIntegration|Allows GitLab to query a specifically configured in-cluster Elasticsearch for pod logs.') - - help_link = link_to(_('More information.'), help_page_path("user/clusters/integrations", anchor: "elastic-stack-cluster-integration"), target: '_blank', rel: 'noopener noreferrer') - = elastic_stack_form.gitlab_ui_checkbox_component :enabled, - s_('ClusterIntegration|Enable Elastic Stack integration'), - help_text: '%{help_text} %{help_link}'.html_safe % { help_text: help_text, help_link: help_link } - = elastic_stack_form.submit _('Save changes'), class: 'btn gl-button btn-confirm' diff --git a/app/views/clusters/clusters/_namespace.html.haml b/app/views/clusters/clusters/_namespace.html.haml index cedece5ad93..572f2d6d9a2 100644 --- a/app/views/clusters/clusters/_namespace.html.haml +++ b/app/views/clusters/clusters/_namespace.html.haml @@ -1,5 +1,5 @@ - managed_namespace_help_text = s_('ClusterIntegration|Set a prefix for your namespaces. If not set, defaults to your project path. If modified, existing environments will use their current namespaces until the cluster cache is cleared.') -- non_managed_namespace_help_text = s_('ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, logs, and Web terminals.') +- non_managed_namespace_help_text = s_('ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, and Web terminals.') - managed_namespace_help_link = link_to _('More information'), help_page_path('user/project/clusters/gitlab_managed_clusters.md'), target: '_blank', rel: 'noopener noreferrer' .js-namespace-prefixed diff --git a/app/views/clusters/clusters/cloud_providers/_cloud_provider_button.html.haml b/app/views/clusters/clusters/cloud_providers/_cloud_provider_button.html.haml index bed671832f3..3e0a8a4f88b 100644 --- a/app/views/clusters/clusters/cloud_providers/_cloud_provider_button.html.haml +++ b/app/views/clusters/clusters/cloud_providers/_cloud_provider_button.html.haml @@ -2,10 +2,11 @@ - help_path = local_assigns.fetch(:help_path) - label = local_assigns.fetch(:label) - last = local_assigns.fetch(:last, false) -- classes = ["btn btn-confirm gl-button btn-confirm-secondary gl-flex-direction-column gl-w-half"] +- classes = ["btn btn-confirm gl-button btn-confirm-secondary gl-flex-direction-column gl-flex-basis-0 gl-flex-grow-1 gl-min-w-0"] - conditional_classes = [("gl-mr-5" unless last)] = link_to help_path, class: classes + conditional_classes do - .svg-content.gl-p-3= image_tag logo_path, alt: label, class: "gl-w-64 gl-h-64" - %span + %span.gl-display-flex.gl-align-items-center.gl-m-3.gl-h-64 + = image_tag logo_path, alt: label, class: "gl-w-15 gl-max-h-full gl-max-w-full" + %span.gl-white-space-normal = label diff --git a/app/views/clusters/clusters/cloud_providers/_cloud_provider_selector.html.haml b/app/views/clusters/clusters/cloud_providers/_cloud_provider_selector.html.haml index e4128ee22a4..7039ce57bd9 100644 --- a/app/views/clusters/clusters/cloud_providers/_cloud_provider_selector.html.haml +++ b/app/views/clusters/clusters/cloud_providers/_cloud_provider_selector.html.haml @@ -1,14 +1,18 @@ - gke_label = s_('ClusterIntegration|Google GKE') - eks_label = s_('ClusterIntegration|Amazon EKS') +- civo_label = s_('ClusterIntegration|Civo Kubernetes') - create_cluster_label = s_('ClusterIntegration|Where do you want to create a cluster?') -- eks_help_path = help_page_path('user/infrastructure/clusters/connect/new_eks_cluster') -- gke_help_path = help_page_path('user/infrastructure/clusters/connect/new_gke_cluster') +- eks_help_path = help_page_path('user/infrastructure/clusters/connect/new_eks_cluster.md') +- gke_help_path = help_page_path('user/infrastructure/clusters/connect/new_gke_cluster.md') +- civo_help_path = help_page_path('user/infrastructure/clusters/connect/new_civo_cluster.md') -.gl-p-5 +.gl-py-5.gl-md-pl-5.gl-md-pr-5 %h4.gl-mb-5 = create_cluster_label .gl-display-flex = render partial: 'clusters/clusters/cloud_providers/cloud_provider_button', locals: { label: eks_label, logo_path: 'illustrations/logos/amazon_eks.svg', help_path: eks_help_path } = render partial: 'clusters/clusters/cloud_providers/cloud_provider_button', + locals: { label: civo_label, logo_path: 'illustrations/third-party-logos/civo.svg', help_path: civo_help_path } + = render partial: 'clusters/clusters/cloud_providers/cloud_provider_button', locals: { label: gke_label, logo_path: 'illustrations/logos/google_gke.svg', help_path: gke_help_path, last: true } diff --git a/app/views/dashboard/_activities.html.haml b/app/views/dashboard/_activities.html.haml index 7c948260d4b..ed6cecdcc3d 100644 --- a/app/views/dashboard/_activities.html.haml +++ b/app/views/dashboard/_activities.html.haml @@ -6,4 +6,4 @@ .content_list .loading - = gl_loading_icon(size: 'md') + = render Pajamas::SpinnerComponent.new(size: :md) diff --git a/app/views/dashboard/projects/_blank_state_welcome.html.haml b/app/views/dashboard/projects/_blank_state_welcome.html.haml index e0b8850357e..0658d548eab 100644 --- a/app/views/dashboard/projects/_blank_state_welcome.html.haml +++ b/app/views/dashboard/projects/_blank_state_welcome.html.haml @@ -39,7 +39,7 @@ %p = _('Public projects are an easy way to allow everyone to have read-only access.') - = link_to "https://docs.gitlab.com/", class: link_classes do + = link_to Gitlab::Saas::doc_url, class: link_classes do .blank-state-icon = custom_icon("lightbulb", size: 50) .blank-state-body.gl-sm-pl-0.gl-pl-6 diff --git a/app/views/dashboard/todos/_todo.html.haml b/app/views/dashboard/todos/_todo.html.haml index c932b416b66..8d82116bf10 100644 --- a/app/views/dashboard/todos/_todo.html.haml +++ b/app/views/dashboard/todos/_todo.html.haml @@ -12,7 +12,7 @@ - if todo.author = link_to_author(todo, self_added: todo.self_added?) - else - (removed) + = _('(removed)') %span.title-item.action-name{ data: { qa_selector: "todo_action_name_content" } } = todo_action_name(todo) @@ -45,17 +45,17 @@ .todo-body .todo-note.break-word .md - = first_line_in_markdown(todo, :body, 150, project: todo.project) + = first_line_in_markdown(todo, :body, 150, project: todo.project, group: todo.group) .todo-actions.gl-ml-3 - if todo.pending? = link_to dashboard_todo_path(todo), method: :delete, class: 'gl-button btn btn-default btn-loading d-flex align-items-center js-done-todo', data: { href: dashboard_todo_path(todo) } do = gl_loading_icon(inline: true) - Done + = _('Done') = link_to restore_dashboard_todo_path(todo), method: :patch, class: 'gl-button btn btn-default btn-loading d-flex align-items-center js-undo-todo hidden', data: { href: restore_dashboard_todo_path(todo) } do = gl_loading_icon(inline: true) - Undo + = _('Undo') - else = link_to restore_dashboard_todo_path(todo), method: :patch, class: 'gl-button btn btn-default btn-loading d-flex align-items-center js-add-todo', data: { href: restore_dashboard_todo_path(todo) } do = gl_loading_icon(inline: true) - Add a to do + = _('Add a to do') diff --git a/app/views/devise/passwords/edit.html.haml b/app/views/devise/passwords/edit.html.haml index 56bd30fac73..498fb08969c 100644 --- a/app/views/devise/passwords/edit.html.haml +++ b/app/views/devise/passwords/edit.html.haml @@ -1,17 +1,18 @@ = render 'devise/shared/tab_single', tab_title: _('Change your password') .login-box .login-body - = form_for(resource, as: resource_name, url: password_path(:user), html: { method: :put, class: 'gl-show-field-errors' }) do |f| - .devise-errors + = form_for(resource, as: resource_name, url: password_path(:user), html: { method: :put, class: 'gl-show-field-errors gl-pt-5' }) do |f| + .devise-errors.gl-px-5 = render "devise/shared/error_messages", resource: resource = f.hidden_field :reset_password_token - .form-group + .form-group.gl-px-5 = f.label _('New password'), for: "user_password" - = f.password_field :password, autocomplete: 'new-password', class: "form-control gl-form-input top", required: true, title: _('This field is required.'), data: { qa_selector: 'password_field'} - .form-group + = f.password_field :password, autocomplete: 'new-password', class: "form-control gl-form-input top js-password-complexity-validation", required: true, title: _('This field is required.'), data: { qa_selector: 'password_field'} + = render_if_exists 'shared/password_requirements_list' + .form-group.gl-px-5 = f.label _('Confirm new password'), for: "user_password_confirmation" = f.password_field :password_confirmation, autocomplete: 'new-password', class: "form-control gl-form-input bottom", title: _('This field is required.'), data: { qa_selector: 'password_confirmation_field' }, required: true - .clearfix + .clearfix.gl-px-5.gl-pb-5 = f.submit _("Change your password"), class: "gl-button btn btn-confirm", data: { qa_selector: 'change_password_button' } .clearfix.prepend-top-20 diff --git a/app/views/devise/sessions/_new_ldap.html.haml b/app/views/devise/sessions/_new_ldap.html.haml index 4cde24f4afa..d06043c1750 100644 --- a/app/views/devise/sessions/_new_ldap.html.haml +++ b/app/views/devise/sessions/_new_ldap.html.haml @@ -15,5 +15,5 @@ = check_box_tag :remember_me, '1', false, id: 'remember_me' %span= _('Remember me') - .submit-container.move-submit-down.gl-px-5 + .submit-container.move-submit-down.gl-px-5.gl-pb-5 = submit_tag submit_message, class: "gl-button btn btn-confirm", data: { qa_selector: 'sign_in_button' } diff --git a/app/views/devise/sessions/email_verification.haml b/app/views/devise/sessions/email_verification.haml new file mode 100644 index 00000000000..6cafcb941b4 --- /dev/null +++ b/app/views/devise/sessions/email_verification.haml @@ -0,0 +1,19 @@ +%div + = render 'devise/shared/tab_single', tab_title: s_('IdentityVerification|Help us protect your account') + .login-box.gl-p-5 + .login-body + = form_for(resource, as: resource_name, url: session_path(resource_name), method: :post, html: { class: 'gl-show-field-errors' }) do |f| + %p + = s_("IdentityVerification|For added security, you'll need to verify your identity. We've sent a verification code to %{email}").html_safe % { email: "<strong>#{sanitize(obfuscated_email(resource.email))}</strong>".html_safe } + %div + = f.label :verification_token, s_('IdentityVerification|Verification code') + = f.text_field :verification_token, class: 'form-control gl-form-input', required: true, autofocus: true, autocomplete: 'off', title: s_('IdentityVerification|Please enter a valid code'), inputmode: 'numeric', maxlength: 6, pattern: '[0-9]{6}' + %p.gl-field-error.gl-mt-2 + = resource.errors.full_messages.to_sentence + .gl-mt-5 + = f.submit s_('IdentityVerification|Verify code'), class: 'gl-button btn btn-confirm' + - unless send_rate_limited?(resource) + = link_to s_('IdentityVerification|Resend code'), users_resend_verification_code_path, method: :post, class: 'form-control gl-button btn-link gl-mt-3 gl-mb-0' + %p.gl-p-5.gl-text-secondary + - support_link_start = '<a href="https://about.gitlab.com/support/" target="_blank" rel="noopener noreferrer">'.html_safe + = s_("IdentityVerification|If you've lost access to the email associated to this account or having trouble with the code, %{link_start}here are some other steps you can take.%{link_end}").html_safe % { link_start: support_link_start, link_end: '</a>'.html_safe } diff --git a/app/views/devise/sessions/new.html.haml b/app/views/devise/sessions/new.html.haml index c669f3efec6..9a09f6bee38 100644 --- a/app/views/devise/sessions/new.html.haml +++ b/app/views/devise/sessions/new.html.haml @@ -1,7 +1,9 @@ - page_title _("Sign in") - content_for :page_specific_javascripts do + = render "layouts/google_tag_manager_head" = render "layouts/one_trust" = render "layouts/bizible" += render "layouts/google_tag_manager_body" #signin-container - if any_form_based_providers_enabled? diff --git a/app/views/devise/sessions/successful_verification.haml b/app/views/devise/sessions/successful_verification.haml new file mode 100644 index 00000000000..8af80fbdceb --- /dev/null +++ b/app/views/devise/sessions/successful_verification.haml @@ -0,0 +1,11 @@ += content_for :meta_tags do + %meta{ 'http-equiv': 'refresh', content: "3; url=#{@redirect_url}" } +.gl-text-center.gl-max-w-62.gl-mx-auto + .svg-content.svg-80 + = image_tag 'illustrations/success-sm.svg' + %h2 + = s_('IdentityVerification|Verification successful') + %p.gl-pt-2 + - redirect_url_start = '<a href="%{url}"">'.html_safe % { url: @redirect_url } + - redirect_url_end = '</a>'.html_safe + = html_escape(s_("IdentityVerification|Your account has been successfully verified. You'll be redirected to your account in just a moment or %{redirect_url_start}click here%{redirect_url_end} to refresh.")) % { redirect_url_start: redirect_url_start, redirect_url_end: redirect_url_end } diff --git a/app/views/devise/shared/_signup_box.html.haml b/app/views/devise/shared/_signup_box.html.haml index 57135c6cdfc..1868cfa06e9 100644 --- a/app/views/devise/shared/_signup_box.html.haml +++ b/app/views/devise/shared/_signup_box.html.haml @@ -45,21 +45,24 @@ = f.label :email, class: 'label-bold' = f.email_field :email, value: @invite_email, - class: 'form-control gl-form-input middle', + class: 'form-control gl-form-input middle js-validate-email', data: { qa_selector: 'new_user_email_field' }, required: true, title: _('Please provide a valid email address.') %p.gl-field-hint.text-secondary= _('We recommend a work email address.') + -# This is used for providing entry to Jihu on email verification + = render_if_exists 'devise/shared/signup_email_additional_info' .form-group.gl-mb-5#password-strength = f.label :password, class: 'label-bold' = f.password_field :password, - class: 'form-control gl-form-input bottom', + class: 'form-control gl-form-input bottom js-password-complexity-validation', data: { qa_selector: 'new_user_password_field' }, autocomplete: 'new-password', required: true, pattern: ".{#{@minimum_password_length},}", title: s_('SignUp|Minimum length is %{minimum_password_length} characters.') % { minimum_password_length: @minimum_password_length } %p.gl-field-hint.text-secondary= s_('SignUp|Minimum length is %{minimum_password_length} characters.') % { minimum_password_length: @minimum_password_length } + = render_if_exists 'shared/password_requirements_list' = render_if_exists 'devise/shared/phone_verification', form: f %div - if show_recaptcha_sign_up? diff --git a/app/views/errors/not_found.html.haml b/app/views/errors/not_found.html.haml index 291adbc0ae8..54291cd9abc 100644 --- a/app/views/errors/not_found.html.haml +++ b/app/views/errors/not_found.html.haml @@ -11,5 +11,6 @@ = form_tag search_path, method: :get, class: 'form-inline-flex' do |f| .field = search_field_tag :search, '', placeholder: _('Search for projects, issues, etc.'), class: 'form-control' - = button_tag _('Search'), class: 'gl-button btn btn-sm btn-success', name: nil, type: 'submit' + = render Pajamas::ButtonComponent.new(variant: :confirm, size: :small, type: :submit) do + = _('Search') = render 'errors/footer' diff --git a/app/views/errors/omniauth_error.html.haml b/app/views/errors/omniauth_error.html.haml index e114e4609f8..3090c823677 100644 --- a/app/views/errors/omniauth_error.html.haml +++ b/app/views/errors/omniauth_error.html.haml @@ -2,14 +2,18 @@ .container = render partial: "shared/errors/graphic_422", formats: :svg - %h3 Sign-in using #{@provider} auth failed + %h3 + = _('Sign-in using %{provider} auth failed') % { provider: @provider } - %p.light.subtitle Sign-in failed because #{@error}. + %p.light.subtitle + = _('Sign-in failed because %{error}.') % { error: @error } - %p Try logging in using your username or email. If you have forgotten your password, try recovering it + %p + = _('Try logging in using your username or email. If you have forgotten your password, try recovering it') - = link_to "Sign in", new_session_path(:user), class: 'gl-button btn primary' - = link_to "Recover password", new_password_path(:user), class: 'gl-button btn secondary' + = link_to _('Sign in'), new_session_path(:user), class: 'gl-button btn primary' + = link_to _('Recover password'), new_password_path(:user), class: 'gl-button btn secondary' %hr - %p.light If none of the options work, try contacting a GitLab administrator. + %p.light + = _('If none of the options work, try contacting a GitLab administrator.') diff --git a/app/views/groups/_activities.html.haml b/app/views/groups/_activities.html.haml index 614d9610f31..757c0a836f3 100644 --- a/app/views/groups/_activities.html.haml +++ b/app/views/groups/_activities.html.haml @@ -6,4 +6,4 @@ .content_list .loading - = gl_loading_icon(size: 'md') + = render Pajamas::SpinnerComponent.new(size: :md) diff --git a/app/views/groups/_group_admin_settings.html.haml b/app/views/groups/_group_admin_settings.html.haml index 0a170ebdb24..687a1fb32bf 100644 --- a/app/views/groups/_group_admin_settings.html.haml +++ b/app/views/groups/_group_admin_settings.html.haml @@ -1,34 +1,29 @@ -.form-group.row - .col-sm-2.col-form-label.pt-0 - = f.label :lfs_enabled, _('Large File Storage') - .col-sm-10 - = f.gitlab_ui_checkbox_component :lfs_enabled, checkbox_options: { checked: @group.lfs_enabled? } do |c| - = c.label do - = _('Allow projects within this group to use Git LFS') - = link_to sprite_icon('question-o'), help_page_path('topics/git/lfs/index'), class: 'gl-ml-2' - = c.help_text do - = _('This setting can be overridden in each project.') -.form-group.row - .col-sm-2.col-form-label - = f.label s_('ProjectCreationLevel|Allowed to create projects') - .col-sm-10 - = f.select :project_creation_level, options_for_select(::Gitlab::Access.project_creation_options, @group.project_creation_level), {}, class: 'form-control' +%fieldset.form-group.gl-form-group + %legend.col-form-label.col-form-label + = _('Large File Storage') + = f.gitlab_ui_checkbox_component :lfs_enabled, checkbox_options: { checked: @group.lfs_enabled? } do |c| + = c.label do + = _('Projects in this group can use Git LFS') + = link_to sprite_icon('question-o'), help_page_path('topics/git/lfs/index'), class: 'gl-ml-2' + = c.help_text do + = _('This setting can be overridden in each project.') +.form-group.gl-form-group{ role: 'group' } + = f.label s_('ProjectCreationLevel|Allowed to create projects'), class: 'gl-display-block col-form-label' + = f.select :project_creation_level, options_for_select(::Gitlab::Access.project_creation_options, @group.project_creation_level), {}, class: 'gl-form-select custom-select' -.form-group.row - .col-sm-2.col-form-label - = f.label s_('SubgroupCreationlevel|Allowed to create subgroups') - .col-sm-10 - = f.select :subgroup_creation_level, options_for_select(::Gitlab::Access.subgroup_creation_options, @group.subgroup_creation_level), {}, class: 'form-control' +.form-group.gl-form-group{ role: 'group' } + = f.label s_('SubgroupCreationlevel|Allowed to create subgroups'), class: 'gl-display-block col-form-label' + = f.select :subgroup_creation_level, options_for_select(::Gitlab::Access.subgroup_creation_options, @group.subgroup_creation_level), {}, class: 'gl-form-select custom-select' -.form-group.row - .col-sm-2.col-form-label.pt-0 - = f.label :require_two_factor_authentication, _('Two-factor authentication') - .col-sm-10 - - label = _("Require all users in this group to set up two-factor authentication") - - help_link = link_to sprite_icon('question-o'), help_page_path('security/two_factor_authentication', anchor: 'enforce-2fa-for-all-users-in-a-group'), class: 'gl-ml-2' - = f.gitlab_ui_checkbox_component :require_two_factor_authentication, '%{label}%{help_link}'.html_safe % { label: label, help_link: help_link } -.form-group.row - .offset-sm-2.col-sm-10 - .form-check - = f.text_field :two_factor_grace_period, class: 'form-control' - .form-text.text-muted= _("Time (in hours) that users are allowed to skip forced configuration of two-factor authentication.") +%fieldset.form-group.gl-form-group + %legend.col-form-label.col-form-label + = _('Two-factor authentication') + - label = _("All users in this group must set up two-factor authentication") + - help_link = link_to sprite_icon('question-o'), help_page_path('security/two_factor_authentication', anchor: 'enforce-2fa-for-all-users-in-a-group'), class: 'gl-ml-2' + = f.gitlab_ui_checkbox_component :require_two_factor_authentication, '%{label}%{help_link}'.html_safe % { label: label, help_link: help_link } + +.form-group.gl-form-group{ role: 'group' } + = f.label :two_factor_grace_period, _('Two-factor authentication grace period'), class: 'gl-display-block col-form-label' + = f.text_field :two_factor_grace_period, class: 'form-control gl-form-input gl-form-input-sm' + %small.form-text.text-gl-muted + = _("Time (in hours) that users are allowed to skip forced configuration of two-factor authentication.") diff --git a/app/views/groups/_import_group_from_another_instance_panel.html.haml b/app/views/groups/_import_group_from_another_instance_panel.html.haml index 654ee70dbee..a9234753aa2 100644 --- a/app/views/groups/_import_group_from_another_instance_panel.html.haml +++ b/app/views/groups/_import_group_from_another_instance_panel.html.haml @@ -1,4 +1,4 @@ -= form_with url: configure_import_bulk_imports_path, class: 'group-form gl-show-field-errors' do |f| += form_with url: configure_import_bulk_imports_path(namespace_id: params[:parent_id]), class: 'group-form gl-show-field-errors' do |f| .gl-border-l-solid.gl-border-r-solid.gl-border-gray-100.gl-border-1.gl-p-5 .gl-display-flex.gl-align-items-center %h4.gl-display-flex diff --git a/app/views/groups/_import_group_from_file_panel.html.haml b/app/views/groups/_import_group_from_file_panel.html.haml index 04170c30a20..022777eea27 100644 --- a/app/views/groups/_import_group_from_file_panel.html.haml +++ b/app/views/groups/_import_group_from_file_panel.html.haml @@ -2,46 +2,18 @@ - group_path = root_url - group_path << parent.full_path + '/' if parent -= form_with url: import_gitlab_group_path, class: 'group-form gl-show-field-errors', multipart: true do |f| += form_for '', url: import_gitlab_group_path, namespace: 'import_group', class: 'group-form gl-show-field-errors', multipart: true do |f| .gl-border-l-solid.gl-border-r-solid.gl-border-gray-100.gl-border-1.gl-p-5 %h4 = _('Import group from file') = render Pajamas::AlertComponent.new(variant: :warning, + alert_options: { class: 'gl-mb-5' }, dismissible: false) do |c| = c.body do - docs_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_path('user/group/import/index.md') } - link_end = '</a>'.html_safe = s_('GroupsNew|This feature is deprecated and replaced by %{docs_link_start}group migration%{docs_link_end}.').html_safe % { docs_link_start: docs_link_start, docs_link_end: link_end } - - .form-group.gl-display-flex.gl-flex-direction-column.gl-mt-5 - = f.label :name, _('New group name'), for: 'import_group_name' - = f.text_field :name, placeholder: s_('GroupsNew|My Awesome Group'), class: 'js-autofill-group-name gl-form-input col-xs-12 col-sm-8', - required: true, - title: _('Please fill in a descriptive name for your group.'), - autofocus: true, - id: 'import_group_name' - - .form-group.gl-display-flex.gl-flex-direction-column - = f.label :import_group_path, _('New group URL'), for: 'import_group_path' - .input-group.gl-field-error-anchor.col-xs-12.col-sm-8.gl-p-0 - .group-root-path.input-group-prepend.has-tooltip{ title: group_path, :'data-placement' => 'bottom' } - .input-group-text - %span - = root_url - - if parent - %strong= parent.full_path + '/' - = f.hidden_field :parent_id, value: parent&.id - = f.text_field :path, placeholder: 'my-awesome-group', class: 'form-control js-validate-group-path js-autofill-group-path', - id: 'import_group_path', - required: true, - pattern: Gitlab::PathRegex::NAMESPACE_FORMAT_REGEX_JS, - title: group_url_error_message, - maxlength: ::Namespace::URL_MAX_LENGTH, - "data-bind-in" => "#{'create_chat_team' if Gitlab.config.mattermost.enabled}" - %p.validation-error.gl-field-error.field-validation.hide - = _("Group path is already taken. We've suggested one that is available.") - %p.validation-success.gl-field-success.field-validation.hide= _('Group path is available.') - %p.validation-pending.gl-field-error-ignore.field-validation.hide= _('Checking group path availability...') + = render 'shared/groups/group_name_and_path_fields', f: f .form-group = f.label :file, s_('GroupsNew|Upload file') .gl-font-weight-normal diff --git a/app/views/groups/_new_group_fields.html.haml b/app/views/groups/_new_group_fields.html.haml index 83211505f36..0527d38159b 100644 --- a/app/views/groups/_new_group_fields.html.haml +++ b/app/views/groups/_new_group_fields.html.haml @@ -2,12 +2,12 @@ = render 'shared/group_form', f: f, autofocus: true .row - .form-group.col-sm-12.gl-mb-0 + .form-group.gl-form-group.col-sm-12 %label.label-bold = _('Visibility level') %p = _('Who will be able to see this group?') - = link_to _('View the documentation'), help_page_path("public_access/public_access"), target: '_blank', rel: 'noopener noreferrer' + = link_to _('View the documentation'), help_page_path("user/public_access"), target: '_blank', rel: 'noopener noreferrer' = render 'shared/visibility_level', f: f, visibility_level: default_group_visibility, can_change_visibility_level: true, form_model: @group, with_label: false - if Gitlab.config.mattermost.enabled diff --git a/app/views/groups/_shared_projects.html.haml b/app/views/groups/_shared_projects.html.haml index ef6410ad439..6063d160fab 100644 --- a/app/views/groups/_shared_projects.html.haml +++ b/app/views/groups/_shared_projects.html.haml @@ -3,5 +3,5 @@ %p= _("There are no projects shared with this group yet") %ul.content-list{ data: { hide_projects: 'false', group_id: group.id, path: group_path(group) } } - .js-groups-list-holder + .js-groups-list-holder{ data: { current_group_visibility: group.visibility } } = gl_loading_icon diff --git a/app/views/groups/group_members/index.html.haml b/app/views/groups/group_members/index.html.haml index 635a74d8179..d9fef8940eb 100644 --- a/app/views/groups/group_members/index.html.haml +++ b/app/views/groups/group_members/index.html.haml @@ -7,18 +7,16 @@ .col-lg-12 .gl-display-flex.gl-flex-wrap - if can_admin_group_member?(@group) - .gl-w-half.gl-xs-w-full - %h4 - = _('Group members') - %p - = group_member_header_subtext(@group) - .gl-w-half.gl-xs-w-full - .gl-display-flex.gl-flex-wrap.gl-justify-content-end.gl-mb-3 - .js-invite-group-trigger{ data: { classes: 'gl-mt-3 gl-sm-w-auto gl-w-full', display_text: _('Invite a group') } } - .js-invite-members-trigger{ data: { variant: 'confirm', - classes: 'gl-mt-3 gl-sm-w-auto gl-w-full gl-sm-ml-3', - trigger_source: 'group-members-page', - display_text: _('Invite members') } } + %h4 + = _('Group members') + %p.gl-w-full.order-md-1 + = group_member_header_subtext(@group) + .gl-display-flex.gl-flex-wrap.gl-align-items-flex-start.gl-ml-auto.gl-md-w-auto.gl-w-full.gl-mt-3 + .js-invite-group-trigger{ data: { classes: 'gl-md-w-auto gl-w-full', display_text: _('Invite a group') } } + .js-invite-members-trigger{ data: { variant: 'confirm', + classes: 'gl-md-w-auto gl-w-full gl-md-ml-3 gl-md-mt-0 gl-mt-3', + trigger_source: 'group-members-page', + display_text: _('Invite members') } } = render 'groups/invite_groups_modal', group: @group = render 'groups/invite_members_modal', group: @group @@ -28,6 +26,7 @@ members: @members, invited: @invited_members, access_requests: @requesters, + banned: @banned || [], include_relations: @include_relations, search: params[:search_groups]).to_json } } = gl_loading_icon(css_class: 'gl-my-5', size: 'md') diff --git a/app/views/groups/harbor/repositories/index.html.haml b/app/views/groups/harbor/repositories/index.html.haml index 6a1e66520b5..a8a52b2aba7 100644 --- a/app/views/groups/harbor/repositories/index.html.haml +++ b/app/views/groups/harbor/repositories/index.html.haml @@ -1,7 +1,7 @@ - page_title _("Harbor Registry") - @content_class = "limit-container-width" unless fluid_layout -#js-harbor-registry-list-group{ data: { endpoint: group_harbor_registries_path(@group), +#js-harbor-registry-list-group{ data: { endpoint: group_harbor_repositories_path(@group), "no_containers_image" => image_path('illustrations/docker-empty-state.svg'), "containers_error_image" => image_path('illustrations/docker-error-state.svg'), "repository_url" => 'demo.harbor.com/gitlab-cn/build/cng-images/gitlab-kas', diff --git a/app/views/groups/merge_requests.html.haml b/app/views/groups/merge_requests.html.haml index b33d1443706..33fcda6129c 100644 --- a/app/views/groups/merge_requests.html.haml +++ b/app/views/groups/merge_requests.html.haml @@ -3,6 +3,8 @@ - page_title _("Merge requests") - if issuables_count_for_state(:merge_requests, :all) == 0 + = render 'shared/issuable/search_bar', type: :merge_requests + = render 'shared/empty_states/merge_requests', project_select_button: true - else .top-area diff --git a/app/views/groups/runners/show.html.haml b/app/views/groups/runners/show.html.haml index 5a9d2ca858e..65e797a2e82 100644 --- a/app/views/groups/runners/show.html.haml +++ b/app/views/groups/runners/show.html.haml @@ -1,6 +1,10 @@ - add_to_breadcrumbs _('Runners'), group_runners_path(@group) -- if Feature.enabled?(:group_runner_view_ui) - #js-group-runner-show{ data: {runner_id: @runner.id, runners_path: group_runners_path(@group)} } +- if Feature.enabled?(:group_runner_view_ui, @group) + - title = "##{@runner.id} (#{@runner.short_sha})" + - breadcrumb_title title + - page_title title + + #js-group-runner-show{ data: {runner_id: @runner.id, runners_path: group_runners_path(@group), edit_group_runner_path: edit_group_runner_path(@group, @runner)} } - else = render 'shared/runners/runner_details', runner: @runner diff --git a/app/views/groups/settings/_general.html.haml b/app/views/groups/settings/_general.html.haml index ad0780e869c..527791dfc04 100644 --- a/app/views/groups/settings/_general.html.haml +++ b/app/views/groups/settings/_general.html.haml @@ -1,6 +1,6 @@ -= form_for @group, html: { multipart: true, class: 'gl-show-field-errors js-general-settings-form' }, authenticity_token: true do |f| += gitlab_ui_form_for @group, html: { multipart: true, class: 'gl-show-field-errors js-general-settings-form' }, authenticity_token: true do |f| %input{ type: 'hidden', name: 'update_section', value: 'js-general-settings' } - = form_errors(@group) + = form_errors(@group, pajamas_alert: true) %fieldset .row @@ -30,6 +30,6 @@ - if @group.avatar? %hr = link_to s_('Groups|Remove avatar'), group_avatar_path(@group.to_param), aria: { label: s_('Groups|Remove avatar') }, data: { confirm: s_('Groups|Avatar will be removed. Are you sure?'), 'confirm-btn-variant': 'danger' }, method: :delete, class: 'gl-button btn btn-danger-secondary' - - = render 'shared/visibility_level', f: f, visibility_level: @group.visibility_level, can_change_visibility_level: can_change_group_visibility_level?(@group), form_model: @group - = f.submit s_('Groups|Save changes'), class: 'btn gl-button btn-confirm mt-4 js-dirty-submit', data: { qa_selector: 'save_name_visibility_settings_button' } + .form-group.gl-form-group + = render 'shared/visibility_level', f: f, visibility_level: @group.visibility_level, can_change_visibility_level: can_change_group_visibility_level?(@group), form_model: @group + = f.submit s_('Groups|Save changes'), class: 'btn gl-button btn-confirm js-dirty-submit', data: { qa_selector: 'save_name_visibility_settings_button' } diff --git a/app/views/groups/settings/_permissions.html.haml b/app/views/groups/settings/_permissions.html.haml index 319af7be22e..a60ab43f566 100644 --- a/app/views/groups/settings/_permissions.html.haml +++ b/app/views/groups/settings/_permissions.html.haml @@ -1,33 +1,33 @@ = gitlab_ui_form_for @group, html: { multipart: true, class: 'gl-show-field-errors js-general-permissions-form' }, authenticity_token: true do |f| %input{ type: 'hidden', name: 'update_section', value: 'js-permissions-settings' } - = form_errors(@group) + = form_errors(@group, pajamas_alert: true) %fieldset %h5= _('Permissions') - if @group.root? .form-group.gl-mb-3 = f.gitlab_ui_checkbox_component :prevent_sharing_groups_outside_hierarchy, - s_('GroupSettings|Prevent members from sending invitations to groups outside of %{group} and its subgroups').html_safe % { group: link_to_group(@group) }, + s_('GroupSettings|Members cannot invite groups outside of %{group} and its subgroups').html_safe % { group: link_to_group(@group) }, help_text: prevent_sharing_groups_outside_hierarchy_help_text(@group), checkbox_options: { disabled: !can_change_prevent_sharing_groups_outside_hierarchy?(@group) } .form-group.gl-mb-3 = f.gitlab_ui_checkbox_component :share_with_group_lock, - s_('GroupSettings|Prevent sharing a project within %{group} with other groups').html_safe % { group: link_to_group(@group) }, + s_('GroupSettings|Projects in %{group} cannot be shared with other groups').html_safe % { group: link_to_group(@group) }, checkbox_options: { disabled: !can_change_share_with_group_lock?(@group) }, help_text: share_with_group_lock_help_text(@group) .form-group.gl-mb-3 = f.gitlab_ui_checkbox_component :emails_disabled, - s_('GroupSettings|Disable email notifications'), + s_('GroupSettings|Email notifications are disabled'), checkbox_options: { checked: @group.emails_disabled?, disabled: !can_disable_group_emails?(@group) }, help_text: s_('GroupSettings|Overrides user notification preferences for all members of the group, subgroups, and projects.') .form-group.gl-mb-3 = f.gitlab_ui_checkbox_component :mentions_disabled, - s_('GroupSettings|Disable group mentions'), + s_('GroupSettings|Group mentions are disabled'), checkbox_options: { checked: @group.mentions_disabled? }, - help_text: s_('GroupSettings|Prevents group members from being notified if the group is mentioned.') + help_text: s_('GroupSettings|Group members are not notified if the group is mentioned.') = render 'groups/settings/resource_access_token_creation', f: f, group: @group = render_if_exists 'groups/settings/delayed_project_removal', f: f, group: @group @@ -48,8 +48,8 @@ %h5= _('Customer relations') .form-group.gl-mb-3 = f.gitlab_ui_checkbox_component :crm_enabled, - s_('GroupSettings|Enable customer relations'), + s_('GroupSettings|Customer relations is enabled'), checkbox_options: { checked: @group.crm_enabled? }, - help_text: s_('GroupSettings|Allows creating organizations and contacts and associating them with issues.') + help_text: s_('GroupSettings|Organizations and contacts can be created and associated with issues.') = f.submit _('Save changes'), class: 'btn gl-button btn-confirm gl-mt-3 js-dirty-submit', data: { qa_selector: 'save_permissions_changes_button' } diff --git a/app/views/groups/settings/_project_creation_level.html.haml b/app/views/groups/settings/_project_creation_level.html.haml index 36b714535d2..ef535b8a21c 100644 --- a/app/views/groups/settings/_project_creation_level.html.haml +++ b/app/views/groups/settings/_project_creation_level.html.haml @@ -1,3 +1,3 @@ .form-group - = f.label s_('ProjectCreationLevel|Allowed to create projects'), class: 'label-bold' + = f.label s_('ProjectCreationLevel|Roles allowed to create projects'), class: 'label-bold' = f.select :project_creation_level, options_for_select(::Gitlab::Access.project_creation_options, group.project_creation_level), {}, class: 'form-control', data: { qa_selector: 'project_creation_level_dropdown' } diff --git a/app/views/groups/settings/_resource_access_token_creation.html.haml b/app/views/groups/settings/_resource_access_token_creation.html.haml index 160f8ae1e07..d304dba3250 100644 --- a/app/views/groups/settings/_resource_access_token_creation.html.haml +++ b/app/views/groups/settings/_resource_access_token_creation.html.haml @@ -6,6 +6,5 @@ - link_start_project = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: project_access_tokens_link } - link_start_group = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: group_access_tokens_link } = f.gitlab_ui_checkbox_component :resource_access_token_creation_allowed, - s_('GroupSettings|Allow project and group access token creation'), - checkbox_options: { checked: group.namespace_settings.resource_access_token_creation_allowed?, data: { qa_selector: 'resource_access_token_creation_allowed_checkbox' } }, - help_text: s_('GroupSettings|Users can create %{link_start_project}project access tokens%{link_end} and %{link_start_group}group access tokens%{link_end} in this group.').html_safe % { link_start_project: link_start_project, link_start_group: link_start_group, link_end: '</a>'.html_safe } + s_('GroupSettings|Users can create %{link_start_project}project access tokens%{link_end} and %{link_start_group}group access tokens%{link_end} in this group').html_safe % { link_start_project: link_start_project, link_start_group: link_start_group, link_end: '</a>'.html_safe }, + checkbox_options: { checked: group.namespace_settings.resource_access_token_creation_allowed?, data: { qa_selector: 'resource_access_token_creation_allowed_checkbox' } } diff --git a/app/views/groups/settings/_subgroup_creation_level.html.haml b/app/views/groups/settings/_subgroup_creation_level.html.haml index f36ad192bad..d92610367ae 100644 --- a/app/views/groups/settings/_subgroup_creation_level.html.haml +++ b/app/views/groups/settings/_subgroup_creation_level.html.haml @@ -1,3 +1,3 @@ .form-group - = f.label s_('SubgroupCreationLevel|Allowed to create subgroups'), class: 'label-bold' + = f.label s_('SubgroupCreationLevel|Roles allowed to create subgroups'), class: 'label-bold' = f.select :subgroup_creation_level, options_for_select(::Gitlab::Access.subgroup_creation_options, group.subgroup_creation_level), {}, class: 'form-control' diff --git a/app/views/groups/settings/_transfer.html.haml b/app/views/groups/settings/_transfer.html.haml index e6c88977cb1..7fe5a7a665b 100644 --- a/app/views/groups/settings/_transfer.html.haml +++ b/app/views/groups/settings/_transfer.html.haml @@ -6,7 +6,7 @@ %p= _('Transfer group to another parent group.') = form_for group, url: transfer_group_path(group), method: :put, html: { id: form_id, class: 'js-group-transfer-form' } do |f| %ul - - learn_more_link_start = '<a href="https://docs.gitlab.com/ee/user/project/index.html#redirects-when-changing-repository-paths" target="_blank" rel="noopener noreferrer">'.html_safe + - learn_more_link_start = '<a href="https://docs.gitlab.com/ee/user/project/repository/index.html#what-happens-when-a-repository-path-changes" target="_blank" rel="noopener noreferrer">'.html_safe - warning_text = s_("GroupSettings|Be careful. Changing a group's parent can have unintended side effects. %{learn_more_link_start}Learn more.%{learn_more_link_end}") % { learn_more_link_start: learn_more_link_start, learn_more_link_end: '</a>'.html_safe } %li= warning_text.html_safe %li= s_('GroupSettings|You can only transfer the group to a group you manage.') diff --git a/app/views/groups/settings/_two_factor_auth.html.haml b/app/views/groups/settings/_two_factor_auth.html.haml index f86bcb24e63..03813f6f8a2 100644 --- a/app/views/groups/settings/_two_factor_auth.html.haml +++ b/app/views/groups/settings/_two_factor_auth.html.haml @@ -8,14 +8,14 @@ .form-group = f.gitlab_ui_checkbox_component :require_two_factor_authentication, - _('Require all users in this group to set up two-factor authentication'), + _('All users in this group must set up two-factor authentication'), checkbox_options: { data: { qa_selector: 'require_2fa_checkbox' } } .form-group - = f.label :two_factor_grace_period, _('Time before enforced') + = f.label :two_factor_grace_period, _('Delay 2FA enforcement (hours)') = f.text_field :two_factor_grace_period, class: 'form-control form-control-sm w-auto gl-form-input gl-mb-3' - .form-text.text-muted= _('Time (in hours) that users are allowed to skip forced configuration of two-factor authentication.') + .form-text.text-muted= _("The maximum amount of time users have to set up two-factor authentication before it's enforced.") - unless group.has_parent? .form-group = f.gitlab_ui_checkbox_component :allow_mfa_for_subgroups, - _('Allow subgroups to set up their own two-factor authentication rules'), + _('Subgroups can set up their own two-factor authentication rules'), checkbox_options: { checked: group.namespace_settings&.allow_mfa_for_subgroups } diff --git a/app/views/groups/settings/ci_cd/_auto_devops_form.html.haml b/app/views/groups/settings/ci_cd/_auto_devops_form.html.haml index 86c0a8d0c52..c294df5ac62 100644 --- a/app/views/groups/settings/ci_cd/_auto_devops_form.html.haml +++ b/app/views/groups/settings/ci_cd/_auto_devops_form.html.haml @@ -1,5 +1,5 @@ = gitlab_ui_form_for group, url: update_auto_devops_group_settings_ci_cd_path(group), method: :patch do |f| - = form_errors(group) + = form_errors(group, pajamas_alert: true) %fieldset .form-group .card.auto-devops-card diff --git a/app/views/groups/settings/ci_cd/_form.html.haml b/app/views/groups/settings/ci_cd/_form.html.haml index b6f70879d17..59c67197f81 100644 --- a/app/views/groups/settings/ci_cd/_form.html.haml +++ b/app/views/groups/settings/ci_cd/_form.html.haml @@ -1,7 +1,6 @@ .row.gl-mt-3 .col-lg-12 = form_for group, url: group_settings_ci_cd_path(group, anchor: 'js-general-pipeline-settings') do |f| - = form_errors(group) %fieldset.builds-feature .form-group = f.label :max_artifacts_size, _('Maximum artifacts size'), class: 'label-bold' diff --git a/app/views/groups/settings/packages_and_registries/show.html.haml b/app/views/groups/settings/packages_and_registries/show.html.haml index c4ce76c43ec..888419e463a 100644 --- a/app/views/groups/settings/packages_and_registries/show.html.haml +++ b/app/views/groups/settings/packages_and_registries/show.html.haml @@ -2,6 +2,5 @@ - page_title _('Packages & Registries') - @content_class = 'limit-container-width' unless fluid_layout -%section#js-packages-and-registries-settings{ data: { default_expanded: expanded_by_default?.to_s, - group_path: @group.full_path, +%section#js-packages-and-registries-settings{ data: { group_path: @group.full_path, group_dependency_proxy_path: group_dependency_proxy_path(@group) } } diff --git a/app/views/groups/settings/repository/_default_branch.html.haml b/app/views/groups/settings/repository/_default_branch.html.haml index 844a5f890a4..cae33820a05 100644 --- a/app/views/groups/settings/repository/_default_branch.html.haml +++ b/app/views/groups/settings/repository/_default_branch.html.haml @@ -8,7 +8,7 @@ = s_('GroupSettings|Set the initial name and protections for the default branch of new repositories created in the group.') .settings-content = gitlab_ui_form_for @group, url: group_path(@group, anchor: 'js-default-branch-name'), html: { class: 'fieldset-form' } do |f| - = form_errors(@group) + = form_errors(@group, pajamas_alert: true) - fallback_branch_name = "<code>#{Gitlab::DefaultBranch.value(object: @group)}</code>" %fieldset diff --git a/app/views/groups/show.html.haml b/app/views/groups/show.html.haml index 3614d854036..d8da77dc5cc 100644 --- a/app/views/groups/show.html.haml +++ b/app/views/groups/show.html.haml @@ -3,8 +3,8 @@ - @skip_current_level_breadcrumb = true - add_page_specific_style 'page_bundles/group' -- if show_thanks_for_purchase_banner? - = render_if_exists 'shared/thanks_for_purchase_banner', plan_title: plan_title, quantity: params[:purchased_quantity].to_i +- if show_thanks_for_purchase_alert? + = render_if_exists 'shared/thanks_for_purchase_alert', plan_title: plan_title, quantity: params[:purchased_quantity].to_i = render_if_exists 'shared/qrtly_reconciliation_alert', group: @group = render_if_exists 'shared/free_user_cap_alert', source: @group @@ -25,7 +25,7 @@ = render partial: 'flash_messages' -= render_if_exists 'trials/banner', namespace: @group += render_if_exists 'trials/alert', namespace: @group = render 'groups/home_panel' diff --git a/app/views/import/bitbucket/status.html.haml b/app/views/import/bitbucket/status.html.haml index e69ca4663b4..b4b73e9e790 100644 --- a/app/views/import/bitbucket/status.html.haml +++ b/app/views/import/bitbucket/status.html.haml @@ -6,4 +6,4 @@ = sprite_icon('bitbucket', css_class: 'gl-mr-2') = _('Import projects from Bitbucket') -= render 'import/githubish_status', provider: 'bitbucket' += render 'import/githubish_status', provider: 'bitbucket', default_namespace: @namespace diff --git a/app/views/import/bitbucket_server/new.html.haml b/app/views/import/bitbucket_server/new.html.haml index 0d87cf66814..292dd9d071c 100644 --- a/app/views/import/bitbucket_server/new.html.haml +++ b/app/views/import/bitbucket_server/new.html.haml @@ -10,7 +10,7 @@ %p = _('Enter in your Bitbucket Server URL and personal access token below') -= form_tag configure_import_bitbucket_server_path, method: :post do += form_tag configure_import_bitbucket_server_path(namespace_id: params[:namespace_id]), method: :post do .form-group.row = label_tag :bitbucket_server_url, 'Bitbucket Server URL', class: 'col-form-label col-md-2' .col-md-4 diff --git a/app/views/import/bitbucket_server/status.html.haml b/app/views/import/bitbucket_server/status.html.haml index 05b42767668..7e0c7b3dd74 100644 --- a/app/views/import/bitbucket_server/status.html.haml +++ b/app/views/import/bitbucket_server/status.html.haml @@ -5,4 +5,4 @@ = sprite_icon('bitbucket', css_class: 'gl-mr-2') = _('Import projects from Bitbucket Server') -= render 'import/githubish_status', provider: 'bitbucket_server', paginatable: true, extra_data: { reconfigure_path: configure_import_bitbucket_server_path } += render 'import/githubish_status', provider: 'bitbucket_server', paginatable: true, default_namespace: @namespace, extra_data: { reconfigure_path: configure_import_bitbucket_server_path } diff --git a/app/views/import/bulk_imports/status.html.haml b/app/views/import/bulk_imports/status.html.haml index 71866bab30b..1c8de23f28f 100644 --- a/app/views/import/bulk_imports/status.html.haml +++ b/app/views/import/bulk_imports/status.html.haml @@ -4,6 +4,7 @@ #import-groups-mount-element{ data: { status_path: status_import_bulk_imports_path(format: :json), available_namespaces_path: import_available_namespaces_path(format: :json), + default_target_namespace: @namespace&.id, create_bulk_import_path: import_bulk_imports_path(format: :json), jobs_path: realtime_changes_import_bulk_imports_path(format: :json), source_url: @source_url, diff --git a/app/views/import/fogbugz/new.html.haml b/app/views/import/fogbugz/new.html.haml index b74262f2567..bd0e4b51a63 100644 --- a/app/views/import/fogbugz/new.html.haml +++ b/app/views/import/fogbugz/new.html.haml @@ -8,7 +8,7 @@ = _('Import projects from FogBugz') %hr -= form_tag callback_import_fogbugz_path do += form_tag callback_import_fogbugz_path(namespace_id: params[:namespace_id]) do %p = _("To get started you enter your FogBugz URL and login information below. In the next steps, you'll be able to map users and select the projects you want to import.") .form-group.row diff --git a/app/views/import/fogbugz/new_user_map.html.haml b/app/views/import/fogbugz/new_user_map.html.haml index 5caee78b9c4..28836055e0e 100644 --- a/app/views/import/fogbugz/new_user_map.html.haml +++ b/app/views/import/fogbugz/new_user_map.html.haml @@ -8,7 +8,7 @@ = _('Import projects from FogBugz') %hr -= form_tag create_user_map_import_fogbugz_path do += form_tag create_user_map_import_fogbugz_path(namespace_id: params[:namespace_id]) do %p = _("Customize how FogBugz email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import.") %p diff --git a/app/views/import/fogbugz/status.html.haml b/app/views/import/fogbugz/status.html.haml index 3e303d3163d..fb05e8e9724 100644 --- a/app/views/import/fogbugz/status.html.haml +++ b/app/views/import/fogbugz/status.html.haml @@ -8,4 +8,4 @@ - link_to_customize = link_to('customize', new_user_map_import_fogbugz_path) = _('Optionally, you can %{link_to_customize} how FogBugz email addresses and usernames are imported into GitLab.').html_safe % { link_to_customize: link_to_customize } %hr -= render 'import/githubish_status', provider: 'fogbugz', filterable: false += render 'import/githubish_status', provider: 'fogbugz', filterable: false, default_namespace: @namespace diff --git a/app/views/import/gitlab/status.html.haml b/app/views/import/gitlab/status.html.haml index 13aaa41de9b..d2d49266350 100644 --- a/app/views/import/gitlab/status.html.haml +++ b/app/views/import/gitlab/status.html.haml @@ -3,4 +3,4 @@ = sprite_icon('heart', css_class: 'gl-vertical-align-middle') = _('Import projects from GitLab.com') -= render 'import/githubish_status', provider: 'gitlab', filterable: false += render 'import/githubish_status', provider: 'gitlab', filterable: false, default_namespace: @namespace diff --git a/app/views/layouts/_bizible.html.haml b/app/views/layouts/_bizible.html.haml index a2b28c138e5..8d173a7ab61 100644 --- a/app/views/layouts/_bizible.html.haml +++ b/app/views/layouts/_bizible.html.haml @@ -1,6 +1,5 @@ - if bizible_enabled? <!-- Bizible --> - = javascript_include_tag "https://cdn.bizible.com/scripts/bizible.js" = javascript_tag nonce: content_security_policy_nonce do :plain const bizibleScript = document.createElement('script'); diff --git a/app/views/layouts/_flash.html.haml b/app/views/layouts/_flash.html.haml index 21cccb86398..ab4b3cf6afd 100644 --- a/app/views/layouts/_flash.html.haml +++ b/app/views/layouts/_flash.html.haml @@ -1,6 +1,7 @@ -# We currently only support `alert`, `notice`, `success`, 'toast', and 'raw' - icons = {'alert' => 'error', 'notice' => 'information-o', 'success' => 'check-circle'} - type_to_variant = {'alert' => 'danger', 'notice' => 'info', 'success' => 'success'} +- closable = %w[alert notice success] .flash-container.flash-container-page.sticky{ data: { qa_selector: 'flash_container' } } - flash.each do |key, value| - if key == 'toast' && value @@ -13,6 +14,6 @@ %div{ class: "flash-#{key} mb-2", data: { testid: "alert-#{type_to_variant[key]}" } } = sprite_icon(icons[key], css_class: 'align-middle mr-1') unless icons[key].nil? %span= value - - if %w(alert notice success).include?(key) + - if closable.include?(key) %div{ class: "close-icon-wrapper js-close-icon" } = sprite_icon('close', css_class: 'close-icon gl-vertical-align-baseline!') diff --git a/app/views/layouts/_header_search.html.haml b/app/views/layouts/_header_search.html.haml index 3c62180214b..28118cf4aaa 100644 --- a/app/views/layouts/_header_search.html.haml +++ b/app/views/layouts/_header_search.html.haml @@ -25,3 +25,7 @@ -# workaround for non-JS feature specs, see spec/support/helpers/search_helpers.rb - if ENV['RAILS_ENV'] == 'test' %noscript= button_tag 'Search' + %kbd.gl-absolute.gl-right-3.gl-top-0.keyboard-shortcut-helper.gl-z-index-1.has-tooltip{ data: { html: 'true', + placement: 'bottom' }, + title: html_escape(s_('GlobalSearch|Use the shortcut key %{kbdOpen}/%{kbdClose} to start a search')) % { kbdOpen: '<kbd>'.html_safe, kbdClose: '</kbd>'.html_safe } } + = '/' diff --git a/app/views/layouts/_page.html.haml b/app/views/layouts/_page.html.haml index b7cf7b7468f..59d4c81358d 100644 --- a/app/views/layouts/_page.html.haml +++ b/app/views/layouts/_page.html.haml @@ -17,7 +17,6 @@ = dispensable_render "shared/service_ping_consent" = dispensable_render_if_exists "layouts/header/ee_subscribable_banner" = dispensable_render_if_exists "layouts/header/seat_count_alert" - = dispensable_render_if_exists "shared/namespace_storage_limit_alert" = dispensable_render_if_exists "shared/namespace_user_cap_reached_alert" = dispensable_render_if_exists "shared/new_user_signups_cap_reached_alert" = yield :page_level_alert diff --git a/app/views/layouts/devise.html.haml b/app/views/layouts/devise.html.haml index cee5c1b6b69..cb1a2a8c690 100644 --- a/app/views/layouts/devise.html.haml +++ b/app/views/layouts/devise.html.haml @@ -1,7 +1,7 @@ !!! 5 %html.devise-layout-html{ class: system_message_class } = render "layouts/head", { startup_filename: 'signin' } - %body.ui-indigo.login-page.application.navless{ class: "#{client_class_list}", data: { page: body_data_page, qa_selector: 'login_page' } } + %body.login-page.application.navless{ class: "#{user_application_theme} #{client_class_list}", data: { page: body_data_page, qa_selector: 'login_page' } } = header_message = render "layouts/init_client_detection_flags" .page-wrap diff --git a/app/views/layouts/devise_empty.html.haml b/app/views/layouts/devise_empty.html.haml index b5649be8917..cadba3f91e9 100644 --- a/app/views/layouts/devise_empty.html.haml +++ b/app/views/layouts/devise_empty.html.haml @@ -1,7 +1,7 @@ !!! 5 %html.devise-layout-html{ lang: "en", class: system_message_class } = render "layouts/head" - %body.ui-indigo.login-page.application.navless{ class: "#{client_class_list}" } + %body.login-page.application.navless{ class: "#{user_application_theme} #{client_class_list}" } = header_message = render "layouts/init_client_detection_flags" = render "layouts/header/empty" diff --git a/app/views/layouts/group.html.haml b/app/views/layouts/group.html.haml index 940724e0e4a..1c2ab8cf008 100644 --- a/app/views/layouts/group.html.haml +++ b/app/views/layouts/group.html.haml @@ -3,11 +3,11 @@ - header_title group_title(@group) unless header_title - nav "group" - display_subscription_banner! -- display_namespace_storage_limit_alert! - @left_sidebar = true - content_for :flash_message do = render "layouts/header/storage_enforcement_banner", namespace: @group + = dispensable_render_if_exists "shared/namespace_storage_limit_alert" - content_for :page_specific_javascripts do - if current_user diff --git a/app/views/layouts/mailer.html.haml b/app/views/layouts/mailer.html.haml index 580b8e67a3c..8452f0d9976 100644 --- a/app/views/layouts/mailer.html.haml +++ b/app/views/layouts/mailer.html.haml @@ -3,8 +3,6 @@ %td %img.footer-logo{ alt: "GitLab", src: image_url('mailers/gitlab_logo_black_text.png') } %div - - manage_notifications_link = link_to(_("Manage all notifications"), profile_notifications_url, class: 'mng-notif-link') - - help_link = link_to(_("Help"), help_url, class: 'help-link') - = _("You're receiving this email because of your account on %{host}. %{manage_notifications_link} · %{help_link}").html_safe % { host: Gitlab.config.gitlab.host, manage_notifications_link: manage_notifications_link, help_link: help_link } + = notification_reason_text(show_manage_notifications_link: true, show_help_link: true, format: :html) = render 'layouts/mailer' diff --git a/app/views/layouts/mailer.text.erb b/app/views/layouts/mailer.text.erb index 1a06ea68bcd..24553734e49 100644 --- a/app/views/layouts/mailer.text.erb +++ b/app/views/layouts/mailer.text.erb @@ -3,7 +3,7 @@ <%= yield -%> -- <%# signature marker %> -<%= _("You're receiving this email because of your account on %{host}.") % { host: Gitlab.config.gitlab.host } %> +<%= notification_reason_text %> <%= render_if_exists 'layouts/mailer/additional_text' %> <%= text_footer_message %> diff --git a/app/views/layouts/nav/_breadcrumbs.html.haml b/app/views/layouts/nav/_breadcrumbs.html.haml index fde4e74fb7a..98d6af28cf5 100644 --- a/app/views/layouts/nav/_breadcrumbs.html.haml +++ b/app/views/layouts/nav/_breadcrumbs.html.haml @@ -8,7 +8,7 @@ - if defined?(@left_sidebar) = button_tag class: 'toggle-mobile-nav', data: { qa_selector: 'toggle_mobile_nav_button' }, type: 'button' do %span.sr-only= _("Open sidebar") - = sprite_icon('hamburger', size: 18) + = sprite_icon('sidebar', size: 18) .breadcrumbs-links{ data: { testid: 'breadcrumb-links', qa_selector: 'breadcrumb_links_content' } } %ul.list-unstyled.breadcrumbs-list.js-breadcrumbs-list - unless hide_top_links diff --git a/app/views/layouts/notify.html.haml b/app/views/layouts/notify.html.haml index d9f16a89fbc..d05b6951fbf 100644 --- a/app/views/layouts/notify.html.haml +++ b/app/views/layouts/notify.html.haml @@ -26,16 +26,7 @@ - else #{link_to _("View it on GitLab"), @target_url}. %br - -# Don't link the host in the line below, one link in the email is easier to quickly click than two. - = notification_reason_text(@reason) - If you'd like to receive fewer emails, you can - - if @labels_url - adjust your #{link_to 'label subscriptions', @labels_url}. - - else - - if @unsubscribe_url - = link_to "unsubscribe", @unsubscribe_url - from this thread or - adjust your notification settings. + = notification_reason_text(reason: @reason, show_manage_notifications_link: !@labels_url, show_help_link: true, manage_label_subscriptions_url: @labels_url, unsubscribe_url: @unsubscribe_url, format: :html) = email_action @target_url diff --git a/app/views/layouts/notify.text.erb b/app/views/layouts/notify.text.erb index 49ad0b5abc5..4eae96dc376 100644 --- a/app/views/layouts/notify.text.erb +++ b/app/views/layouts/notify.text.erb @@ -11,7 +11,7 @@ <% end -%> <% end -%> -<%= notification_reason_text(@reason) %> +<%= notification_reason_text(reason: @reason) %> <%= render_if_exists 'layouts/mailer/additional_text' %> <%= text_footer_message -%> diff --git a/app/views/layouts/project.html.haml b/app/views/layouts/project.html.haml index a54e0351d2f..86b4c4eabe3 100644 --- a/app/views/layouts/project.html.haml +++ b/app/views/layouts/project.html.haml @@ -4,10 +4,13 @@ - nav "project" - page_itemtype 'http://schema.org/SoftwareSourceCode' - display_subscription_banner! -- display_namespace_storage_limit_alert! - @left_sidebar = true - @content_class = [@content_class, project_classes(@project)].compact.join(" ") +- content_for :flash_message do + = render "layouts/header/storage_enforcement_banner", namespace: @project.namespace + = dispensable_render_if_exists "shared/namespace_storage_limit_alert" + - content_for :project_javascripts do - project = @target_project || @project - if current_user diff --git a/app/views/layouts/signup_onboarding.html.haml b/app/views/layouts/signup_onboarding.html.haml index f768fba84ca..4d0bb36d4b5 100644 --- a/app/views/layouts/signup_onboarding.html.haml +++ b/app/views/layouts/signup_onboarding.html.haml @@ -2,7 +2,7 @@ %html.devise-layout-html.navless{ class: system_message_class } - add_page_specific_style 'page_bundles/signup' = render "layouts/head" - %body.ui-indigo.signup-page{ class: "#{client_class_list}", data: { page: body_data_page, qa_selector: 'signup_page' } } + %body.signup-page{ class: "#{user_application_theme} #{client_class_list}", data: { page: body_data_page, qa_selector: 'signup_page' } } = render "layouts/header/logo_with_title" = render "layouts/init_client_detection_flags" .page-wrap diff --git a/app/views/notify/_failed_builds.html.haml b/app/views/notify/_failed_builds.html.haml index afed3c95130..fc4a063f5a9 100644 --- a/app/views/notify/_failed_builds.html.haml +++ b/app/views/notify/_failed_builds.html.haml @@ -1,12 +1,10 @@ %tr %td{ colspan: 2, style: "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; color: #333333; font-size: 14px; font-weight: 400; line-height: 1.4; padding: 0 8px 16px; text-align: center;" } - had - = failed.size - failed - #{'job'.pluralize(failed.size)}. + = n_('had %{count} failed job', 'had %{count} failed jobs', failed.size).html_safe % { count: failed.size } + %tr.table-warning %td{ style: "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; border: 1px solid #ededed; border-bottom: 0; border-radius: 4px 4px 0 0; overflow: hidden; background-color: #fdf4f6; color: #d22852; font-size: 14px; line-height: 1.4; text-align: center; padding: 8px 16px;" } - Failed jobs + = n_('Failed job', 'Failed jobs', failed.size) %tr.section %td{ style: "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; padding: 0 16px; border: 1px solid #ededed; border-radius: 4px; overflow: hidden; border-top: 0; border-radius: 0 0 4px 4px;" } %table.builds{ border: "0", cellpadding: "0", cellspacing: "0", style: "width: 100%; border-collapse: collapse;" } diff --git a/app/views/notify/_reassigned_issuable_email.html.haml b/app/views/notify/_reassigned_issuable_email.html.haml index 4ab40ff2659..54e51e07c86 100644 --- a/app/views/notify/_reassigned_issuable_email.html.haml +++ b/app/views/notify/_reassigned_issuable_email.html.haml @@ -1,10 +1,7 @@ +- to_names = content_tag(:strong, issuable.assignees.any? ? sanitize_name(issuable.assignee_list) : s_('Unassigned')) + %p - Assignee changed - if previous_assignees.any? - from - %strong= sanitize_name(previous_assignees.map(&:name).to_sentence) - to - - if issuable.assignees.any? - %strong= sanitize_name(issuable.assignee_list) + = html_escape(s_('Notify|Assignee changed from %{fromNames} to %{toNames}').html_safe % { fromNames: content_tag(:strong, sanitize_name(previous_assignees.map(&:name).to_sentence)), toNames: to_names }) - else - %strong Unassigned + = html_escape(s_('Notify|Assignee changed to %{toNames}').html_safe % { toNames: to_names}) diff --git a/app/views/notify/_relabeled_issuable_email.html.haml b/app/views/notify/_relabeled_issuable_email.html.haml index 80a0de255be..41d3a63845f 100644 --- a/app/views/notify/_relabeled_issuable_email.html.haml +++ b/app/views/notify/_relabeled_issuable_email.html.haml @@ -1,3 +1,2 @@ %p - #{'Label'.pluralize(@label_names.size)} added: - %em= @label_names.to_sentence + = html_escape(n_('Label added: %{labels}', 'Labels added: %{labels}', @label_names.size).html_safe % { labels: content_tag(:em, @label_names.to_sentence).html_safe }) diff --git a/app/views/notify/_removal_notification.html.haml b/app/views/notify/_removal_notification.html.haml index 590e0d569aa..1c3c84e0f41 100644 --- a/app/views/notify/_removal_notification.html.haml +++ b/app/views/notify/_removal_notification.html.haml @@ -1,9 +1,5 @@ -- if @domain.remove_at - %p - Unless you verify your domain by - %strong= @domain.remove_at.strftime('%F %T,') - it will be removed from your GitLab project. -- else - %p - If you no longer wish to use this domain with GitLab Pages, please remove it - from your GitLab project and delete any related DNS records. +%p + - if @domain.remove_at + = s_('Notify|Unless you verify your domain by %{time_start}%{time}%{time_end} it will be removed from your GitLab project.').html_safe % { time_start: '<strong>'.html_safe, time_end: '</strong>'.html_safe, time: @domain.remove_at.strftime('%F %T,') } + - else + = s_('Notify|If you no longer wish to use this domain with GitLab Pages, please remove it from your GitLab project and delete any related DNS records.') diff --git a/app/views/notify/_successful_pipeline.html.haml b/app/views/notify/_successful_pipeline.html.haml index 231df2e9206..e77db14a9c5 100644 --- a/app/views/notify/_successful_pipeline.html.haml +++ b/app/views/notify/_successful_pipeline.html.haml @@ -45,12 +45,12 @@ %td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;padding-right:5px;" } %img{ height: "13", src: image_url('mailers/ci_pipeline_notif_v1/icon-commit-gray.gif'), style: "display:block;", width: "13", alt: "" }/ %td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;" } - %a{ href: commit_url(@pipeline), style: "color:#3777b0;text-decoration:none;" } - = @pipeline.short_sha + - commit_link = content_tag(:a, @pipeline.short_sha, href: commit_url(@pipeline), style: "color:#3777b0;text-decoration:none;").html_safe - if @merge_request - in - %a{ href: merge_request_url(@merge_request), style: "color:#3777b0;text-decoration:none;" } - = @merge_request.to_reference + - mr_link = content_tag(:a, @merge_request.to_reference, href: merge_request_url(@merge_request), style: "color:#3777b0;text-decoration:none;").html_safe + = s_('Notify|%{commit_link} in %{mr_link}').html_safe % { commit_link: commit_link, mr_link: mr_link } + - else + = commit_link .commit{ style: "color:#5c5c5c;font-weight:300;" } = @pipeline.git_commit_message.truncate(50) - commit = @pipeline.commit @@ -94,25 +94,22 @@ %table.img{ border: "0", cellpadding: "0", cellspacing: "0", style: "border-collapse:collapse;margin:0 auto;" } %tbody %tr - %td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;font-weight:500;line-height:1.4;vertical-align:baseline;" } - Pipeline - %a{ href: pipeline_url(@pipeline), style: "color:#3777b0;text-decoration:none;" } - = "\##{@pipeline.id}" - triggered by + - common_style = "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;" + - pipeline_link = content_tag(:a, "\##{@pipeline.id}", href: pipeline_url(@pipeline), style: "color:#3777b0;text-decoration:none;").html_safe + %td{ style: "#{common_style} font-weight:500;vertical-align:baseline;" } + = s_('Notify|Pipeline %{pipeline_link} triggered by').html_safe % { pipeline_link: pipeline_link } - if @pipeline.user - %td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;vertical-align:middle;padding-right:5px;padding-left:5px", width: "24" } + %td{ style: "#{common_style} font-weight:500;vertical-align:middle;padding-right:5px;padding-left:5px", width: "24" } %img.avatar{ height: "24", src: avatar_icon_for_user(@pipeline.user, 24, only_path: false), style: "display:block;border-radius:12px;margin:-2px 0;", width: "24", alt: "" }/ - %td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;font-weight:500;line-height:1.4;vertical-align:baseline;" } + %td{ style: "#{common_style} vertical-align:baseline;" } %a.muted{ href: user_url(@pipeline.user), style: "color:#333333;text-decoration:none;" } = @pipeline.user.name - else %td{ style: "font-family:'Menlo','Liberation Mono','Consolas','DejaVu Sans Mono','Ubuntu Mono','Courier New','andale mono','lucida console',monospace;font-size:14px;line-height:1.4;vertical-align:baseline;padding:0 5px;" } - API + = _('API') + %tr %td{ colspan: 2, style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;color:#333333;font-size:15px;font-weight:300;line-height:1.4;padding:15px 5px;text-align:center;" } - job_count = @pipeline.total_size - stage_count = @pipeline.stages_count - successfully completed - #{job_count} #{'job'.pluralize(job_count)} - in - #{stage_count} #{'stage'.pluralize(stage_count)}. + = s_('Notify|successfully completed %{jobs} in %{stages}.').html_safe % { jobs: n_('%d job', '%d jobs', job_count) % job_count, stages: n_('%d stage', '%d stages', stage_count) % stage_count } diff --git a/app/views/notify/approved_merge_request_email.html.haml b/app/views/notify/approved_merge_request_email.html.haml index c51fe02370d..28da1182d49 100644 --- a/app/views/notify/approved_merge_request_email.html.haml +++ b/app/views/notify/approved_merge_request_email.html.haml @@ -152,6 +152,4 @@ %td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:25px 0;font-size:13px;line-height:1.6;color:#5c5c5c;" } %img{ alt: "GitLab", src: image_url('mailers/gitlab_logo_black_text.png'), style: "display:block;margin:0 auto 1em;", width: "90" }/ %div - - manage_notifications_link = link_to(_("Manage all notifications"), profile_notifications_url, style: "color:#3777b0;text-decoration:none;") - - help_link = link_to(_("Help"), help_url, style: "color:#3777b0;text-decoration:none;") - = _("You're receiving this email because of your account on %{host}. %{manage_notifications_link} · %{help_link}").html_safe % { host: Gitlab.config.gitlab.host, manage_notifications_link: manage_notifications_link, help_link: help_link } + = notification_reason_text(show_manage_notifications_link: true, show_help_link: true, format: :html) diff --git a/app/views/notify/autodevops_disabled_email.html.haml b/app/views/notify/autodevops_disabled_email.html.haml index 72bcfbdf3af..bdf2a1136d3 100644 --- a/app/views/notify/autodevops_disabled_email.html.haml +++ b/app/views/notify/autodevops_disabled_email.html.haml @@ -4,46 +4,40 @@ %tbody %tr %td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; vertical-align: middle; color: #ffffff; text-align: center;" } - Auto DevOps pipeline was disabled for #{@project.name} + = s_('Notify|Auto DevOps pipeline was disabled for %{project}') % { project: @project.name } %tr.pre-section %td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; color: #333333; font-size: 14px; font-weight: 400; line-height: 1.7; padding: 16px 8px 0;" } - The Auto DevOps pipeline failed for pipeline - %a{ href: pipeline_url(@pipeline), style: "color: #1b69b6; text-decoration:none;" } - = "\##{@pipeline.iid}" - and has been disabled for - %a{ href: project_url(@project), style: "color: #1b69b6; text-decoration: none;" } - = @project.name + "." - In order to use the Auto DevOps pipeline with your project, please review the - %a{ href: 'https://docs.gitlab.com/ee/topics/autodevops/#currently-supported-languages', style: "color:#1b69b6;text-decoration:none;" } currently supported languages, - adjust your project accordingly, and turn on the Auto DevOps pipeline within your - %a{ href: project_settings_ci_cd_url(@project), style: "color: #1b69b6; text-decoration: none;" } - CI/CD project settings. + - link_style = "color: #1b69b6; text-decoration:none;" + - pipeline_link = link_to("\##{@pipeline.iid}", pipeline_url(@pipeline), style: link_style).html_safe + - project_link = link_to(@project.name, project_url(@project), style: link_style).html_safe + - supported_langs_link = link_to(s_('Notify|currently supported languages'), 'https://docs.gitlab.com/ee/topics/autodevops/#currently-supported-languages', style: link_style ).html_safe + - settings_link = link_to(s_('Notify|CI/CD project settings'), project_settings_ci_cd_url(@project), style: link_style).html_safe + = s_('Notify|The Auto DevOps pipeline failed for pipeline %{pipeline_link} and has been disabled for %{project_link}. In order to use the Auto DevOps pipeline with your project, please review the %{supported_langs_link}, adjust your project accordingly, and turn on the Auto DevOps pipeline within your %{settings_link}.').html_safe % { pipeline_link: pipeline_link, project_link: project_link, supported_langs_link: supported_langs_link, settings_link: settings_link } %tr.pre-section %td{ style: 'text-align: center;border-bottom:1px solid #ededed' } %a{ href: 'https://docs.gitlab.com/ee/topics/autodevops/', style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;" } %button{ type: 'button', style: 'border-color: #dfdfdf; border-style: solid; border-width: 1px; border-radius: 4px; font-size: 14px; padding: 8px 16px; background-color:#fff; margin: 8px 0; cursor: pointer;' } - Learn more about Auto DevOps + = s_('Notify|Learn more about Auto DevOps') %tr.pre-section %td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; color: #333333; font-size: 14px; font-weight: 400; line-height: 1.4; padding: 16px 8px; text-align: center;" } %table.img{ border: "0", cellpadding: "0", cellspacing: "0", style: "border-collapse:collapse;margin:0 auto;" } %tbody %tr - %td{ style: "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; font-weight:500;line-height: 1.4; vertical-align: baseline;" } - Pipeline - %a{ href: pipeline_url(@pipeline), style: "color: #1b69b6; text-decoration: none;" } - = "\##{@pipeline.id}" - triggered by + - common_style = "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif;line-height: 1.4;" + - pipeline_link = link_to("\##{@pipeline.id}", pipeline_url(@pipeline), style: "color: #1b69b6; text-decoration: none;").html_safe + %td{ style: "#{common_style} font-size:14px;font-weight:500;vertical-align:baseline;" } + = s_("Notify|Pipeline %{pipeline_link} triggered by").html_safe % { pipeline_link: pipeline_link } - if @pipeline.user - %td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size: 15px; line-height: 1.4; vertical-align: middle; padding-right: 8px; padding-left:8px", width: "24" } - %img.avatar{ height: "24", src: avatar_icon_for_user(@pipeline.user, 24, only_path: false), style: "display: block; border-radius: 12px; margin: -2px 0;", width: "24", alt: "" }/ - %td{ style: "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; font-size: 14px; font-weight: 500; line-height: 1.4; vertical-align: baseline;" } + %td{ style: "#{common_style} font-size: 15px; vertical-align: middle; padding-right: 8px; padding-left:8px", width: "24" } + %img.avatar{ height: "24", src: avatar_icon_for_user(@pipeline.user, 24, only_path: false), style: "display: block; border-radius: 12px; margin: -2px 0;", width: "24", alt: "" } + %td{ style: "#{common_style} font-size: 14px; font-weight: 500; vertical-align: baseline;" } %a.muted{ href: user_url(@pipeline.user), style: "color: #333333; text-decoration: none;" } = @pipeline.user.name - else %td{ style: "font-family: 'Menlo','Liberation Mono','Consolas','DejaVu Sans Mono','Ubuntu Mono','Courier New','andale mono','lucida console',monospace; font-size: 14px; line-height: 1.4; vertical-align: baseline; padding:0 8px;" } - API + = _('API') = render 'notify/failed_builds', pipeline: @pipeline, failed: @pipeline.latest_statuses.failed diff --git a/app/views/notify/changed_milestone_email.html.haml b/app/views/notify/changed_milestone_email.html.haml index 01d27cac36b..bfc9d65d1c2 100644 --- a/app/views/notify/changed_milestone_email.html.haml +++ b/app/views/notify/changed_milestone_email.html.haml @@ -1,5 +1,5 @@ %p - Milestone changed to - %strong= link_to(@milestone.name, @milestone_url) + - milestone_link = link_to(@milestone.name, @milestone_url) + = s_('Notify|Milestone changed to %{milestone}').html_safe % { milestone: content_tag(:strong, milestone_link).html_safe } - if date_range = milestone_date_range(@milestone) = "(#{date_range})" diff --git a/app/views/notify/closed_merge_request_email.html.haml b/app/views/notify/closed_merge_request_email.html.haml index 749584a7044..bd98003a804 100644 --- a/app/views/notify/closed_merge_request_email.html.haml +++ b/app/views/notify/closed_merge_request_email.html.haml @@ -1,3 +1,4 @@ %p - Merge request #{merge_request_reference_link(@merge_request)} - was closed by #{sanitize_name(@updated_by.name)} + - mr_link = merge_request_reference_link(@merge_request) + - closed_by = sanitize_name(@updated_by.name) + = s_('Notify|Merge request %{mr_link} was closed by %{closed_by}').html_safe % { mr_link: mr_link, closed_by: closed_by } diff --git a/app/views/notify/member_access_denied_email.html.haml b/app/views/notify/member_access_denied_email.html.haml index eeef66d353d..98d3daf2107 100644 --- a/app/views/notify/member_access_denied_email.html.haml +++ b/app/views/notify/member_access_denied_email.html.haml @@ -1,12 +1,7 @@ %tr %td.text-content %p - Your request to join the - - - if @source_hidden - #{content_tag :span, 'Hidden', class: :highlight} - - else - #{link_to member_source.human_name, member_source.web_url, class: :highlight} - - #{member_source.model_name.singular} has been #{content_tag :span, 'denied', class: :highlight}. + - target_to_join = @source_hidden ? content_tag(:span, _('Hidden'), class: :highlight) : link_to(member_source.human_name, member_source.web_url, class: :highlight) + - denied_tag = content_tag :span, _('denied'), class: :highlight + = s_('Notify|Your request to join the %{target_to_join} %{target_type} has been %{denied_tag}.').html_safe % { target_to_join: target_to_join, target_type: member_source.model_name.singular, denied_tag: denied_tag } diff --git a/app/views/notify/merge_when_pipeline_succeeds_email.html.haml b/app/views/notify/merge_when_pipeline_succeeds_email.html.haml index 550d386c843..f6b517d6e34 100644 --- a/app/views/notify/merge_when_pipeline_succeeds_email.html.haml +++ b/app/views/notify/merge_when_pipeline_succeeds_email.html.haml @@ -148,6 +148,4 @@ %td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:25px 0;font-size:13px;line-height:1.6;color:#5c5c5c;" } %img{ alt: "GitLab", src: image_url('mailers/gitlab_logo_black_text.png'), style: "display:block;margin:0 auto 1em;", width: "90" } %div - - manage_notifications_link = link_to(_("Manage all notifications"), profile_notifications_url, style: "color:#3777b0;text-decoration:none;") - - help_link = link_to(_("Help"), help_url, style: "color:#3777b0;text-decoration:none;") - = _("You're receiving this email because of your account on %{host}. %{manage_notifications_link} · %{help_link}").html_safe % { host: Gitlab.config.gitlab.host, manage_notifications_link: manage_notifications_link, help_link: help_link } + = notification_reason_text(show_manage_notifications_link: true, show_help_link: true, format: :html) diff --git a/app/views/notify/unapproved_merge_request_email.html.haml b/app/views/notify/unapproved_merge_request_email.html.haml index ae58ccd3995..0b8fbe14228 100644 --- a/app/views/notify/unapproved_merge_request_email.html.haml +++ b/app/views/notify/unapproved_merge_request_email.html.haml @@ -151,6 +151,4 @@ %td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:25px 0;font-size:13px;line-height:1.6;color:#5c5c5c;" } %img{ alt: "GitLab", src: image_url('mailers/gitlab_logo_black_text.png'), style: "display:block;margin:0 auto 1em;", width: "90" }/ %div - - manage_notifications_link = link_to(_("Manage all notifications"), profile_notifications_url, style: "color:#3777b0;text-decoration:none;") - - help_link = link_to(_("Help"), help_url, style: "color:#3777b0;text-decoration:none;") - = _("You're receiving this email because of your account on %{host}. %{manage_notifications_link} · %{help_link}").html_safe % { host: Gitlab.config.gitlab.host, manage_notifications_link: manage_notifications_link, help_link: help_link } + = notification_reason_text(show_manage_notifications_link: true, show_help_link: true, format: :html) diff --git a/app/views/notify/user_auto_banned_email.html.haml b/app/views/notify/user_auto_banned_email.html.haml index d88c06526eb..8c33cd7299d 100644 --- a/app/views/notify/user_auto_banned_email.html.haml +++ b/app/views/notify/user_auto_banned_email.html.haml @@ -2,7 +2,7 @@ - link_end = '</a>'.html_safe = email_default_heading(_("We've detected some unusual activity")) %p - = _('We want to let you know %{username} has been banned from your GitLab instance due to them downloading more than %{max_project_downloads} project repositories within %{within_minutes} minutes.') % { username: sanitize_name(@user.name), max_project_downloads: @max_project_downloads, within_minutes: @within_minutes } + = _('We want to let you know %{username} has been banned from %{scope} due to them downloading more than %{max_project_downloads} project repositories within %{within_minutes} minutes.') % { username: sanitize_name(@user.name), max_project_downloads: @max_project_downloads, within_minutes: @within_minutes, scope: @ban_scope } %p = _('If this is a mistake, you can %{link_start}unban them%{link_end}.').html_safe % { link_start: link_start % { url: admin_users_url(filter: 'banned') }, link_end: link_end } %p diff --git a/app/views/notify/user_auto_banned_email.text.erb b/app/views/notify/user_auto_banned_email.text.erb index 0469ee9788c..336973c2e42 100644 --- a/app/views/notify/user_auto_banned_email.text.erb +++ b/app/views/notify/user_auto_banned_email.text.erb @@ -1,6 +1,6 @@ <%= _("We've detected some unusual activity") %> -<%= _('We want to let you know %{username} has been banned from your GitLab instance due to them downloading more than %{max_project_downloads} project repositories within %{within_minutes} minutes.') % { username: sanitize_name(@user.name), max_project_downloads: @max_project_downloads, within_minutes: @within_minutes } %> +<%= _('We want to let you know %{username} has been banned from %{scope} due to them downloading more than %{max_project_downloads} project repositories within %{within_minutes} minutes.') % { username: sanitize_name(@user.name), max_project_downloads: @max_project_downloads, within_minutes: @within_minutes, scope: @ban_scope } %> <%= _('If this is a mistake, you can unban them: %{url}.') % { url: admin_users_url(filter: 'banned') } %> diff --git a/app/views/notify/verification_instructions_email.html.haml b/app/views/notify/verification_instructions_email.html.haml new file mode 100644 index 00000000000..63d8d1b2461 --- /dev/null +++ b/app/views/notify/verification_instructions_email.html.haml @@ -0,0 +1,12 @@ +%div{ style: 'text-align:center;color:#1F1F1F;line-height:1.25em;max-width:400px;margin:0 auto;' } + %h3 + = s_('IdentityVerification|Help us protect your account') + %p{ style: 'font-size:0.9em' } + = s_('IdentityVerification|Before you sign in, we need to verify your identity. Enter the following code on the sign-in page.') + %div{ style: 'margin:26px 0;width:207px;height:53px;background-color:#F0F0F0;line-height:53px;font-weight:700;font-size:1.5em;color:#303030;' } + = @token + %p{ style: 'font-size:0.75em' } + = s_('IdentityVerification|If you have not recently tried to sign into GitLab, we recommend %{password_link_start}changing your password%{link_end} and %{two_fa_link_start}setting up Two-Factor Authentication%{link_end} to keep your account safe. Your verification code expires after %{expires_in_minutes} minutes.').html_safe % { link_end: link_end, + password_link_start: link_start(@password_link), + two_fa_link_start: link_start(@two_fa_link), + expires_in_minutes: @expires_in_minutes } diff --git a/app/views/notify/verification_instructions_email.text.erb b/app/views/notify/verification_instructions_email.text.erb new file mode 100644 index 00000000000..df507b5db71 --- /dev/null +++ b/app/views/notify/verification_instructions_email.text.erb @@ -0,0 +1,8 @@ +<%= s_('IdentityVerification|Help us protect your account') %> + +<%= s_('IdentityVerification|Before you sign in, we need to verify your identity. Enter the following code on the sign-in page.') %> + +<%= @token %> + +<%= s_('IdentityVerification|If you have not recently tried to sign into GitLab, we recommend changing your password (%{password_link}) and setting up Two-Factor Authentication (%{two_fa_link}) to keep your account safe.') % { password_link: @password_link, two_fa_link: @two_fa_link } %> +<%= s_('IdentityVerification|Your verification code expires after %{expires_in_minutes} minutes.') % { expires_in_minutes: @expires_in_minutes } %> diff --git a/app/views/profiles/_email_settings.html.haml b/app/views/profiles/_email_settings.html.haml index 457d6690a78..0ca9acba2de 100644 --- a/app/views/profiles/_email_settings.html.haml +++ b/app/views/profiles/_email_settings.html.haml @@ -22,12 +22,12 @@ { include_blank: s_("Profiles|Do not show on profile") }, { class: 'gl-form-select custom-select', disabled: email_change_disabled } %small.form-text.text-gl-muted - = s_("Profiles|This email will be displayed on your public profile") + = s_("Profiles|This email will be displayed on your public profile.") .form-group.gl-form-group - commit_email_link_url = help_page_path('user/profile/index', anchor: 'change-the-email-displayed-on-your-commits', target: '_blank') - commit_email_link_start = '<a href="%{url}">'.html_safe % { url: commit_email_link_url } - - commit_email_docs_link = s_('Profiles|This email will be used for web based operations, such as edits and merges. %{commit_email_link_start}Learn more%{commit_email_link_end}').html_safe % { commit_email_link_start: commit_email_link_start, commit_email_link_end: '</a>'.html_safe } + - commit_email_docs_link = s_('Profiles|This email will be used for web based operations, such as edits and merges. %{commit_email_link_start}Learn more.%{commit_email_link_end}').html_safe % { commit_email_link_start: commit_email_link_start, commit_email_link_end: '</a>'.html_safe } = form.label :commit_email, s_('Profiles|Commit email') .gl-md-form-input-lg = form.select :commit_email, diff --git a/app/views/profiles/_name.html.haml b/app/views/profiles/_name.html.haml index 5af4fe24d62..d798eab7635 100644 --- a/app/views/profiles/_name.html.haml +++ b/app/views/profiles/_name.html.haml @@ -2,8 +2,8 @@ - if user.read_only_attribute?(:name) = form.text_field :name, class: 'gl-form-input form-control', required: true, readonly: true %small.form-text.text-gl-muted - = s_("Profiles|Your name was automatically set based on your %{provider_label} account, so people you know can recognize you") % { provider_label: attribute_provider_label(:name) } + = s_("Profiles|Your name was automatically set based on your %{provider_label} account, so people you know can recognize you.") % { provider_label: attribute_provider_label(:name) } - else = form.text_field :name, class: 'gl-form-input form-control', required: true, title: s_("Profiles|Using emojis in names seems fun, but please try to set a status message instead") %small.form-text.text-gl-muted - = s_("Profiles|Enter your name, so people you know can recognize you") + = s_("Profiles|Enter your name, so people you know can recognize you.") diff --git a/app/views/profiles/accounts/show.html.haml b/app/views/profiles/accounts/show.html.haml index 745d3c62c5d..cdd5a9ae7a1 100644 --- a/app/views/profiles/accounts/show.html.haml +++ b/app/views/profiles/accounts/show.html.haml @@ -17,9 +17,9 @@ .row.gl-mt-3.js-search-settings-section .col-lg-4.profile-settings-sidebar %h4.gl-mt-0 - = s_('Profiles|Two-Factor Authentication') + = s_('Profiles|Two-factor authentication') %p - = s_("Profiles|Increase your account's security by enabling Two-Factor Authentication (2FA)") + = s_("Profiles|Increase your account's security by enabling two-factor authentication (2FA).") .col-lg-8 %p #{_('Status')}: #{current_user.two_factor_enabled? ? _('Enabled') : _('Disabled')} @@ -35,9 +35,9 @@ .row.gl-mt-3.js-search-settings-section .col-lg-4.profile-settings-sidebar %h4.gl-mt-0 - = s_('Profiles|Social sign-in') + = s_('Profiles|Service sign-in') %p - = s_('Profiles|Activate signin with one of the following services') + = s_('Profiles|Connect a service for sign-in.') .col-lg-8 = render 'providers', providers: button_based_providers, group_saml_identities: local_assigns[:group_saml_identities] .col-lg-12 @@ -68,7 +68,7 @@ = render 'users/deletion_guidance', user: current_user -# Delete button here - %button#delete-account-button.gl-button.btn.btn-danger.disabled{ data: { qa_selector: 'delete_account_button' } } + = render Pajamas::ButtonComponent.new(variant: :danger, button_options: { id: 'delete-account-button', disabled: true, data: { qa_selector: 'delete_account_button' }}) do = s_('Profiles|Delete account') #delete-account-modal{ data: { action_url: user_registration_path, diff --git a/app/views/profiles/gpg_keys/_form.html.haml b/app/views/profiles/gpg_keys/_form.html.haml index 9804a3b7735..b3784faed28 100644 --- a/app/views/profiles/gpg_keys/_form.html.haml +++ b/app/views/profiles/gpg_keys/_form.html.haml @@ -1,6 +1,6 @@ %div = form_for [:profile, @gpg_key], html: { class: 'js-requires-input' } do |f| - = form_errors(@gpg_key) + = form_errors(@gpg_key, pajamas_alert: true) .form-group = f.label :key, s_('Profiles|Key'), class: 'label-bold' diff --git a/app/views/profiles/passwords/edit.html.haml b/app/views/profiles/passwords/edit.html.haml index 5d3e0720176..46ae602359f 100644 --- a/app/views/profiles/passwords/edit.html.haml +++ b/app/views/profiles/passwords/edit.html.haml @@ -15,7 +15,7 @@ - else = _('Change your password or recover your current one') = form_for @user, url: profile_password_path, method: :put, html: {class: "update-password"} do |f| - = form_errors(@user) + = form_errors(@user, pajamas_alert: true) - unless @user.password_automatically_set? .form-group @@ -25,7 +25,8 @@ = _('You must provide your current password in order to change it.') .form-group = f.label :new_password, _('New password'), class: 'label-bold' - = f.password_field :new_password, required: true, autocomplete: 'new-password', class: 'form-control gl-form-input', data: { qa_selector: 'new_password_field' } + = f.password_field :new_password, required: true, autocomplete: 'new-password', class: 'form-control gl-form-input js-password-complexity-validation', data: { qa_selector: 'new_password_field' } + = render_if_exists 'shared/password_requirements_list' .form-group = f.label :password_confirmation, _('Password confirmation'), class: 'label-bold' = f.password_field :password_confirmation, required: true, autocomplete: 'new-password', class: 'form-control gl-form-input', data: { qa_selector: 'confirm_password_field' } diff --git a/app/views/profiles/passwords/new.html.haml b/app/views/profiles/passwords/new.html.haml index a2180dc68a6..5bcc92dcdfd 100644 --- a/app/views/profiles/passwords/new.html.haml +++ b/app/views/profiles/passwords/new.html.haml @@ -9,7 +9,7 @@ %br = _('After a successful password update you will be redirected to login screen.') - = form_errors(@user) + = form_errors(@user, pajamas_alert: true) - unless @user.password_automatically_set? .form-group.row @@ -21,7 +21,8 @@ .col-sm-2.col-form-label = f.label :new_password, _('New password') .col-sm-10 - = f.password_field :new_password, required: true, autocomplete: 'new-password', class: 'form-control gl-form-input', data: { qa_selector: 'new_password_field' } + = f.password_field :new_password, required: true, autocomplete: 'new-password', class: 'form-control gl-form-input js-password-complexity-validation', data: { qa_selector: 'new_password_field' } + = render_if_exists 'shared/password_requirements_list' .form-group.row .col-sm-2.col-form-label = f.label :password_confirmation, _('Password confirmation') diff --git a/app/views/profiles/show.html.haml b/app/views/profiles/show.html.haml index d1f1ff892d5..dda1640968e 100644 --- a/app/views/profiles/show.html.haml +++ b/app/views/profiles/show.html.haml @@ -5,9 +5,7 @@ - availability = availability_values - custom_emoji = show_status_emoji?(@user.status) -= gitlab_ui_form_for @user, url: profile_path, method: :put, html: { multipart: true, class: 'edit-user gl-mt-3 js-quick-submit gl-show-field-errors js-password-prompt-form', remote: true }, authenticity_token: true do |f| - = form_errors(@user) - += gitlab_ui_form_for @user, url: profile_path, method: :put, html: { multipart: true, class: 'edit-user js-edit-user gl-mt-3 js-quick-submit gl-show-field-errors js-password-prompt-form', remote: true }, authenticity_token: true do |f| .row.js-search-settings-section .col-lg-4.profile-settings-sidebar %h4.gl-mt-0 @@ -46,20 +44,18 @@ %p= s_("Profiles|This emoji and message will appear on your profile and throughout the interface.") .col-lg-8 = f.fields_for :status, @user.status do |status_form| - - emoji_button = button_tag type: :button, - class: 'js-toggle-emoji-menu emoji-menu-toggle-button btn gl-button btn-default has-tooltip', - title: s_("Profiles|Add status emoji") do + - emoji_button = render Pajamas::ButtonComponent.new(button_options: { title: s_("Profiles|Add status emoji"), + class: 'js-toggle-emoji-menu emoji-menu-toggle-button has-tooltip' } ) do - if custom_emoji = emoji_icon(@user.status.emoji, class: 'gl-mr-0!') %span#js-no-emoji-placeholder.no-emoji-placeholder{ class: ('hidden' if custom_emoji) } = sprite_icon('slight-smile', css_class: 'award-control-icon-neutral') = sprite_icon('smiley', css_class: 'award-control-icon-positive') = sprite_icon('smile', css_class: 'award-control-icon-super-positive') - - reset_message_button = button_tag type: :button, - id: 'js-clear-user-status-button', - class: 'clear-user-status btn gl-button btn-default has-tooltip', - title: s_("Profiles|Clear status") do - = sprite_icon("close") + - reset_message_button = render Pajamas::ButtonComponent.new(icon: 'close', + button_options: { id: 'js-clear-user-status-button', + class: 'has-tooltip', + title: s_("Profiles|Clear status") } ) = status_form.hidden_field :emoji, id: 'js-status-emoji-field' .form-group.gl-form-group @@ -76,7 +72,7 @@ .form-group.gl-form-group = status_form.gitlab_ui_checkbox_component :availability, s_("Profiles|Busy"), - help_text: s_('Profiles|An indicator appears next to your name and avatar'), + help_text: s_('Profiles|An indicator appears next to your name and avatar.'), checkbox_options: { data: { testid: "user-availability-checkbox" } }, checked_value: availability["busy"], unchecked_value: availability["not_set"] @@ -85,7 +81,7 @@ .row.user-time-preferences.js-search-settings-section .col-lg-4.profile-settings-sidebar %h4.gl-mt-0= s_("Profiles|Time settings") - %p= s_("Profiles|Set your local time zone") + %p= s_("Profiles|Set your local time zone.") .col-lg-8 %h5= _("Time zone") = dropdown_tag(_("Select a time zone"), options: { toggle_class: 'gl-button btn js-timezone-dropdown input-lg gl-w-full!', title: _("Select a time zone"), filter: true, placeholder: s_("OfSearchInADropdown|Filter"), data: { data: timezone_data } } ) @@ -97,7 +93,7 @@ %h4.gl-mt-0 = s_("Profiles|Main settings") %p - = s_("Profiles|This information will appear on your profile") + = s_("Profiles|This information will appear on your profile.") - if current_user.ldap_user? = s_("Profiles|Some options are unavailable for LDAP accounts") .col-lg-8 @@ -111,12 +107,12 @@ = f.label :pronouns, s_('Profiles|Pronouns') = f.text_field :pronouns, class: 'gl-form-input form-control gl-md-form-input-lg' %small.form-text.text-gl-muted - = s_("Profiles|Enter your pronouns to let people know how to refer to you") + = s_("Profiles|Enter your pronouns to let people know how to refer to you.") .form-group.gl-form-group = f.label :pronunciation, s_('Profiles|Pronunciation') = f.text_field :pronunciation, class: 'gl-form-input form-control gl-md-form-input-lg' %small.form-text.text-gl-muted - = s_("Profiles|Enter how your name is pronounced to help people address you correctly") + = s_("Profiles|Enter how your name is pronounced to help people address you correctly.") = render_if_exists 'profiles/extra_settings', form: f = render_if_exists 'profiles/email_settings', form: f .form-group.gl-form-group @@ -148,17 +144,17 @@ = f.label :organization, s_('Profiles|Organization') = f.text_field :organization, class: 'gl-form-input form-control gl-md-form-input-lg' %small.form-text.text-gl-muted - = s_("Profiles|Who you represent or work for") + = s_("Profiles|Who you represent or work for.") .form-group.gl-form-group = f.label :bio, s_('Profiles|Bio') = f.text_area :bio, class: 'gl-form-input gl-form-textarea form-control', rows: 4, maxlength: 250 %small.form-text.text-gl-muted - = s_("Profiles|Tell us about yourself in fewer than 250 characters") + = s_("Profiles|Tell us about yourself in fewer than 250 characters.") %hr %fieldset.form-group.gl-form-group %legend.col-form-label.col-form-label = _('Private profile') - - private_profile_label = s_("Profiles|Don't display activity-related personal information on your profile") + - private_profile_label = s_("Profiles|Don't display activity-related personal information on your profile.") - private_profile_help_link = link_to sprite_icon('question-o'), help_page_path('user/profile/index.md', anchor: 'make-your-user-profile-page-private') = f.gitlab_ui_checkbox_component :private_profile, '%{private_profile_label} %{private_profile_help_link}'.html_safe % { private_profile_label: private_profile_label, private_profile_help_link: private_profile_help_link.html_safe } %fieldset.form-group.gl-form-group @@ -166,7 +162,7 @@ = s_("Profiles|Private contributions") = f.gitlab_ui_checkbox_component :include_private_contributions, s_('Profiles|Include private contributions on my profile'), - help_text: s_("Profiles|Choose to show contributions of private projects on your public profile without any project, repository or organization information") + help_text: s_("Profiles|Choose to show contributions of private projects on your public profile without any project, repository or organization information.") %hr = f.submit s_("Profiles|Update profile settings"), class: 'gl-button btn btn-confirm gl-mr-3 js-password-prompt-btn' = link_to _("Cancel"), user_path(current_user), class: 'gl-button btn btn-default btn-cancel' diff --git a/app/views/profiles/two_factor_auths/show.html.haml b/app/views/profiles/two_factor_auths/show.html.haml index 845baae3bb2..6304d42896d 100644 --- a/app/views/profiles/two_factor_auths/show.html.haml +++ b/app/views/profiles/two_factor_auths/show.html.haml @@ -78,7 +78,7 @@ .col-lg-8 - registration = webauthn_enabled ? @webauthn_registration : @u2f_registration - if registration.errors.present? - = form_errors(registration) + = form_errors(registration, pajamas_alert: true) - if webauthn_enabled = render "authentication/register", target_path: create_webauthn_profile_two_factor_auth_path - else diff --git a/app/views/projects/_activity.html.haml b/app/views/projects/_activity.html.haml index 05166395067..402affc7b0e 100644 --- a/app/views/projects/_activity.html.haml +++ b/app/views/projects/_activity.html.haml @@ -11,4 +11,4 @@ .content_list.project-activity{ :"data-href" => activity_project_path(@project) } .loading - = gl_loading_icon(size: 'md') + = render Pajamas::SpinnerComponent.new(size: :md) diff --git a/app/views/projects/_files.html.haml b/app/views/projects/_files.html.haml index bea5d548e03..319c6333e77 100644 --- a/app/views/projects/_files.html.haml +++ b/app/views/projects/_files.html.haml @@ -16,7 +16,7 @@ #js-code-owners - if is_project_overview - .project-buttons.gl-mb-3.js-show-on-project-root + .project-buttons.gl-mb-5.js-show-on-project-root{ data: { qa_selector: 'project_buttons' } } = render 'stat_anchor_list', anchors: @project.statistics_buttons(show_auto_devops_callout: show_auto_devops_callout), project_buttons: true #js-tree-list{ data: vue_file_list_data(project, ref) } diff --git a/app/views/projects/_import_project_pane.html.haml b/app/views/projects/_import_project_pane.html.haml index cb15858a935..42cdc1d6989 100644 --- a/app/views/projects/_import_project_pane.html.haml +++ b/app/views/projects/_import_project_pane.html.haml @@ -24,21 +24,21 @@ - if bitbucket_import_enabled? %div - = link_to status_import_bitbucket_path, class: "gl-button btn-default btn import_bitbucket js-import-project-btn #{'js-how-to-import-link' unless bitbucket_import_configured?}", + = link_to status_import_bitbucket_path(namespace_id: namespace_id), class: "gl-button btn-default btn import_bitbucket js-import-project-btn #{'js-how-to-import-link' unless bitbucket_import_configured?}", data: { modal_title: _("Import projects from Bitbucket"), modal_message: import_from_bitbucket_message, platform: 'bitbucket_cloud', **tracking_attrs_data(track_label, 'click_button', 'bitbucket_cloud') } do .gl-button-icon = sprite_icon('bitbucket') Bitbucket Cloud - if bitbucket_server_import_enabled? %div - = link_to status_import_bitbucket_server_path, class: "gl-button btn-default btn import_bitbucket js-import-project-btn", data: { platform: 'bitbucket_server', **tracking_attrs_data(track_label, 'click_button', 'bitbucket_server') } do + = link_to status_import_bitbucket_server_path(namespace_id: namespace_id), class: "gl-button btn-default btn import_bitbucket js-import-project-btn", data: { platform: 'bitbucket_server', **tracking_attrs_data(track_label, 'click_button', 'bitbucket_server') } do .gl-button-icon = sprite_icon('bitbucket') Bitbucket Server %div - if gitlab_import_enabled? %div - = link_to status_import_gitlab_path, class: "gl-button btn-default btn import_gitlab js-import-project-btn #{'js-how-to-import-link' unless gitlab_import_configured?}", + = link_to status_import_gitlab_path(namespace_id: namespace_id), class: "gl-button btn-default btn import_gitlab js-import-project-btn #{'js-how-to-import-link' unless gitlab_import_configured?}", data: { modal_title: _("Import projects from GitLab.com"), modal_message: import_from_gitlab_message, platform: 'gitlab_com', **tracking_attrs_data(track_label, 'click_button', 'gitlab_com') } do .gl-button-icon = sprite_icon('tanuki') @@ -46,7 +46,7 @@ - if fogbugz_import_enabled? %div - = link_to new_import_fogbugz_path, class: 'gl-button btn-default btn import_fogbugz js-import-project-btn', data: { platform: 'fogbugz', **tracking_attrs_data(track_label, 'click_button', 'fogbugz') } do + = link_to new_import_fogbugz_path(namespace_id: namespace_id), class: 'gl-button btn-default btn import_fogbugz js-import-project-btn', data: { platform: 'fogbugz', **tracking_attrs_data(track_label, 'click_button', 'fogbugz') } do .gl-button-icon = sprite_icon('bug') FogBugz diff --git a/app/views/projects/_merge_request_squash_options_settings.html.haml b/app/views/projects/_merge_request_squash_options_settings.html.haml index 4b428363646..372c0723600 100644 --- a/app/views/projects/_merge_request_squash_options_settings.html.haml +++ b/app/views/projects/_merge_request_squash_options_settings.html.haml @@ -5,7 +5,7 @@ %b= s_('ProjectSettings|Squash commits when merging') %p.text-secondary = s_('ProjectSettings|Set the default behavior of this option in merge requests. Changes to this are also applied to existing merge requests.') - = link_to "What is squashing?", help_page_path('user/project/merge_requests/squash_and_merge.md'), target: '_blank', rel: 'noopener noreferrer' + = link_to s_('ProjectSettings|What is squashing?'), help_page_path('user/project/merge_requests/squash_and_merge.md'), target: '_blank', rel: 'noopener noreferrer' = settings.gitlab_ui_radio_component :squash_option, :never, diff --git a/app/views/projects/_new_project_fields.html.haml b/app/views/projects/_new_project_fields.html.haml index 2cbb9758703..992b46c1f7b 100644 --- a/app/views/projects/_new_project_fields.html.haml +++ b/app/views/projects/_new_project_fields.html.haml @@ -35,7 +35,7 @@ - if current_user.can_create_group? .form-text.text-muted - link_start_group_path = '<a href="%{path}">' % { path: new_group_path } - - project_tip = s_('ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}') % { link_start: link_start_group_path, link_end: '</a>' } + - project_tip = s_('ProjectsNew|Want to organize several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}') % { link_start: link_start_group_path, link_end: '</a>' } = project_tip.html_safe = render Pajamas::AlertComponent.new(alert_options: { class: "gl-mb-4 gl-display-none js-user-readme-repo" }, dismissible: false, @@ -52,10 +52,11 @@ - unless Gitlab::CurrentSettings.current_application_settings.hide_third_party_offers? || !Gitlab.com? .js-deployment-target-select -= f.label :visibility_level, class: 'label-bold' do - = s_('ProjectsNew|Visibility Level') - = link_to sprite_icon('question-o'), help_page_path('public_access/public_access'), aria: { label: 'Documentation for Visibility Level' }, target: '_blank', rel: 'noopener noreferrer' -= render 'shared/visibility_level', f: f, visibility_level: visibility_level.to_i, can_change_visibility_level: true, form_model: @project, with_label: false, data: { qa_selector: 'visibility_radios'} +.form-group.gl-form-group + = f.label :visibility_level, class: 'label-bold' do + = s_('ProjectsNew|Visibility Level') + = link_to sprite_icon('question-o'), help_page_path('user/public_access'), aria: { label: 'Documentation for Visibility Level' }, target: '_blank', rel: 'noopener noreferrer' + = render 'shared/visibility_level', f: f, visibility_level: visibility_level.to_i, can_change_visibility_level: true, form_model: @project, with_label: false, data: { qa_selector: 'visibility_radios'} - if !hide_init_with_readme = f.label :project_configuration, class: 'label-bold' do @@ -77,5 +78,7 @@ = s_('ProjectsNew|Analyze your source code for known security vulnerabilities.') = link_to _('Learn more.'), help_page_path('user/application_security/sast/index'), target: '_blank', rel: 'noopener noreferrer', data: { track_action: 'followed' } +-# this partial is from JiHu, see details in https://jihulab.com/gitlab-cn/gitlab/-/merge_requests/675 += render_if_exists 'shared/other_project_options', f: f, visibility_level: visibility_level, track_label: track_label = f.submit _('Create project'), class: "btn gl-button btn-confirm js-create-project-button", data: { qa_selector: 'project_create_button', track_label: "#{track_label}", track_action: "click_button", track_property: "create_project", track_value: "" } = link_to _('Cancel'), dashboard_projects_path, class: 'btn gl-button btn-default btn-cancel', data: { track_label: "#{track_label}", track_action: "click_button", track_property: "cancel", track_value: "" } diff --git a/app/views/projects/_remove.html.haml b/app/views/projects/_remove.html.haml index d0dfbb89ca7..ed238dab4ff 100644 --- a/app/views/projects/_remove.html.haml +++ b/app/views/projects/_remove.html.haml @@ -7,7 +7,7 @@ %h4.danger-title= _('Delete project') %p %strong= _('Deleting the project will delete its repository and all related resources, including issues and merge requests.') - = link_to _('Learn more.'), help_page_path('user/project/settings/index', anchor: 'removing-a-fork-relationship'), target: '_blank', rel: 'noopener noreferrer' + = link_to _('Learn more.'), help_page_path('user/project/settings/index', anchor: 'remove-a-fork-relationship'), target: '_blank', rel: 'noopener noreferrer' %p %strong= _('Deleted projects cannot be restored!') #js-project-delete-button{ data: { form_path: project_path(project), confirm_phrase: delete_confirm_phrase(project), is_fork: project.forked?.to_s, issues_count: number_with_delimiter(issues_count), merge_requests_count: number_with_delimiter(merge_requests_count), forks_count: number_with_delimiter(forks_count), stars_count: number_with_delimiter(project.star_count) } } diff --git a/app/views/projects/_remove_fork.html.haml b/app/views/projects/_remove_fork.html.haml index bb51aa86170..bfc1e77118a 100644 --- a/app/views/projects/_remove_fork.html.haml +++ b/app/views/projects/_remove_fork.html.haml @@ -8,5 +8,5 @@ = form_for @project, url: remove_fork_project_path(@project), method: :delete, html: { id: remove_form_id } do |f| %p %strong= _('Once removed, the fork relationship cannot be restored. This project will no longer be able to receive or send merge requests to the source project or other forks.') - = link_to _('Learn more.'), help_page_path('user/project/settings/index', anchor: 'removing-a-fork-relationship'), target: '_blank', rel: 'noopener noreferrer' + = link_to _('Learn more.'), help_page_path('user/project/settings/index', anchor: 'remove-a-fork-relationship'), target: '_blank', rel: 'noopener noreferrer' .js-confirm-danger{ data: remove_fork_project_confirm_json(@project, remove_form_id) } diff --git a/app/views/projects/_stat_anchor_list.html.haml b/app/views/projects/_stat_anchor_list.html.haml index 13ff8abe499..4a21cb32c20 100644 --- a/app/views/projects/_stat_anchor_list.html.haml +++ b/app/views/projects/_stat_anchor_list.html.haml @@ -2,7 +2,7 @@ - project_buttons = local_assigns.fetch(:project_buttons, false) - return unless anchors.any? -%ul.nav +%ul.nav.gl-gap-3 - anchors.each do |anchor| %li.nav-item = link_to_if(anchor.link, anchor.label, anchor.link, stat_anchor_attrs(anchor)) do diff --git a/app/views/projects/_transfer.html.haml b/app/views/projects/_transfer.html.haml index 9e6648c71fc..393b199fb05 100644 --- a/app/views/projects/_transfer.html.haml +++ b/app/views/projects/_transfer.html.haml @@ -7,7 +7,7 @@ %h4.danger-title= _('Transfer project') = form_for @project, url: transfer_project_path(@project), method: :put, html: { class: 'js-project-transfer-form', id: form_id } do |f| .form-group - - link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_path('user/project/settings/index', anchor: 'transferring-an-existing-project-into-another-namespace') } + - link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_path('user/project/settings/index', anchor: 'transfer-a-project-to-another-namespace') } %p= _("Transfer your project into another namespace. %{link_start}Learn more.%{link_end}").html_safe % { link_start: link_start, link_end: '</a>'.html_safe } %p= _('When you transfer your project to a group, you can easily manage multiple projects, view usage quotas for storage, pipeline minutes, and users, and start a trial or upgrade to a paid tier.') %p diff --git a/app/views/projects/activity.html.haml b/app/views/projects/activity.html.haml index e69c4f51ec4..6a4760c3954 100644 --- a/app/views/projects/activity.html.haml +++ b/app/views/projects/activity.html.haml @@ -1,5 +1,4 @@ - page_title _("Activity") -= render_if_exists 'shared/minute_limit_banner', namespace: @project = render 'projects/last_push' = render 'projects/activity' diff --git a/app/views/projects/blame/show.html.haml b/app/views/projects/blame/show.html.haml index bc1e62a8980..b44c773adff 100644 --- a/app/views/projects/blame/show.html.haml +++ b/app/views/projects/blame/show.html.haml @@ -20,7 +20,7 @@ %span.legend-box.legend-box-9 %span.right-label Older - .table-responsive.file-content.blame.code{ class: user_color_scheme } + .table-responsive.file-content.blame.code{ class: user_color_scheme, data: { qa_selector: 'blame_file_content' } } %table - current_line = @blame.first_line - @blame.groups.each do |blame_group| diff --git a/app/views/projects/blob/_blob.html.haml b/app/views/projects/blob/_blob.html.haml index 2c3aade1068..4139be053f8 100644 --- a/app/views/projects/blob/_blob.html.haml +++ b/app/views/projects/blob/_blob.html.haml @@ -2,6 +2,8 @@ - project = @project.present(current_user: current_user) - ref = local_assigns[:ref] || @ref - expanded = params[:expanded].present? +- if blob.rich_viewer + - add_page_startup_api_call local_assigns.fetch(:viewer_url) { url_for(safe_params.merge(viewer: blob.rich_viewer.type, format: :json)) } .info-well.d-none.d-sm-block .well-segment @@ -14,7 +16,7 @@ #blob-content-holder.blob-content-holder - if @code_navigation_path #js-code-navigation{ data: { code_navigation_path: @code_navigation_path, blob_path: blob.path, definition_path_prefix: project_blob_path(@project, @ref) } } - - if Feature.enabled?(:refactor_blob_viewer, @project) && !expanded + - if !expanded -# Data info will be removed once we migrate this to use GraphQL -# Follow-up issue: https://gitlab.com/gitlab-org/gitlab/-/issues/330406 #js-view-blob-app{ data: { blob_path: blob.path, diff --git a/app/views/projects/blob/_remove.html.haml b/app/views/projects/blob/_remove.html.haml deleted file mode 100644 index 7511de76223..00000000000 --- a/app/views/projects/blob/_remove.html.haml +++ /dev/null @@ -1,16 +0,0 @@ -#modal-remove-blob.modal - .modal-dialog - .modal-content - .modal-header - %h1.page-title.gl-font-size-h-display Delete #{@blob.name} - %button.close{ type: "button", "data-dismiss": "modal", "aria-label" => _('Close') } - %span{ "aria-hidden": "true" } × - - .modal-body - = form_tag project_blob_path(@project, @id), method: :delete, class: 'js-delete-blob-form js-quick-submit js-requires-input' do - = render 'shared/new_commit_form', placeholder: "Delete #{@blob.name}" - - .form-group.row - .offset-sm-2.col-sm-10 - = button_tag 'Delete file', class: 'btn gl-button btn-danger btn-remove-file' - = link_to _('Cancel'), '#', class: "btn gl-button btn-cancel", "data-dismiss" => "modal" diff --git a/app/views/projects/blob/show.html.haml b/app/views/projects/blob/show.html.haml index a91c0d63b00..16ecc1cc5a0 100644 --- a/app/views/projects/blob/show.html.haml +++ b/app/views/projects/blob/show.html.haml @@ -11,8 +11,5 @@ #tree-holder.tree-holder = render 'blob', blob: @blob - - if can_modify_blob?(@blob) - = render 'projects/blob/remove' - = render partial: 'pipeline_tour_success' if show_suggest_pipeline_creation_celebration? = render 'shared/web_ide_path' diff --git a/app/views/projects/blob/viewers/_stl.html.haml b/app/views/projects/blob/viewers/_stl.html.haml index 8bf0339fc3c..7206a969fb7 100644 --- a/app/views/projects/blob/viewers/_stl.html.haml +++ b/app/views/projects/blob/viewers/_stl.html.haml @@ -3,7 +3,7 @@ = gl_loading_icon(size: "md", css_class: "gl-my-4") .text-center.gl-mt-3.gl-mb-3.stl-controls .btn-group - %button.gl-button.btn.btn-default.btn-sm.js-material-changer{ data: { type: 'wireframe' } } - Wireframe - %button.gl-button.btn.btn-default.btn-sm.selected.js-material-changer{ data: { type: 'default' } } - Solid + = render Pajamas::ButtonComponent.new(size: :small, button_options: { class: 'js-material-changer', data: { material: 'wireframe' } }) do + = _('Wireframe') + = render Pajamas::ButtonComponent.new(size: :small, button_options: { class: 'js-material-changer selected', data: { material: 'default' } }) do + = _('Solid') diff --git a/app/views/projects/branches/_branch.html.haml b/app/views/projects/branches/_branch.html.haml index e4ec7a43d61..1477ae66d80 100644 --- a/app/views/projects/branches/_branch.html.haml +++ b/app/views/projects/branches/_branch.html.haml @@ -1,9 +1,9 @@ - merged = local_assigns.fetch(:merged, false) - commit = @repository.commit(branch.dereferenced_target) - merge_project = merge_request_source_project_for_project(@project) -%li{ class: "branch-item js-branch-item js-branch-#{branch.name}", data: { name: branch.name } } +%li{ class: "branch-item gl-display-flex! gl-align-items-center! js-branch-item js-branch-#{branch.name}", data: { name: branch.name } } .branch-info - .branch-title + .gl-display-flex.gl-align-items-center = sprite_icon('branch', size: 12, css_class: 'gl-flex-shrink-0') = link_to project_tree_path(@project, branch.name), class: 'item-title str-truncated-100 ref-name gl-ml-3 qa-branch-name' do = branch.name diff --git a/app/views/projects/ci/builds/_build.html.haml b/app/views/projects/ci/builds/_build.html.haml index c33b9b538f3..bd096ed74f5 100644 --- a/app/views/projects/ci/builds/_build.html.haml +++ b/app/views/projects/ci/builds/_build.html.haml @@ -132,4 +132,4 @@ = sprite_icon('play', css_class: 'gl-icon') - elsif job.retryable? = link_to retry_project_job_path(job.project, job, return_to: request.original_url), method: :post, title: _('Retry'), class: 'gl-button btn btn-default btn-icon' do - = sprite_icon('repeat', css_class: 'gl-icon') + = sprite_icon('retry', css_class: 'gl-icon') diff --git a/app/views/projects/commit/_change.html.haml b/app/views/projects/commit/_change.html.haml index 81a77489075..e04c4ebfda2 100644 --- a/app/views/projects/commit/_change.html.haml +++ b/app/views/projects/commit/_change.html.haml @@ -1,3 +1,12 @@ +- can_push_code = can?(current_user, :push_code, @project) + +- if !can_push_code && selected_branch.present? + - branch_collaboration = @project.branch_allows_collaboration?(current_user, selected_branch) + - existing_branch = ERB::Util.html_escape(selected_branch) +- else + - branch_collaboration = false + - existing_branch = '' + - case type.to_s - when 'revert' - revert_merge_request = _('Revert this merge request') @@ -7,9 +16,9 @@ .js-revert-commit-modal{ data: { title: title, endpoint: revert_namespace_project_commit_path(commit, namespace_id: @project.namespace.full_path, project_id: @project), branch: @project.default_branch, - push_code: can?(current_user, :push_code, @project).to_s, - branch_collaboration: @project.branch_allows_collaboration?(current_user, selected_branch).to_s, - existing_branch: ERB::Util.html_escape(selected_branch), + push_code: can_push_code.to_s, + branch_collaboration: branch_collaboration.to_s, + existing_branch: existing_branch, branches_endpoint: project_branches_path(@project) } } - when 'cherry-pick' @@ -20,8 +29,8 @@ branch: @project.default_branch, target_project_id: @project.id, target_project_name: @project.full_path, - push_code: can?(current_user, :push_code, @project).to_s, - branch_collaboration: @project.branch_allows_collaboration?(current_user, selected_branch).to_s, - existing_branch: ERB::Util.html_escape(selected_branch), + push_code: can_push_code.to_s, + branch_collaboration: branch_collaboration.to_s, + existing_branch: existing_branch, branches_endpoint: refs_project_path(@project), projects: cherry_pick_projects_data(@project).to_json } } diff --git a/app/views/projects/commits/_commit.html.haml b/app/views/projects/commits/_commit.html.haml index 4442f62b221..71485e203db 100644 --- a/app/views/projects/commits/_commit.html.haml +++ b/app/views/projects/commits/_commit.html.haml @@ -24,7 +24,7 @@ .avatar-cell.d-none.d-sm-block = author_avatar(commit, size: 40, has_tooltip: false) - .commit-detail.flex-list + .commit-detail.flex-list.gl-display-flex.gl-justify-content-space-between.gl-align-items-flex-start.gl-flex-grow-1.gl-min-w-0 .commit-content{ data: { qa_selector: 'commit_content' } } - if view_details && merge_request = link_to commit.title, project_commit_path(project, commit.id, merge_request_iid: merge_request.iid), class: ["commit-row-message item-title js-onboarding-commit-item", ("font-italic" if commit.message.empty?)] diff --git a/app/views/projects/diffs/_content.html.haml b/app/views/projects/diffs/_content.html.haml index 23f9afe8352..780bb3404cc 100644 --- a/app/views/projects/diffs/_content.html.haml +++ b/app/views/projects/diffs/_content.html.haml @@ -3,9 +3,9 @@ .diff-content - if diff_file.has_renderable? - %div{ id: "#raw-diff-#{file_hash}", data: { file_hash: file_hash, diff_toggle_entity: 'toHide' } } + .hidden{ id: "#raw-diff-#{file_hash}", data: { file_hash: file_hash, diff_toggle_entity: 'rawViewer' } } = render 'projects/diffs/viewer', viewer: diff_file.viewer - %div{ id: "#rendered-diff-#{file_hash}", data: { file_hash: file_hash, diff_toggle_entity: 'toShow' } } + %div{ id: "#rendered-diff-#{file_hash}", data: { file_hash: file_hash, diff_toggle_entity: 'renderedViewer' } } = render 'projects/diffs/viewer', viewer: diff_file.rendered.viewer - else = render 'projects/diffs/viewer', viewer: diff_file.viewer diff --git a/app/views/projects/edit.html.haml b/app/views/projects/edit.html.haml index 41d6b7086c1..a7dd69a9607 100644 --- a/app/views/projects/edit.html.haml +++ b/app/views/projects/edit.html.haml @@ -5,8 +5,6 @@ - expanded = expanded_by_default? - reduce_visibility_form_id = 'reduce-visibility-form' -= render_if_exists 'shared/minute_limit_banner', namespace: @project - %section.settings.general-settings.no-animate.expanded#js-general-settings .settings-header %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only= _('Naming, topics, avatar') @@ -90,7 +88,7 @@ = render 'projects/errors' = form_for @project do |f| .form-group - - link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_path('user/project/settings/index', anchor: 'renaming-a-repository') } + - link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_path('user/project/settings/index', anchor: 'rename-a-repository') } %p= _("A project’s repository name defines its URL (the one you use to access the project via a browser) and its place on the file disk where GitLab is installed. %{link_start}Learn more.%{link_end}").html_safe % { link_start: link_start, link_end: '</a>'.html_safe } %ul %li= _("Be careful. Renaming a project's repository can have unintended side effects.") diff --git a/app/views/projects/empty.html.haml b/app/views/projects/empty.html.haml index ce6d021ce2f..6f2e135f9d3 100644 --- a/app/views/projects/empty.html.haml +++ b/app/views/projects/empty.html.haml @@ -21,10 +21,10 @@ = _('You can get started by cloning the repository or start adding files to it with one of the following options.') .project-buttons.qa-quick-actions - .project-clone-holder.d-block.d-md-none.mt-2.mr-2 + .project-clone-holder.d-block.d-md-none.gl-mt-3.gl-mr-3 = render "shared/mobile_clone_panel" - .project-clone-holder.d-none.d-md-inline-block.mb-2.mr-2.float-left + .project-clone-holder.d-none.d-md-inline-block.gl-mb-3.gl-mr-3.float-left = render "projects/buttons/clone" = render 'stat_anchor_list', anchors: @project.empty_repo_statistics_buttons, project_buttons: true diff --git a/app/views/projects/find_file/show.html.haml b/app/views/projects/find_file/show.html.haml index af5ad06d30e..2e024b8ffc4 100644 --- a/app/views/projects/find_file/show.html.haml +++ b/app/views/projects/find_file/show.html.haml @@ -1,6 +1,6 @@ - page_title _("Find File"), @ref -.file-finder-holder.tree-holder.clearfix.js-file-finder{ 'data-file-find-url': "#{escape_javascript(project_files_path(@project, @ref, format: :json))}", 'data-find-tree-url': escape_javascript(project_tree_path(@project, @ref)), 'data-blob-url-template': escape_javascript(project_blob_path(@project, @id || @commit.id)) } +.file-finder-holder.tree-holder.clearfix.js-file-finder{ 'data-file-find-url': "#{escape_javascript(project_files_path(@project, @ref, format: :json))}", 'data-find-tree-url': escape_javascript(project_tree_path(@project, @ref)), 'data-blob-url-template': escape_javascript(project_blob_path(@project, @ref)) } .nav-block .tree-ref-holder = render 'shared/ref_switcher', destination: 'find_file', path: @path diff --git a/app/views/projects/forks/new.html.haml b/app/views/projects/forks/new.html.haml index 7243852e1f5..36347776ec9 100644 --- a/app/views/projects/forks/new.html.haml +++ b/app/views/projects/forks/new.html.haml @@ -4,7 +4,7 @@ endpoint: new_project_fork_path(@project, format: :json), new_group_path: new_group_path, project_full_path: project_path(@project), - visibility_help_path: help_page_path("public_access/public_access"), + visibility_help_path: help_page_path("user/public_access"), project_id: @project.id, project_name: @project.name, project_path: @project.path, diff --git a/app/views/projects/google_cloud/configuration/index.html.haml b/app/views/projects/google_cloud/configuration/index.html.haml new file mode 100644 index 00000000000..ec977898f47 --- /dev/null +++ b/app/views/projects/google_cloud/configuration/index.html.haml @@ -0,0 +1,7 @@ +- add_to_breadcrumbs _('Google Cloud'), @google_cloud_path +- breadcrumb_title s_('CloudSeed|Configuration') +- page_title s_('CloudSeed|Configuration') + +- @content_class = "limit-container-width" unless fluid_layout + +#js-google-cloud-configuration{ data: @js_data } diff --git a/app/views/projects/google_cloud/databases/index.html.haml b/app/views/projects/google_cloud/databases/index.html.haml new file mode 100644 index 00000000000..ad732317d8d --- /dev/null +++ b/app/views/projects/google_cloud/databases/index.html.haml @@ -0,0 +1,7 @@ +- add_to_breadcrumbs _('Google Cloud'), @google_cloud_path +- breadcrumb_title s_('CloudSeed|Databases') +- page_title s_('CloudSeed|Databases') + +- @content_class = "limit-container-width" unless fluid_layout + +#js-google-cloud-databases{ data: @js_data } diff --git a/app/views/projects/google_cloud/deployments/index.html.haml b/app/views/projects/google_cloud/deployments/index.html.haml new file mode 100644 index 00000000000..b140159a7f5 --- /dev/null +++ b/app/views/projects/google_cloud/deployments/index.html.haml @@ -0,0 +1,7 @@ +- add_to_breadcrumbs _('Google Cloud'), @google_cloud_path +- breadcrumb_title s_('CloudSeed|Deployments') +- page_title s_('CloudSeed|Deployments') + +- @content_class = "limit-container-width" unless fluid_layout + +#js-google-cloud-deployments{ data: @js_data } diff --git a/app/views/projects/google_cloud/errors/gcp_error.html.haml b/app/views/projects/google_cloud/errors/gcp_error.html.haml deleted file mode 100644 index 69e481501d5..00000000000 --- a/app/views/projects/google_cloud/errors/gcp_error.html.haml +++ /dev/null @@ -1,6 +0,0 @@ -- breadcrumb_title _('Google Cloud') -- page_title _('Google Cloud') - -- @content_class = "limit-container-width" unless fluid_layout - -#js-google-cloud{ data: @js_data } diff --git a/app/views/projects/google_cloud/errors/no_gcp_projects.html.haml b/app/views/projects/google_cloud/errors/no_gcp_projects.html.haml deleted file mode 100644 index 69e481501d5..00000000000 --- a/app/views/projects/google_cloud/errors/no_gcp_projects.html.haml +++ /dev/null @@ -1,6 +0,0 @@ -- breadcrumb_title _('Google Cloud') -- page_title _('Google Cloud') - -- @content_class = "limit-container-width" unless fluid_layout - -#js-google-cloud{ data: @js_data } diff --git a/app/views/projects/google_cloud/gcp_regions/index.html.haml b/app/views/projects/google_cloud/gcp_regions/index.html.haml index 3a6f8ca059d..d7cabaa029b 100644 --- a/app/views/projects/google_cloud/gcp_regions/index.html.haml +++ b/app/views/projects/google_cloud/gcp_regions/index.html.haml @@ -1,8 +1,8 @@ - add_to_breadcrumbs _('Google Cloud'), @google_cloud_path -- breadcrumb_title _('Regions') -- page_title _('Regions') +- breadcrumb_title _('CloudSeed|Regions') +- page_title s_('CloudSeed|Regions') - @content_class = "limit-container-width" unless fluid_layout = form_tag project_google_cloud_gcp_regions_path(@project), method: 'post' do - #js-google-cloud{ data: @js_data } + #js-google-cloud-gcp-regions{ data: @js_data } diff --git a/app/views/projects/google_cloud/index.html.haml b/app/views/projects/google_cloud/index.html.haml deleted file mode 100644 index 69e481501d5..00000000000 --- a/app/views/projects/google_cloud/index.html.haml +++ /dev/null @@ -1,6 +0,0 @@ -- breadcrumb_title _('Google Cloud') -- page_title _('Google Cloud') - -- @content_class = "limit-container-width" unless fluid_layout - -#js-google-cloud{ data: @js_data } diff --git a/app/views/projects/google_cloud/service_accounts/index.html.haml b/app/views/projects/google_cloud/service_accounts/index.html.haml index 9b82bc0acb5..6191de577fe 100644 --- a/app/views/projects/google_cloud/service_accounts/index.html.haml +++ b/app/views/projects/google_cloud/service_accounts/index.html.haml @@ -1,8 +1,8 @@ - add_to_breadcrumbs _('Google Cloud'), @google_cloud_path -- breadcrumb_title _('Service Account') -- page_title _('Service Account') +- breadcrumb_title s_('CloudSeed|Service Account') +- page_title s_('CloudSeed|Service Account') - @content_class = "limit-container-width" unless fluid_layout = form_tag project_google_cloud_service_accounts_path(@project), method: 'post' do - #js-google-cloud{ data: @js_data } + #js-google-cloud-service-accounts{ data: @js_data } diff --git a/app/views/projects/harbor/repositories/index.html.haml b/app/views/projects/harbor/repositories/index.html.haml index 270cbf3facd..0fce3b7f8aa 100644 --- a/app/views/projects/harbor/repositories/index.html.haml +++ b/app/views/projects/harbor/repositories/index.html.haml @@ -1,7 +1,7 @@ - page_title _("Harbor Registry") - @content_class = "limit-container-width" unless fluid_layout -#js-harbor-registry-list-project{ data: { endpoint: project_harbor_registry_index_path(@project), +#js-harbor-registry-list-project{ data: { endpoint: project_harbor_repositories_path(@project), "no_containers_image" => image_path('illustrations/docker-empty-state.svg'), "containers_error_image" => image_path('illustrations/docker-error-state.svg'), "repository_url" => 'demo.harbor.com/gitlab-cn/build/cng-images/gitlab-kas', diff --git a/app/views/projects/imports/show.html.haml b/app/views/projects/imports/show.html.haml index 8096bc6cead..9fe541c5912 100644 --- a/app/views/projects/imports/show.html.haml +++ b/app/views/projects/imports/show.html.haml @@ -3,9 +3,10 @@ .save-project-loader .center - %h2 + %h2.gl--flex-center.gl-flex-direction-column.gl-sm-flex-direction-row = gl_loading_icon(inline: true) - = import_in_progress_title + %span.gl-ml-3 + = import_in_progress_title - if !has_ci_cd_only_params? && @project.external_import? %p.monospace git clone --bare #{@project.safe_import_url} %p diff --git a/app/views/projects/incidents/show.html.haml b/app/views/projects/incidents/show.html.haml index 4d4607e8e36..5043f94bd5c 100644 --- a/app/views/projects/incidents/show.html.haml +++ b/app/views/projects/incidents/show.html.haml @@ -2,5 +2,6 @@ - add_to_breadcrumbs _("Incidents"), project_incidents_path(@project) - breadcrumb_title @issue.to_reference - page_title "#{@issue.title} (#{@issue.to_reference})", _("Incidents") +- add_page_specific_style 'page_bundles/issues_show' = render 'projects/issuable/show', issuable: @issue diff --git a/app/views/projects/issues/_discussion.html.haml b/app/views/projects/issues/_discussion.html.haml index a904b53515c..16b795ee3c9 100644 --- a/app/views/projects/issues/_discussion.html.haml +++ b/app/views/projects/issues/_discussion.html.haml @@ -1,4 +1,4 @@ -- add_page_startup_api_call Feature.enabled?(:paginated_issue_discussions, @project) ? discussions_path(@issue, per_page: 20) : discussions_path(@issue) +- add_page_startup_api_call discussions_path(@issue, per_page: 20) - @gfm_form = true diff --git a/app/views/projects/issues/_issue.html.haml b/app/views/projects/issues/_issue.html.haml index 4c96875ce42..4d4645c7087 100644 --- a/app/views/projects/issues/_issue.html.haml +++ b/app/views/projects/issues/_issue.html.haml @@ -65,6 +65,9 @@ = render 'shared/issuable_meta_data', issuable: issue - .float-right.issuable-updated-at.d-none.d-sm-inline-block + .float-right.issuable-timestamp.d-none.d-sm-inline-block %span - = _('updated %{time_ago}').html_safe % { time_ago: time_ago_with_tooltip(issue.updated_at, placement: 'bottom', html_class: 'issue_update_ago') } + - if issue.closed? && issue.closed_at + = _('closed %{timeago}').html_safe % { timeago: time_ago_with_tooltip(issue.closed_at, placement: 'bottom') } + - else + = _('updated %{time_ago}').html_safe % { time_ago: time_ago_with_tooltip(issue.updated_at, placement: 'bottom') } diff --git a/app/views/projects/issues/_work_item_links.html.haml b/app/views/projects/issues/_work_item_links.html.haml index 55a8eb720b6..5d478784350 100644 --- a/app/views/projects/issues/_work_item_links.html.haml +++ b/app/views/projects/issues/_work_item_links.html.haml @@ -1,2 +1,2 @@ - if Feature.enabled?(:work_items_hierarchy, @project) - .js-work-item-links-root{ data: { issuable_id: @issue.id } } + .js-work-item-links-root{ data: { issuable_id: @issue.id, project_path: @project.full_path } } diff --git a/app/views/projects/issues/show.html.haml b/app/views/projects/issues/show.html.haml index 3572d1d6556..06c422fc4d6 100644 --- a/app/views/projects/issues/show.html.haml +++ b/app/views/projects/issues/show.html.haml @@ -3,6 +3,7 @@ - breadcrumb_title @issue.to_reference - page_title "#{@issue.title} (#{@issue.to_reference})", _("Issues") - add_page_specific_style 'page_bundles/issues_show' +- add_page_specific_style 'page_bundles/work_items' = render 'projects/issuable/show', issuable: @issue, api_awards_path: award_emoji_issue_api_path(@issue) = render 'projects/invite_members_modal', project: @project diff --git a/app/views/projects/jobs/index.html.haml b/app/views/projects/jobs/index.html.haml index dfea4db4d07..d39d292fb53 100644 --- a/app/views/projects/jobs/index.html.haml +++ b/app/views/projects/jobs/index.html.haml @@ -2,12 +2,4 @@ - add_page_specific_style 'page_bundles/ci_status' - admin = local_assigns.fetch(:admin, false) -- if Feature.enabled?(:jobs_table_vue, @project) - #js-jobs-table{ data: { admin: admin, full_path: @project.full_path, job_statuses: job_statuses.to_json, pipeline_editor_path: project_ci_pipeline_editor_path(@project), empty_state_svg_path: image_path('jobs-empty-state.svg') } } -- else - .top-area - - build_path_proc = ->(scope) { project_jobs_path(@project, scope: scope) } - = render "shared/builds/tabs", build_path_proc: build_path_proc, all_builds: @all_builds, scope: @scope - - .content-list.builds-content-list - = render "table", builds: @builds, project: @project +#js-jobs-table{ data: { admin: admin, full_path: @project.full_path, job_statuses: job_statuses.to_json, pipeline_editor_path: project_ci_pipeline_editor_path(@project), empty_state_svg_path: image_path('jobs-empty-state.svg') } } diff --git a/app/views/projects/jobs/show.html.haml b/app/views/projects/jobs/show.html.haml index fedc1291a92..5f249f693ff 100644 --- a/app/views/projects/jobs/show.html.haml +++ b/app/views/projects/jobs/show.html.haml @@ -7,7 +7,4 @@ = render_if_exists "shared/shared_runners_minutes_limit_flash_message" -- if @build.is_a? ::Ci::Build - #js-job-page{ data: jobs_data } -- else - #js-bridge-page{ data: bridge_data(@build, @project) } +#js-job-page{ data: jobs_data } diff --git a/app/views/projects/labels/index.html.haml b/app/views/projects/labels/index.html.haml index dd63e854a36..647464b31f8 100644 --- a/app/views/projects/labels/index.html.haml +++ b/app/views/projects/labels/index.html.haml @@ -4,7 +4,6 @@ - subscribed = params[:subscribed] - labels_or_filters = @labels.exists? || @prioritized_labels.exists? || search.present? || subscribed.present? -= render_if_exists 'shared/minute_limit_banner', namespace: @project - if labels_or_filters #js-promote-label-modal = render 'shared/labels/nav', labels_or_filters: labels_or_filters, can_admin_label: can_admin_label diff --git a/app/views/projects/logs/empty_logs.html.haml b/app/views/projects/logs/empty_logs.html.haml deleted file mode 100644 index 48403f5e55e..00000000000 --- a/app/views/projects/logs/empty_logs.html.haml +++ /dev/null @@ -1,14 +0,0 @@ -- page_title _('Logs') - -.row.empty-state - .col-sm-12 - .svg-content - = image_tag 'illustrations/operations_log_pods_empty.svg' - .col-12 - .text-content - %h4.text-center - = s_('Environments|No deployed environments') - %p.state-description.text-center - = s_('Logs|To see the logs, deploy your code to an environment.') - .text-center - = link_to s_('Environments|Learn about environments'), help_page_path('ci/environments/index.md'), class: 'gl-button btn btn-confirm' diff --git a/app/views/projects/logs/index.html.haml b/app/views/projects/logs/index.html.haml deleted file mode 100644 index 1f74eb52fd9..00000000000 --- a/app/views/projects/logs/index.html.haml +++ /dev/null @@ -1 +0,0 @@ -#environment-logs{ data: environment_logs_data(@project, @environment) } diff --git a/app/views/projects/merge_requests/_close_reopen_draft_report_toggle.html.haml b/app/views/projects/merge_requests/_close_reopen_draft_report_toggle.html.haml index a0810cfe37d..6b367c735c3 100644 --- a/app/views/projects/merge_requests/_close_reopen_draft_report_toggle.html.haml +++ b/app/views/projects/merge_requests/_close_reopen_draft_report_toggle.html.haml @@ -26,7 +26,7 @@ .gl-new-dropdown-item-text-wrapper = _('Close') = display_issuable_type - - elsif !@merge_request.source_project_missing? + - elsif !@merge_request.source_project_missing? && @merge_request.closed? %li.gl-new-dropdown-item = link_to reopen_issuable_path(@merge_request), method: :put, class: 'dropdown-item' do .gl-new-dropdown-item-text-wrapper @@ -34,7 +34,7 @@ = display_issuable_type - unless current_controller?('conflicts') - - if current_user && moved_mr_sidebar_enabled? + - if current_user && moved_mr_sidebar_enabled? && !@merge_request.merged? %li.gl-new-dropdown-divider %hr.dropdown-divider %li.gl-new-dropdown-item.js-sidebar-subscriptions-entry-point diff --git a/app/views/projects/merge_requests/_commits.html.haml b/app/views/projects/merge_requests/_commits.html.haml index 14ddaf8d2b7..7cadc37b0fd 100644 --- a/app/views/projects/merge_requests/_commits.html.haml +++ b/app/views/projects/merge_requests/_commits.html.haml @@ -8,7 +8,7 @@ - if can_update_merge_request %p = _('Push commits to the source branch or add previously merged commits to review them.') - %button.btn.gl-button.btn-confirm.add-review-item-modal-trigger{ type: "button", data: { commits_empty: 'true', context_commits_empty: 'true' } } + = render Pajamas::ButtonComponent.new(variant: 'confirm', button_options: { class: 'add-review-item-modal-trigger', data: { commits_empty: 'true', context_commits_empty: 'true' } }) do = _('Add previously merged commits') - else %ol#commits-list.list-unstyled diff --git a/app/views/projects/merge_requests/_mr_title.html.haml b/app/views/projects/merge_requests/_mr_title.html.haml index 4f4acb6103f..893f03157db 100644 --- a/app/views/projects/merge_requests/_mr_title.html.haml +++ b/app/views/projects/merge_requests/_mr_title.html.haml @@ -3,7 +3,7 @@ - can_reopen_merge_request = can?(current_user, :reopen_merge_request, @merge_request) - are_close_and_open_buttons_hidden = merge_request_button_hidden?(@merge_request, true) && merge_request_button_hidden?(@merge_request, false) - hide_gutter_toggle = local_assigns.fetch(:hide_gutter_toggle, false) -- cache_key = [@project, @merge_request, can_update_merge_request, can_reopen_merge_request, are_close_and_open_buttons_hidden, current_user&.preferred_language, "1.1-updated_header", moved_mr_sidebar_enabled?, hide_gutter_toggle] +- cache_key = [@project, @merge_request, can_update_merge_request, can_reopen_merge_request, are_close_and_open_buttons_hidden, current_user&.preferred_language, "1.1-updated_header", moved_mr_sidebar_enabled?, hide_gutter_toggle, fluid_layout] = cache(cache_key, expires_in: 1.day) do - if @merge_request.closed_or_merged_without_fork? diff --git a/app/views/projects/merge_requests/creations/_new_compare.html.haml b/app/views/projects/merge_requests/creations/_new_compare.html.haml index 8cd0d2f9e32..cee8d2e92aa 100644 --- a/app/views/projects/merge_requests/creations/_new_compare.html.haml +++ b/app/views/projects/merge_requests/creations/_new_compare.html.haml @@ -67,5 +67,5 @@ %ul.list-unstyled.mr_target_commit - if @merge_request.errors.any? - = form_errors(@merge_request) + = form_errors(@merge_request, pajamas_alert: true) = f.submit 'Compare branches and continue', class: "gl-button btn btn-confirm mr-compare-btn gl-mt-4", data: { qa_selector: "compare_branches_button" } diff --git a/app/views/projects/merge_requests/show.html.haml b/app/views/projects/merge_requests/show.html.haml index 99b84339058..4ef557fbd8f 100644 --- a/app/views/projects/merge_requests/show.html.haml +++ b/app/views/projects/merge_requests/show.html.haml @@ -99,6 +99,9 @@ #js-review-bar +- if Feature.enabled?(:mr_experience_survey, @project) + #js-mr-experience-survey + - if current_user&.mr_attention_requests_enabled? #js-need-attention-sidebar-onboarding diff --git a/app/views/projects/milestones/_form.html.haml b/app/views/projects/milestones/_form.html.haml index 5f2057df4aa..9b0508d8cb5 100644 --- a/app/views/projects/milestones/_form.html.haml +++ b/app/views/projects/milestones/_form.html.haml @@ -1,6 +1,6 @@ = form_for [@project, @milestone], html: { class: 'milestone-form common-note-form js-quick-submit js-requires-input' } do |f| - = form_errors(@milestone) + = form_errors(@milestone, pajamas_alert: true) .form-group.row .col-form-label.col-sm-2 = f.label :title, _('Title') diff --git a/app/views/projects/mirrors/_mirror_repos.html.haml b/app/views/projects/mirrors/_mirror_repos.html.haml index 339042eb703..a90d5224d04 100644 --- a/app/views/projects/mirrors/_mirror_repos.html.haml +++ b/app/views/projects/mirrors/_mirror_repos.html.haml @@ -17,7 +17,7 @@ = gitlab_ui_form_for @project, url: project_mirror_path(@project), html: { class: 'gl-show-field-errors js-mirror-form', autocomplete: 'new-password', data: mirrors_form_data_attributes } do |f| .panel.panel-default .panel-body - %div= form_errors(@project) + %div= form_errors(@project, pajamas_alert: true) .form-group.has-feedback = label_tag :url, _('Git repository URL'), class: 'label-light' diff --git a/app/views/projects/mirrors/_ssh_host_keys.html.haml b/app/views/projects/mirrors/_ssh_host_keys.html.haml index e3fe098c807..d367f383e5a 100644 --- a/app/views/projects/mirrors/_ssh_host_keys.html.haml +++ b/app/views/projects/mirrors/_ssh_host_keys.html.haml @@ -11,7 +11,7 @@ = _('Fingerprints') .fingerprints-list.js-fingerprints-list{ data: { qa_selector: 'fingerprints_list' } } - mirror.ssh_known_hosts_fingerprints.each do |fp| - %code= fp.fingerprint + %code= fp.fingerprint_sha256 || fp.fingerprint - if verified_at .form-text.text-muted.js-fingerprint-verification = sprite_icon('check', css_class: 'gl-text-green-500') diff --git a/app/views/projects/new.html.haml b/app/views/projects/new.html.haml index 511adf37b39..07c38d9845c 100644 --- a/app/views/projects/new.html.haml +++ b/app/views/projects/new.html.haml @@ -12,7 +12,7 @@ .row{ 'v-cloak': true } #blank-project-pane.tab-pane.active - = form_for @project, html: { class: 'new_project gl-mt-3' } do |f| + = gitlab_ui_form_for @project, html: { class: 'new_project gl-mt-3' } do |f| = render 'new_project_fields', f: f, project_name_id: "blank-project-name" #create-from-template-pane.tab-pane @@ -22,7 +22,7 @@ - contributing_templates_url = 'https://gitlab.com/gitlab-org/project-templates/contributing' - link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: contributing_templates_url } = _('Learn how to %{link_start}contribute to the built-in templates%{link_end}').html_safe % { link_start: link_start, link_end: '</a>'.html_safe } - = form_for @project, html: { class: 'new_project' } do |f| + = gitlab_ui_form_for @project, html: { class: 'new_project' } do |f| .project-template .form-group %div diff --git a/app/views/projects/pipelines/_info.html.haml b/app/views/projects/pipelines/_info.html.haml index 54435f675a7..07e299d71ea 100644 --- a/app/views/projects/pipelines/_info.html.haml +++ b/app/views/projects/pipelines/_info.html.haml @@ -6,9 +6,9 @@ = preserve(markdown(commit.description, pipeline: :single_line)) .info-well - .well-segment.pipeline-info - .icon-container.gl-vertical-align-text-bottom - = sprite_icon('clock') + .well-segment.pipeline-info{ class: "gl-align-items-baseline!" } + .icon-container + = sprite_icon('clock', css_class: 'gl-top-0!') = pluralize @pipeline.total_size, "job" = @pipeline.ref_text - if @pipeline.duration @@ -20,7 +20,7 @@ - if has_pipeline_badges?(@pipeline) .well-segment.qa-pipeline-badges .icon-container - = sprite_icon('flag') + = sprite_icon('flag', css_class: 'gl-top-0!') - if @pipeline.child? - text = sprintf(s_('Pipelines|Child pipeline (%{link_start}parent%{link_end})'), { link_start: "<a href='#{pipeline_path(@pipeline.triggered_by_pipeline)}' class='text-underline'>", link_end: "</a>"}).html_safe = gl_badge_tag text, { variant: :info, size: :sm }, { class: 'js-pipeline-child has-tooltip', title: s_("Pipelines|This is a child pipeline within the parent pipeline") } @@ -44,13 +44,13 @@ .well-segment.branch-info .icon-container.commit-icon - = custom_icon("icon_commit") + = sprite_icon('commit', css_class: 'gl-top-0!') = link_to commit.short_id, project_commit_path(@project, @pipeline.sha), class: "commit-sha" = clipboard_button(text: @pipeline.sha, title: _("Copy commit SHA")) .well-segment.related-merge-request-info .icon-container - = sprite_icon("git-merge") + = sprite_icon("git-merge", css_class: 'gl-top-0!') %span.related-merge-requests %span.js-truncated-mr-list = @pipeline.all_related_merge_request_text(limit: 1) diff --git a/app/views/projects/pipelines/show.html.haml b/app/views/projects/pipelines/show.html.haml index 10ff9c31c3e..c9eb2e92193 100644 --- a/app/views/projects/pipelines/show.html.haml +++ b/app/views/projects/pipelines/show.html.haml @@ -27,7 +27,7 @@ = s_('You can also test your %{gitlab_ci_yml} in %{lint_link_start}CI Lint%{lint_link_end}').html_safe % { gitlab_ci_yml: '.gitlab-ci.yml', lint_link_start: lint_link_start, lint_link_end: '</a>'.html_safe } - if Feature.enabled?(:pipeline_tabs_vue, @project) - #js-pipeline-tabs{ data: js_pipeline_tabs_data(@project, @pipeline) } + #js-pipeline-tabs{ data: js_pipeline_tabs_data(@project, @pipeline, @current_user) } - else = render "projects/pipelines/with_tabs", pipeline: @pipeline, stages: @stages, pipeline_has_errors: pipeline_has_errors .js-pipeline-details-vue{ data: { metrics_path: namespace_project_ci_prometheus_metrics_histograms_path(namespace_id: @project.namespace, project_id: @project, format: :json), pipeline_project_path: @project.full_path, pipeline_iid: @pipeline.iid, graphql_resource_etag: graphql_etag_pipeline_path(@pipeline) } } diff --git a/app/views/projects/project_members/index.html.haml b/app/views/projects/project_members/index.html.haml index 8c616b89658..37fe80d2aaf 100644 --- a/app/views/projects/project_members/index.html.haml +++ b/app/views/projects/project_members/index.html.haml @@ -2,47 +2,45 @@ - page_title _("Members") = render_if_exists 'projects/free_user_cap_alert', project: @project -= render_if_exists 'shared/minute_limit_banner', namespace: @project .row.gl-mt-3 .col-lg-12 - - if can_invite_members_for_project?(@project) - .row - .col-md-12.col-lg-6.gl-display-flex - .gl-flex-direction-column.gl-flex-wrap.align-items-baseline - %h4 - = _("Project members") - .gl-justify-content-bottom.gl-display-flex.align-items-center - %p - = project_member_header_subtext(@project) - .col-md-12.col-lg-6 - .gl-display-flex.gl-flex-wrap.gl-justify-content-end - - if can_admin_project_member?(@project) - .js-import-a-project-modal{ data: { project_id: @project.id, project_name: @project.name } } - - if @project.allowed_to_share_with_group? - .js-invite-group-trigger{ data: { classes: 'gl-mt-3 gl-sm-w-auto gl-w-full gl-sm-ml-3', display_text: _('Invite a group') } } - = render 'projects/invite_groups_modal', project: @project - - if can_admin_project_member?(@project) - .js-invite-members-trigger{ data: { variant: 'confirm', - classes: 'gl-mt-3 gl-sm-w-auto gl-w-full gl-sm-ml-3', - trigger_source: 'project-members-page', - display_text: _('Invite members') } } - = render 'projects/invite_members_modal', project: @project - - - else - - if project_can_be_shared? + .gl-display-flex.gl-flex-wrap + - if can_invite_members_for_project?(@project) %h4 = _("Project members") - - if can?(current_user, :admin_project_member, @project) - %p - = project_member_header_subtext(@project) - - else - %p - = html_escape(_("Members can be added by project %{i_open}Maintainers%{i_close} or %{i_open}Owners%{i_close}")) % { i_open: '<i>'.html_safe, i_close: '</i>'.html_safe } + %p.gl-w-full.order-md-1 + = project_member_header_subtext(@project) + .gl-display-flex.gl-flex-wrap.gl-align-items-flex-start.gl-ml-auto.gl-md-w-auto.gl-w-full.gl-mt-3 + - invite_group_top_margin = '' + - if can_admin_project_member?(@project) + .js-import-project-members-trigger{ data: { classes: 'gl-md-w-auto gl-w-full' } } + .js-import-project-members-modal{ data: { project_id: @project.id, project_name: @project.name } } + - invite_group_top_margin = 'gl-md-mt-0 gl-mt-3' + - if @project.allowed_to_share_with_group? + .js-invite-group-trigger{ data: { classes: "gl-md-w-auto gl-w-full gl-md-ml-3 #{invite_group_top_margin}", display_text: _('Invite a group') } } + = render 'projects/invite_groups_modal', project: @project + - if can_admin_project_member?(@project) + .js-invite-members-trigger{ data: { variant: 'confirm', + classes: 'gl-md-w-auto gl-w-full gl-md-ml-3 gl-md-mt-0 gl-mt-3', + trigger_source: 'project-members-page', + display_text: _('Invite members') } } + = render 'projects/invite_members_modal', project: @project + - else + - if project_can_be_shared? + %h4 + = _("Project members") + - if can?(current_user, :admin_project_member, @project) + %p.gl-w-full + = project_member_header_subtext(@project) + - else + %p.gl-w-full + = html_escape(_("Members can be added by project %{i_open}Maintainers%{i_close} or %{i_open}Owners%{i_close}")) % { i_open: '<i>'.html_safe, i_close: '</i>'.html_safe } .js-project-members-list-app{ data: { members_data: project_members_app_data_json(@project, members: @project_members, - group_links: @group_links, invited: @invited_members, - access_requests: @requesters) } } + access_requests: @requesters, + include_relations: @include_relations, + search: params[:search_groups]) } } = gl_loading_icon(css_class: 'gl-my-5', size: 'md') diff --git a/app/views/projects/protected_branches/shared/_create_protected_branch.html.haml b/app/views/projects/protected_branches/shared/_create_protected_branch.html.haml index e5810930be2..3b8294a1dec 100644 --- a/app/views/projects/protected_branches/shared/_create_protected_branch.html.haml +++ b/app/views/projects/protected_branches/shared/_create_protected_branch.html.haml @@ -1,29 +1,29 @@ = form_for [@project, @protected_branch], html: { class: 'new-protected-branch js-new-protected-branch' } do |f| %input{ type: 'hidden', name: 'update_section', value: 'js-protected-branches-settings' } .card - .card-header + .card-header.gl-font-weight-bold = s_("ProtectedBranch|Protect a branch") .card-body - = form_errors(@protected_branch) + = form_errors(@protected_branch, pajamas_alert: true) .form-group.row - = f.label :name, s_('ProtectedBranch|Branch:'), class: 'col-md-2 text-left text-md-right' - .col-md-10 - = render partial: "projects/protected_branches/shared/dropdown", locals: { f: f } + = f.label :name, s_('ProtectedBranch|Branch:'), class: 'col-sm-12' + .col-sm-12 + = render partial: "projects/protected_branches/shared/dropdown", locals: { f: f, toggle_classes: 'gl-w-full! gl-form-input-lg' } .form-text.text-muted - wildcards_url = help_page_url('user/project/protected_branches', anchor: 'configure-multiple-protected-branches-by-using-a-wildcard') - wildcards_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: wildcards_url } = (s_("ProtectedBranch|%{wildcards_link_start}Wildcards%{wildcards_link_end} such as %{code_tag_start}*-stable%{code_tag_end} or %{code_tag_start}production/*%{code_tag_end} are supported.") % { wildcards_link_start: wildcards_link_start, wildcards_link_end: '</a>', code_tag_start: '<code>', code_tag_end: '</code>' }).html_safe .form-group.row - = f.label :merge_access_levels_attributes, s_("ProtectedBranch|Allowed to merge:"), class: 'col-md-2 text-left text-md-right' - .col-md-10 + = f.label :merge_access_levels_attributes, s_("ProtectedBranch|Allowed to merge:"), class: 'col-sm-12' + .col-sm-12 = yield :merge_access_levels .form-group.row - = f.label :push_access_levels_attributes, s_("ProtectedBranch|Allowed to push:"), class: 'col-md-2 text-left text-md-right' - .col-md-10 + = f.label :push_access_levels_attributes, s_("ProtectedBranch|Allowed to push:"), class: 'col-sm-12' + .col-sm-12 = yield :push_access_levels .form-group.row - = f.label :allow_force_push, s_("ProtectedBranch|Allowed to force push:"), class: 'col-md-2 gl-text-left text-md-right' - .col-md-10 + = f.label :allow_force_push, s_("ProtectedBranch|Allowed to force push:"), class: 'col-sm-12' + .col-sm-12 = render Pajamas::ToggleComponent.new(classes: 'js-force-push-toggle', label: s_("ProtectedBranch|Allowed to force push"), label_position: :hidden) do diff --git a/app/views/projects/protected_branches/shared/_dropdown.html.haml b/app/views/projects/protected_branches/shared/_dropdown.html.haml index 67a6e8efae8..4b09d36e7c3 100644 --- a/app/views/projects/protected_branches/shared/_dropdown.html.haml +++ b/app/views/projects/protected_branches/shared/_dropdown.html.haml @@ -1,8 +1,12 @@ +- toggle_classes = local_assigns.fetch(:toggle_classes, '') + = f.hidden_field(:name) = dropdown_tag('Select branch or create wildcard', - options: { toggle_class: 'js-protected-branch-select js-filter-submit wide monospace qa-protected-branch-select', - filter: true, dropdown_class: "dropdown-menu-selectable git-revision-dropdown qa-protected-branch-dropdown", placeholder: "Search protected branches", + options: { toggle_class: "js-protected-branch-select js-filter-submit wide monospace qa-protected-branch-select #{toggle_classes}", + filter: true, + dropdown_class: "dropdown-menu-selectable git-revision-dropdown qa-protected-branch-dropdown", + placeholder: "Search protected branches", footer_content: true, data: { show_no: true, show_any: true, show_upcoming: true, selected: params[:protected_branch_name], diff --git a/app/views/projects/protected_tags/shared/_create_protected_tag.html.haml b/app/views/projects/protected_tags/shared/_create_protected_tag.html.haml index ba0935fff7d..e257117a32e 100644 --- a/app/views/projects/protected_tags/shared/_create_protected_tag.html.haml +++ b/app/views/projects/protected_tags/shared/_create_protected_tag.html.haml @@ -4,7 +4,7 @@ .card-header = _('Protect a tag') .card-body - = form_errors(@protected_tag) + = form_errors(@protected_tag, pajamas_alert: true) .form-group.row = f.label :name, _('Tag:'), class: 'col-md-2 text-left text-md-right' .col-md-10.protected-tags-dropdown diff --git a/app/views/projects/settings/_archive.html.haml b/app/views/projects/settings/_archive.html.haml index 8a080241513..2f97a068b49 100644 --- a/app/views/projects/settings/_archive.html.haml +++ b/app/views/projects/settings/_archive.html.haml @@ -7,14 +7,14 @@ - else = _('Archive project') - if @project.archived? - - link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_path('user/project/settings/index', anchor: 'unarchiving-a-project') } + - link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_path('user/project/settings/index', anchor: 'unarchive-a-project') } %p= _("Unarchiving the project restores its members' ability to make commits, and create issues, comments, and other entities. %{strong_start}After you unarchive the project, it displays in the search and on the dashboard.%{strong_end} %{link_start}Learn more.%{link_end}").html_safe % { strong_start: '<strong>'.html_safe, strong_end: '</strong>'.html_safe, link_start: link_start, link_end: '</a>'.html_safe } = link_to _('Unarchive project'), unarchive_project_path(@project), aria: { label: _('Unarchive project') }, data: { confirm: _("Are you sure that you want to unarchive this project?"), qa_selector: 'unarchive_project_link' }, method: :post, class: "gl-button btn btn-confirm" - else - - link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_path('user/project/settings/index', anchor: 'archiving-a-project') } + - link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_path('user/project/settings/index', anchor: 'archive-a-project') } %p= _("Archiving the project makes it entirely read-only. It is hidden from the dashboard and doesn't display in searches. %{strong_start}The repository cannot be committed to, and no issues, comments, or other entities can be created.%{strong_end} %{link_start}Learn more.%{link_end}").html_safe % { strong_start: '<strong>'.html_safe, strong_end: '</strong>'.html_safe, link_start: link_start, link_end: '</a>'.html_safe } = link_to _('Archive project'), archive_project_path(@project), aria: { label: _('Archive project') }, diff --git a/app/views/projects/settings/ci_cd/_autodevops_form.html.haml b/app/views/projects/settings/ci_cd/_autodevops_form.html.haml index 96564e44cf2..64f45ec89d1 100644 --- a/app/views/projects/settings/ci_cd/_autodevops_form.html.haml +++ b/app/views/projects/settings/ci_cd/_autodevops_form.html.haml @@ -16,7 +16,7 @@ .row .col-lg-12 = gitlab_ui_form_for @project, url: project_settings_ci_cd_path(@project, anchor: 'autodevops-settings') do |f| - = form_errors(@project) + = form_errors(@project, pajamas_alert: true) %fieldset.builds-feature.js-auto-devops-settings .form-group = f.fields_for :auto_devops_attributes, @auto_devops do |form| diff --git a/app/views/projects/settings/ci_cd/_form.html.haml b/app/views/projects/settings/ci_cd/_form.html.haml index 9419dacc16f..50e96528c0d 100644 --- a/app/views/projects/settings/ci_cd/_form.html.haml +++ b/app/views/projects/settings/ci_cd/_form.html.haml @@ -6,7 +6,7 @@ .row.gl-mt-3 .col-lg-12 = gitlab_ui_form_for @project, url: project_settings_ci_cd_path(@project, anchor: 'js-general-pipeline-settings') do |f| - = form_errors(@project) + = form_errors(@project, pajamas_alert: true) %fieldset.builds-feature .form-group = f.gitlab_ui_checkbox_component :public_builds, diff --git a/app/views/projects/settings/ci_cd/show.html.haml b/app/views/projects/settings/ci_cd/show.html.haml index 5da3d2b891c..09f9ca60b3e 100644 --- a/app/views/projects/settings/ci_cd/show.html.haml +++ b/app/views/projects/settings/ci_cd/show.html.haml @@ -109,13 +109,15 @@ = render 'ci/token_access/index' - if show_secure_files_setting(@project, current_user) - %section.settings + %section.settings.no-animate#js-secure-files{ class: ('expanded' if expanded) } .settings-header - %h4.settings-title + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _("Secure Files") - = button_to project_ci_secure_files_path(@project), method: :get, class: 'btn gl-button btn-default' do - = _('Manage') + = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do + = expanded ? _('Collapse') : _('Expand') %p = _("Use Secure Files to store files used by your pipelines such as Android keystores, or Apple provisioning profiles and signing certificates.") = link_to _('Learn more'), help_page_path('ci/secure_files/index'), target: '_blank', rel: 'noopener noreferrer' + .settings-content + #js-ci-secure-files{ data: { project_id: @project.id, admin: can?(current_user, :admin_secure_files, @project).to_s, file_size_limit: Ci::SecureFile::FILE_SIZE_LIMIT.to_mb } } diff --git a/app/views/projects/settings/operations/_tracing.html.haml b/app/views/projects/settings/operations/_tracing.html.haml deleted file mode 100644 index 3c8ebe3fb20..00000000000 --- a/app/views/projects/settings/operations/_tracing.html.haml +++ /dev/null @@ -1,24 +0,0 @@ -- setting = tracing_setting - -%section.settings.border-0.no-animate - .settings-header{ :class => 'border-top' } - %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only - = _('Tracing') - = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do - = _('Expand') - %p - = _('Embed an image of your existing Jaeger server in GitLab.') - = link_to _('Learn more.'), help_page_path('operations/tracing'), target: '_blank', rel: 'noopener noreferrer' - .settings-content - = form_for @project, url: project_settings_operations_path(@project), method: :patch do |f| - = form_errors(@project) - .form-group - = f.fields_for :tracing_setting_attributes, setting do |form| - = form.label :external_url, _('Jaeger URL'), class: 'label-bold' - = form.url_field :external_url, class: 'form-control gl-form-input', placeholder: 'https://jaeger.example.com' - %p.form-text.text-muted - - jaeger_help_url = 'https://www.jaegertracing.io/docs/getting-started/' - - link_start_tag = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: jaeger_help_url } - - link_end_tag = "#{sprite_icon('external-link', css_class: 'gl-ml-2 gl-vertical-align-middle')}</a>".html_safe - = _('Learn more about %{link_start_tag}Jaeger configuration%{link_end_tag}.').html_safe % { link_start_tag: link_start_tag, link_end_tag: link_end_tag } - = f.submit _('Save changes'), class: 'gl-button btn btn-confirm' diff --git a/app/views/projects/settings/operations/show.html.haml b/app/views/projects/settings/operations/show.html.haml index 80c22604e49..50bfd3c6976 100644 --- a/app/views/projects/settings/operations/show.html.haml +++ b/app/views/projects/settings/operations/show.html.haml @@ -16,11 +16,10 @@ .gl-alert-body %p = html_escape(s_('Deprecations|The metrics feature was deprecated in GitLab 14.7.')) - = html_escape(s_('Deprecations|The logs and tracing features were also deprecated in GitLab 14.7, and are %{removal_link_start} scheduled for removal %{link_end} in GitLab 15.0.')) % {removal_link_start: removal_epic_link_start, link_end: link_end } if Feature.enabled?(:monitor_tracing, @project) + = html_escape(s_('Deprecations|The logs and tracing features were also deprecated in GitLab 14.7, and are %{removal_link_start} scheduled for removal %{link_end} in GitLab 15.0.')) % {removal_link_start: removal_epic_link_start, link_end: link_end } = html_escape(s_('Deprecations|For information on a possible replacement, %{opstrace_link_start} learn more about Opstrace %{link_end}.')) % {opstrace_link_start: opstrace_link_start, link_end: link_end } = render 'projects/settings/operations/metrics_dashboard' -= render 'projects/settings/operations/tracing' if Feature.enabled?(:monitor_tracing, @project) = render 'projects/settings/operations/error_tracking' = render 'projects/settings/operations/alert_management' = render 'projects/settings/operations/incidents' diff --git a/app/views/projects/settings/packages_and_registries/show.html.haml b/app/views/projects/settings/packages_and_registries/show.html.haml index 378bb0f9306..1a7821d3268 100644 --- a/app/views/projects/settings/packages_and_registries/show.html.haml +++ b/app/views/projects/settings/packages_and_registries/show.html.haml @@ -8,6 +8,8 @@ keep_n_options: keep_n_options.to_json, older_than_options: older_than_options.to_json, is_admin: current_user&.admin.to_s, + show_container_registry_settings: show_container_registry_settings(@project).to_s, + show_package_registry_settings: show_package_registry_settings(@project).to_s, admin_settings_path: ci_cd_admin_application_settings_path(anchor: 'js-registry-settings'), enable_historic_entries: container_expiration_policies_historic_entry_enabled?.to_s, help_page_path: help_page_path('user/packages/container_registry/reduce_container_registry_storage', anchor: 'cleanup-policy'), diff --git a/app/views/projects/show.html.haml b/app/views/projects/show.html.haml index 290ef79f261..1f529849b28 100644 --- a/app/views/projects/show.html.haml +++ b/app/views/projects/show.html.haml @@ -7,7 +7,6 @@ = auto_discovery_link_tag(:atom, project_path(@project, rss_url_options), title: "#{@project.name} activity") = render_if_exists 'projects/free_user_cap_alert', project: @project -= render_if_exists 'shared/minute_limit_banner', namespace: @project = render partial: 'flash_messages', locals: { project: @project } = render 'clusters_deprecation_alert' diff --git a/app/views/projects/tags/_edit_release_button.html.haml b/app/views/projects/tags/_edit_release_button.html.haml new file mode 100644 index 00000000000..5bdf1c7896c --- /dev/null +++ b/app/views/projects/tags/_edit_release_button.html.haml @@ -0,0 +1,11 @@ +- if Feature.enabled?(:edit_tag_release_notes_via_release_page, project) + - release_btn_text = s_('TagsPage|Create release') + - release_btn_path = new_project_release_path(project, tag_name: tag.name) + - if release + - release_btn_text = s_('TagsPage|Edit release') + - release_btn_path = edit_project_release_path(project, release) + = link_to release_btn_path, class: 'btn gl-button btn-default btn-icon btn-edit has-tooltip', title: release_btn_text, data: { container: "body" } do + = sprite_icon('pencil', css_class: 'gl-icon') +- else + = link_to edit_project_tag_release_path(project, tag.name), class: 'btn gl-button btn-default btn-icon btn-edit has-tooltip', title: s_('TagsPage|Edit release notes'), data: { container: "body" } do + = sprite_icon('pencil', css_class: 'gl-icon') diff --git a/app/views/projects/tags/_tag.html.haml b/app/views/projects/tags/_tag.html.haml index 7654150509e..258f662420b 100644 --- a/app/views/projects/tags/_tag.html.haml +++ b/app/views/projects/tags/_tag.html.haml @@ -40,6 +40,5 @@ = render 'projects/buttons/download', project: @project, ref: tag.name, pipeline: @tags_pipelines[tag.name] - if can?(current_user, :admin_tag, @project) - = link_to edit_project_tag_release_path(@project, tag.name), class: 'btn gl-button btn-default btn-icon btn-edit has-tooltip', title: s_('TagsPage|Edit release notes'), data: { container: "body" } do - = sprite_icon('pencil', css_class: 'gl-icon') + = render 'edit_release_button', tag: tag, project: @project, release: release = render 'projects/buttons/remove_tag', project: @project, tag: tag diff --git a/app/views/projects/tags/show.html.haml b/app/views/projects/tags/show.html.haml index 2a68ad37c1e..24da8e2db87 100644 --- a/app/views/projects/tags/show.html.haml +++ b/app/views/projects/tags/show.html.haml @@ -41,8 +41,7 @@ - if @tag.has_signature? = render partial: 'projects/commit/signature', object: @tag.signature - if can?(current_user, :admin_tag, @project) - = link_to edit_project_tag_release_path(@project, @tag.name), class: 'btn btn-icon btn-edit gl-button btn-default controls-item has-tooltip', title: s_('TagsPage|Edit release notes') do - = sprite_icon("pencil", css_class: 'gl-icon') + = render 'edit_release_button', tag: @tag, project: @project, release: @release = link_to project_tree_path(@project, @tag.name), class: 'btn btn-icon gl-button btn-default controls-item has-tooltip', title: s_('TagsPage|Browse files') do = sprite_icon('folder-open', css_class: 'gl-icon') = link_to project_commits_path(@project, @tag.name), class: 'btn btn-icon gl-button btn-default controls-item has-tooltip', title: s_('TagsPage|Browse commits') do @@ -58,7 +57,7 @@ = strip_signature(@tag.message) .gl-mb-3.gl-mt-3 - - if @release.description.present? + - if @release&.description.present? .description.md{ data: { qa_selector: 'tag_release_notes_content' } } = markdown_field(@release, :description) - else diff --git a/app/views/projects/tracings/_tracing_button.html.haml b/app/views/projects/tracings/_tracing_button.html.haml deleted file mode 100644 index fe3af1c6a1a..00000000000 --- a/app/views/projects/tracings/_tracing_button.html.haml +++ /dev/null @@ -1,2 +0,0 @@ -= link_to project_settings_operations_path(@project), title: _('Configure Tracing'), class: 'gl-button btn btn-confirm' do - = _('Add Jaeger URL') diff --git a/app/views/projects/tracings/show.html.haml b/app/views/projects/tracings/show.html.haml deleted file mode 100644 index 61f2cd8ac7f..00000000000 --- a/app/views/projects/tracings/show.html.haml +++ /dev/null @@ -1,50 +0,0 @@ -- @content_class = "limit-container-width" unless fluid_layout -- page_title _("Tracing") - -.gl-alert.gl-alert-danger.gl-mb-5 - - removal_epic_link_url = 'https://gitlab.com/groups/gitlab-org/-/epics/7188' - - removal_epic_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer" class="gl-link">'.html_safe % { url: removal_epic_link_url } - - opstrace_link_url = 'https://gitlab.com/groups/gitlab-org/-/epics/6976' - - opstrace_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer" class="gl-link">'.html_safe % { url: opstrace_link_url } - - link_end = '</a>'.html_safe - .gl-alert-container - = sprite_icon('error', css_class: 'gl-icon gl-alert-icon gl-alert-icon-no-title') - .gl-alert-content - .gl-alert-title - = s_('Deprecations|Feature deprecation and removal') - .gl-alert-body - %p - = html_escape(s_('Deprecations|The logs and tracing features were deprecated in GitLab 14.7, and are %{removal_link_start} scheduled for removal %{link_end} in GitLab 15.0. For information on a possible replacement, %{opstrace_link_start} learn more about Opstrace %{link_end}.')) % {removal_link_start: removal_epic_link_start, opstrace_link_start: opstrace_link_start, link_end: link_end } - -- if @project.tracing_external_url.present? - %h1.page-title.gl-font-size-h-display= _('Tracing') - .gl-alert.gl-alert-info.gl-mb-5 - .gl-alert-container - = sprite_icon('information-o', css_class: 'gl-icon gl-alert-icon gl-alert-icon-no-title') - .gl-alert-content - .gl-alert-body - = _("Your password isn't required to view this page. If a password or any other personal details are requested, please contact your administrator to report abuse.") - - jaeger_link = link_to('Jaeger tracing', 'https://www.jaegertracing.io/', target: "_blank", rel: "noreferrer") - %p.light= _("GitLab uses %{jaeger_link} to monitor distributed systems.").html_safe % { jaeger_link: jaeger_link } - - - .card - - iframe_permissions = "allow-forms allow-scripts allow-same-origin allow-popups" - %iframe.border-0{ src: sanitize(@project.tracing_external_url, scrubber: Rails::Html::TextOnlyScrubber.new), width: '100%', height: 970, sandbox: iframe_permissions } -- else - .row.empty-state - .col-12 - .svg-content - = image_tag 'illustrations/monitoring/tracing.svg' - - .col-12 - .text-content - %h4.text-left= _('Troubleshoot and monitor your application with tracing') - %p - - jaeger_help_url = "https://www.jaegertracing.io/docs/getting-started/" - - link_start_tag = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: jaeger_help_url } - - link_end_tag = "#{sprite_icon('external-link', css_class: 'ml-1 vertical-align-middle')}</a>".html_safe - = _('Add a Jaeger URL to replace this page with a link to your Jaeger server. You first need to %{link_start_tag}install Jaeger%{link_end_tag}.').html_safe % { link_start_tag: link_start_tag, link_end_tag: link_end_tag } - - .text-center - = render 'tracing_button' diff --git a/app/views/projects/triggers/_form.html.haml b/app/views/projects/triggers/_form.html.haml index 9043b8e60fc..d24cfd61052 100644 --- a/app/views/projects/triggers/_form.html.haml +++ b/app/views/projects/triggers/_form.html.haml @@ -1,5 +1,5 @@ = form_for [@project, @trigger], html: { class: 'gl-show-field-errors' } do |f| - = form_errors(@trigger) + = form_errors(@trigger, pajamas_alert: true) - if @trigger.token .form-group diff --git a/app/views/projects/work_items/index.html.haml b/app/views/projects/work_items/index.html.haml index 1f36afc48aa..8575fd10ad3 100644 --- a/app/views/projects/work_items/index.html.haml +++ b/app/views/projects/work_items/index.html.haml @@ -1,3 +1,5 @@ - page_title s_('WorkItem|Work Items') +- add_page_specific_style 'page_bundles/work_items' #js-work-items{ data: work_items_index_data(@project) } += render 'projects/invite_members_modal', project: @project diff --git a/app/views/pwa/offline.html.haml b/app/views/pwa/offline.html.haml index 5eae546bea9..cd1fca5d2b5 100644 --- a/app/views/pwa/offline.html.haml +++ b/app/views/pwa/offline.html.haml @@ -1,5 +1,5 @@ = link_to root_path do - = render 'shared/logo.svg' + = render partial: 'shared/logo', formats: :svg %h1= _('Offline') .container %h3= _('You are currently offline, or the GitLab instance is not reachable.') diff --git a/app/views/shared/_allow_request_access.html.haml b/app/views/shared/_allow_request_access.html.haml index 608a0ca37d9..ab5f2fb1772 100644 --- a/app/views/shared/_allow_request_access.html.haml +++ b/app/views/shared/_allow_request_access.html.haml @@ -1,3 +1,3 @@ = form.gitlab_ui_checkbox_component :request_access_enabled, - _('Allow users to request access (if visibility is public or internal)'), + _('Users can request access (if visibility is public or internal)'), checkbox_options: { data: { qa_selector: 'request_access_checkbox' } } diff --git a/app/views/shared/_group_form.html.haml b/app/views/shared/_group_form.html.haml index 5ae99474c70..db5e055a1c4 100644 --- a/app/views/shared/_group_form.html.haml +++ b/app/views/shared/_group_form.html.haml @@ -3,53 +3,4 @@ - group_path << parent.full_path + '/' if parent -- if Feature::enabled?(:group_name_path_vue, current_user) - = render 'shared/groups/group_name_and_path_fields', f: f -- else - .row - .form-group.group-name-holder.col-sm-12 - = f.label :name, class: 'label-bold' do - = s_('Groups|Group name') - = f.text_field :name, placeholder: _('My awesome group'), class: 'js-autofill-group-name form-control input-lg', data: { qa_selector: 'group_name_field' }, - required: true, - title: s_('Groups|Enter a descriptive name for your group.'), - autofocus: true - .text-muted - = s_('Groups|Must start with letter, digit, emoji, or underscore. Can also contain periods, dashes, spaces, and parentheses.') - - .row - .form-group.col-xs-12.col-sm-8 - = f.label :path, class: 'label-bold' do - = s_('Groups|Group URL') - .input-group.gl-field-error-anchor - .group-root-path.input-group-prepend.has-tooltip{ title: group_path, :'data-placement' => 'bottom' } - .input-group-text - %span>= root_url - - if parent - %strong= parent.full_path + '/' - = f.hidden_field :parent_id - = f.text_field :path, placeholder: _('my-awesome-group'), class: 'form-control js-validate-group-path js-autofill-group-path', data: { qa_selector: 'group_path_field' }, - autofocus: local_assigns[:autofocus] || false, required: true, - pattern: Gitlab::PathRegex::NAMESPACE_FORMAT_REGEX_JS, - title: group_url_error_message, - maxlength: ::Namespace::URL_MAX_LENGTH, - "data-bind-in" => "#{'create_chat_team' if Gitlab.config.mattermost.enabled}" - %p.validation-error.gl-field-error.field-validation.hide - = s_('Groups|Group path is unavailable. Path has been replaced with a suggested available path.') - %p.validation-success.gl-field-success.field-validation.hide= s_('Groups|Group path is available.') - %p.validation-pending.gl-field-error-ignore.field-validation.hide= s_('Groups|Checking group URL availability...') - - - if @group.persisted? - .gl-alert.gl-alert-warning.gl-mt-3.gl-mb-3 - = sprite_icon('warning', size: 16, css_class: 'gl-icon gl-alert-icon gl-alert-icon-no-title') - .gl-alert-body - = s_('Groups|Changing group URL can have unintended side effects.') - = succeed '.' do - = link_to s_('Groups|Learn more'), help_page_path('user/group/index', anchor: 'change-a-groups-path'), target: '_blank', class: 'gl-link' - - - if @group.persisted? - .row - .form-group.group-name-holder.col-sm-8 - = f.label :id, class: 'label-bold' do - = s_('Groups|Group ID') - = f.text_field :id, class: 'form-control', readonly: true += render 'shared/groups/group_name_and_path_fields', f: f diff --git a/app/views/shared/_integration_settings.html.haml b/app/views/shared/_integration_settings.html.haml index 84710b2ecc7..d58be0f0f4a 100644 --- a/app/views/shared/_integration_settings.html.haml +++ b/app/views/shared/_integration_settings.html.haml @@ -1,4 +1,4 @@ -= form_errors(integration) += form_errors(integration, pajamas_alert: true) %div{ data: { testid: "integration-settings-form" } } - if @default_integration diff --git a/app/views/shared/_label.html.haml b/app/views/shared/_label.html.haml index af5657e0e14..c0bc50fef5b 100644 --- a/app/views/shared/_label.html.haml +++ b/app/views/shared/_label.html.haml @@ -31,22 +31,19 @@ %ul - if label.project_label? && label.project.group && can?(current_user, :admin_label, label.project.group) %li - %button.js-promote-project-label-button.gl-button.btn.btn-default-tertiary{ disabled: true, type: 'button', - data: { url: promote_project_label_path(label.project, label), - label_title: label.title, - label_color: label.color, - label_text_color: label.text_color, - group_name: label.project.group.name } } + = render Pajamas::ButtonComponent.new(category: :tertiary, + button_options: { class: 'js-promote-project-label-button', data: { url: promote_project_label_path(label.project, label), label_title: label.title, label_color: label.color, label_text_color: label.text_color, group_name: label.project.group.name } } ) do = _('Promote to group label') %li %span - %button.text-danger.js-delete-label-modal-button{ type: 'button', data: { label_name: label.name, subject_name: label.subject_name, destroy_path: label.destroy_path } } + = render Pajamas::ButtonComponent.new(category: :tertiary, + button_options: { class: 'text-danger js-delete-label-modal-button', data: { label_name: label.name, subject_name: label.subject_name, destroy_path: label.destroy_path } } ) do = _('Delete') - if current_user %li.gl-display-inline-block.label-subscription.js-label-subscription.gl-ml-3 - if label.can_subscribe_to_label_in_different_levels? - %button.js-unsubscribe-button.gl-button.btn.btn-default.gl-w-full{ class: ('hidden' if status.unsubscribed?), data: { url: toggle_subscription_path, toggle: 'tooltip' }, title: tooltip_title } - %span.gl-button-text= _('Unsubscribe') + = render Pajamas::ButtonComponent.new(button_options: { class: "js-unsubscribe-button #{('hidden' if status.unsubscribed?)}", data: { url: toggle_subscription_path, toggle: 'tooltip', container: 'body' }, title: tooltip_title } ) do + = _('Unsubscribe') .dropdown.dropdown-group-label{ class: ('hidden' unless status.unsubscribed?) } = render Pajamas::ButtonComponent.new(button_options: { class: 'gl-w-full', data: { toggle: 'dropdown' } }) do = _('Subscribe') @@ -54,11 +51,11 @@ .dropdown-menu.dropdown-open-left %ul %li - %button.js-subscribe-button{ class: ('hidden' unless status.unsubscribed?), data: { status: status, url: toggle_subscription_project_label_path(@project, label) } } - %span.gl-button-text= _('Subscribe at project level') + = render Pajamas::ButtonComponent.new(category: :tertiary, button_options: { class: "js-subscribe-button #{('hidden' unless status.unsubscribed?)}", data: { status: status, url: toggle_subscription_project_label_path(@project, label) } } ) do + = _('Subscribe at project level') %li - %button.js-subscribe-button.js-group-level{ class: ('hidden' unless status.unsubscribed?), data: { status: status, url: toggle_subscription_group_label_path(label.group, label) } } - %span.gl-button-text= _('Subscribe at group level') + = render Pajamas::ButtonComponent.new(category: :tertiary, button_options: { class: "js-subscribe-button js-group-level #{('hidden' unless status.unsubscribed?)}", data: { status: status, url: toggle_subscription_group_label_path(label.group, label) } } ) do + = _('Subscribe at group level') - else - %button.gl-button.js-subscribe-button.btn.btn-default.gl-w-full{ data: { status: status, url: toggle_subscription_path, toggle: 'tooltip' }, title: tooltip_title } - %span.gl-button-text= label_subscription_toggle_button_text(label, @project) + = render Pajamas::ButtonComponent.new(button_options: { class: 'js-subscribe-button gl-w-full', data: { status: status, url: toggle_subscription_path, toggle: 'tooltip', container: 'body' }, title: tooltip_title } ) do + = label_subscription_toggle_button_text(label, @project) diff --git a/app/views/shared/_old_visibility_level.html.haml b/app/views/shared/_old_visibility_level.html.haml index 104c722ee65..6bcac2b0e6b 100644 --- a/app/views/shared/_old_visibility_level.html.haml +++ b/app/views/shared/_old_visibility_level.html.haml @@ -1,6 +1,5 @@ -.form-group.row - .col-sm-2.col-form-label +%fieldset.form-group.gl-form-group + %legend.col-form-label.col-form-label = _('Visibility level') - = link_to sprite_icon('question-o'), help_page_path('public_access/public_access'), target: '_blank', rel: 'noopener noreferrer' - .col-sm-10 - = render 'shared/visibility_level', f: f, visibility_level: visibility_level, can_change_visibility_level: can_change_visibility_level, form_model: form_model, with_label: with_label + = link_to sprite_icon('question-o'), help_page_path('user/public_access'), target: '_blank', rel: 'noopener noreferrer' + = render 'shared/visibility_level', f: f, visibility_level: visibility_level, can_change_visibility_level: can_change_visibility_level, form_model: form_model, with_label: with_label diff --git a/app/views/shared/_visibility_level.html.haml b/app/views/shared/_visibility_level.html.haml index 3e30dcaf35a..763ae5a498b 100644 --- a/app/views/shared/_visibility_level.html.haml +++ b/app/views/shared/_visibility_level.html.haml @@ -1,11 +1,11 @@ - with_label = local_assigns.fetch(:with_label, true) -.form-group.visibility-level-setting +.visibility-level-setting - if with_label = f.label :visibility_level, _('Visibility level'), class: 'label-bold gl-mb-0' %p = _('Who can see this group?') - - visibility_docs_path = help_page_path('public_access/public_access') + - visibility_docs_path = help_page_path('user/public_access') - docs_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: visibility_docs_path } = _('%{docs_link_start}Learn about visibility levels.%{docs_link_end}').html_safe % { docs_link_start: docs_link_start, docs_link_end: '</a>'.html_safe } - if can_change_visibility_level diff --git a/app/views/shared/_visibility_radios.html.haml b/app/views/shared/_visibility_radios.html.haml index 760fe18ddec..1bac75e0ff5 100644 --- a/app/views/shared/_visibility_radios.html.haml +++ b/app/views/shared/_visibility_radios.html.haml @@ -2,15 +2,13 @@ - selected_level = snippets_selected_visibility_level(available_visibility_levels, selected_level) - available_visibility_levels.each do |level| - .form-check - = form.radio_button model_method, level, checked: (selected_level == level), class: 'form-check-input', data: { track_label: "blank_project", track_action: "activate_form_input", track_property: "#{model_method}_#{level}", track_value: "", qa_selector: "#{visibility_level_label(level).downcase}_radio" } - = form.label "#{model_method}_#{level}", class: 'form-check-label' do - = visibility_level_icon(level) - .option-title - = visibility_level_label(level) - .option-description - = visibility_level_description(level, form_model) - .option-disabled-reason + + = form.gitlab_ui_radio_component model_method, level, + "#{visibility_level_icon(level)} #{visibility_level_label(level)}".html_safe, + help_text: '<span class="option-description">%{visibility_level_description}</span><span class="option-disabled-reason"></span>'.html_safe % { visibility_level_description: visibility_level_description(level, form_model)}, + radio_options: { checked: (selected_level == level), data: { track_label: "blank_project", track_action: "activate_form_input", track_property: "#{model_method}_#{level}", track_value: "", qa_selector: "#{visibility_level_label(level).downcase}_radio" } }, + label_options: { class: 'js-visibility-level-radio' } + .text-muted - if all_visibility_levels_restricted? diff --git a/app/views/shared/admin/_admin_note_form.html.haml b/app/views/shared/admin/_admin_note_form.html.haml index 0bc26f9120f..09b059774bc 100644 --- a/app/views/shared/admin/_admin_note_form.html.haml +++ b/app/views/shared/admin/_admin_note_form.html.haml @@ -1,6 +1,4 @@ -.form-group.row +.form-group.gl-form-group{ role: 'group' } = f.fields_for :admin_note do |an| - .col-sm-2.col-form-label.gl-text-right - = an.label :note, s_('Admin|Admin notes') - .col-sm-10 - = an.text_area :note, class: 'form-control' + = an.label :note, s_('Admin|Admin notes'), class: 'gl-display-block col-form-label' + = an.text_area :note, class: 'form-control gl-form-input gl-form-textarea' diff --git a/app/views/shared/deploy_keys/_form.html.haml b/app/views/shared/deploy_keys/_form.html.haml index 4ab93030638..38985319ca5 100644 --- a/app/views/shared/deploy_keys/_form.html.haml +++ b/app/views/shared/deploy_keys/_form.html.haml @@ -13,14 +13,19 @@ = form.label :key, class: 'col-form-label col-sm-2' .col-sm-10 %p.light - - link_start = "<a href='#{help_page_path('ssh/index')}' target='_blank' rel='noreferrer noopener'>".html_safe + - link_start = "<a href='#{help_page_path('user/ssh')}' target='_blank' rel='noreferrer noopener'>".html_safe - link_end = '</a>' = _('Paste a public key here. %{link_start}How do I generate it?%{link_end}').html_safe % { link_start: link_start, link_end: link_end.html_safe } = form.text_area :key, class: 'form-control gl-form-input thin_area', rows: 5, data: { qa_selector: 'deploy_key_field' } - else - = form.label :fingerprint, class: 'col-form-label col-sm-2' - .col-sm-10 - = form.text_field :fingerprint, class: 'form-control gl-form-input', readonly: 'readonly' + - if deploy_key.fingerprint_sha256.present? + = form.label :fingerprint, _('Fingerprint (SHA256)'), class: 'col-form-label col-sm-2' + .col-sm-10 + = form.text_field :fingerprint_sha256, class: 'form-control gl-form-input', readonly: 'readonly' + - if deploy_key.fingerprint.present? + = form.label :fingerprint, _('Fingerprint (MD5)'), class: 'col-form-label col-sm-2' + .col-sm-10 + = form.text_field :fingerprint, class: 'form-control gl-form-input', readonly: 'readonly' - if deploy_keys_project.present? = form.fields_for :deploy_keys_projects, deploy_keys_project do |deploy_keys_project_form| diff --git a/app/views/shared/deploy_keys/_project_group_form.html.haml b/app/views/shared/deploy_keys/_project_group_form.html.haml index c9edf09b350..4bedce71c0f 100644 --- a/app/views/shared/deploy_keys/_project_group_form.html.haml +++ b/app/views/shared/deploy_keys/_project_group_form.html.haml @@ -1,5 +1,5 @@ = gitlab_ui_form_for [@project.namespace, @project, @deploy_keys.new_key], url: namespace_project_deploy_keys_path, html: { class: "js-requires-input container" } do |f| - = form_errors(@deploy_keys.new_key) + = form_errors(@deploy_keys.new_key, pajamas_alert: true) .form-group.row = f.label :title, class: "label-bold" = f.text_field :title, class: 'form-control gl-form-input', required: true, data: { qa_selector: 'deploy_key_title_field' } @@ -9,7 +9,7 @@ .form-group.row %p.light.gl-mb-0 = _('Paste a public key here.') - = link_to _('How do I generate it?'), help_page_path("ssh/index") + = link_to _('How do I generate it?'), help_page_path("user/ssh") = f.fields_for :deploy_keys_projects do |deploy_keys_project_form| .form-group.row diff --git a/app/views/shared/doorkeeper/applications/_form.html.haml b/app/views/shared/doorkeeper/applications/_form.html.haml index b40e2630011..9810754f52b 100644 --- a/app/views/shared/doorkeeper/applications/_form.html.haml +++ b/app/views/shared/doorkeeper/applications/_form.html.haml @@ -1,5 +1,5 @@ = gitlab_ui_form_for @application, url: url, html: { role: 'form', class: 'doorkeeper-app-form' } do |f| - = form_errors(@application) + = form_errors(@application, pajamas_alert: true) .form-group = f.label :name, class: 'label-bold' diff --git a/app/views/shared/doorkeeper/applications/_index.html.haml b/app/views/shared/doorkeeper/applications/_index.html.haml index 0359c28794c..b14ff9b2508 100644 --- a/app/views/shared/doorkeeper/applications/_index.html.haml +++ b/app/views/shared/doorkeeper/applications/_index.html.haml @@ -55,7 +55,7 @@ .oauth-authorized-applications.prepend-top-20.gl-mb-3 - if oauth_applications_enabled %h5 - = _("Authorized applications (%{size})") % { size: @authorized_apps.size + @authorized_anonymous_tokens.size } + = _("Authorized applications (%{size})") % { size: @authorized_tokens.size } - if @authorized_tokens.any? .table-responsive @@ -67,22 +67,22 @@ %th= _('Scope') %th %tbody - - @authorized_apps.each do |app| - - token = app.authorized_tokens.order('created_at desc').first # rubocop: disable CodeReuse/ActiveRecord - %tr{ id: "application_#{app.id}" } - %td= app.name - %td= token.created_at - %td= token.scopes - %td= render 'doorkeeper/authorized_applications/delete_form', application: app - - @authorized_anonymous_tokens.each do |token| - %tr + - @authorized_tokens.each do |token| + %tr{ id: ("application_#{token.application.id}" if token.application) } %td - = _('Anonymous') - .form-text.text-muted - %em= _("Authorization was granted by entering your username and password in the application.") + - if token.application + = token.application.name + - else + = _('Anonymous') + .form-text.text-muted + %em= _("Authorization was granted by entering your username and password in the application.") %td= token.created_at %td= token.scopes - %td= render 'doorkeeper/authorized_applications/delete_form', token: token + %td + - if token.application + = render 'doorkeeper/authorized_applications/delete_form', application: token.application + - else + = render 'doorkeeper/authorized_applications/delete_form', token: token - else .settings-message.text-center = _("You don't have any authorized applications") diff --git a/app/views/shared/empty_states/_snippets.html.haml b/app/views/shared/empty_states/_snippets.html.haml index 20ca7954479..a006a3bc0a4 100644 --- a/app/views/shared/empty_states/_snippets.html.haml +++ b/app/views/shared/empty_states/_snippets.html.haml @@ -4,15 +4,15 @@ .col-12 .svg-content = image_tag 'illustrations/snippets_empty.svg', data: { qa_selector: 'svg_content' } - .text-content.text-center.pt-0 + .text-content.gl-text-center.gl-pt-0 - if current_user %h4 = s_('SnippetsEmptyState|Code snippets') - %p.mb-0 + %p.gl-mb-0 = s_('SnippetsEmptyState|Store, share, and embed small pieces of code and text.') - .mt-2< + .gl-mt-3< - if button_path = link_to s_('SnippetsEmptyState|New snippet'), button_path, class: 'btn gl-button btn-confirm', title: s_('SnippetsEmptyState|New snippet'), id: 'new_snippet_link', data: { qa_selector: 'create_first_snippet_link' } = link_to s_('SnippetsEmptyState|Documentation'), help_page_path('user/snippets.md'), class: 'btn gl-button btn-default', title: s_('SnippetsEmptyState|Documentation') - else - %h4.text-center= s_('SnippetsEmptyState|There are no snippets to show.') + %h4.gl-text-center= s_('SnippetsEmptyState|There are no snippets to show.') diff --git a/app/views/shared/form_elements/_apply_template_warning.html.haml b/app/views/shared/form_elements/_apply_template_warning.html.haml index ca1d3d53f16..131c450ddd7 100644 --- a/app/views/shared/form_elements/_apply_template_warning.html.haml +++ b/app/views/shared/form_elements/_apply_template_warning.html.haml @@ -7,7 +7,7 @@ %p = _("Applying a template will replace the existing issue description. Any changes you have made will be lost.") - %button.js-override-template.btn.gl-button.btn-confirm.mr-2{ type: 'button' } + = render Pajamas::ButtonComponent.new(variant: :confirm, button_options: { class: 'gl-mr-3 js-override-template' }) do = _("Apply template") - %button.js-close-btn.js-cancel-btn.btn.gl-button.btn-default{ type: 'button' } + = render Pajamas::ButtonComponent.new(button_options: { class: 'js-close-btn js-cancel-btn' }) do = _("Cancel") diff --git a/app/views/shared/form_elements/_description.html.haml b/app/views/shared/form_elements/_description.html.haml index a87aa8de679..2c46b2191c6 100644 --- a/app/views/shared/form_elements/_description.html.haml +++ b/app/views/shared/form_elements/_description.html.haml @@ -21,7 +21,7 @@ classes: 'note-textarea rspec-issuable-form-description', placeholder: placeholder, supports_quick_actions: supports_quick_actions, - qa_selector: 'issuable_form_description' + qa_selector: 'issuable_form_description_field' = render 'shared/notes/hints', supports_quick_actions: supports_quick_actions .clearfix .error-alert diff --git a/app/views/shared/groups/_group_name_and_path_fields.html.haml b/app/views/shared/groups/_group_name_and_path_fields.html.haml index 709130a47d3..634b8448535 100644 --- a/app/views/shared/groups/_group_name_and_path_fields.html.haml +++ b/app/views/shared/groups/_group_name_and_path_fields.html.haml @@ -1,5 +1,5 @@ .js-group-name-and-path{ data: group_name_and_path_app_data(@group) } = f.hidden_field :name, data: { js_name: 'name' } = f.hidden_field :path, maxlength: ::Namespace::URL_MAX_LENGTH, pattern: Gitlab::PathRegex::NAMESPACE_FORMAT_REGEX_JS, data: { js_name: 'path' } - = f.hidden_field :parent_id, data: { js_name: 'parentId' } + = f.hidden_field :parent_id, value: @group.parent&.id, data: { js_name: 'parentId' } = f.hidden_field :id, data: { js_name: 'groupId' } diff --git a/app/views/shared/issuable/_bulk_update_sidebar.html.haml b/app/views/shared/issuable/_bulk_update_sidebar.html.haml index 8409f224158..0bec94f70ea 100644 --- a/app/views/shared/issuable/_bulk_update_sidebar.html.haml +++ b/app/views/shared/issuable/_bulk_update_sidebar.html.haml @@ -26,16 +26,16 @@ = render_if_exists 'shared/issuable/epic_dropdown', parent: @project.group .block .title + = _('Labels') + .filter-item.labels-filter + = render "shared/issuable/label_dropdown", classes: ["js-filter-bulk-update", "js-multiselect"], dropdown_title: _("Apply a label"), show_create: false, show_footer: false, extra_options: false, filter_submit: false, data_options: { persist_when_hide: "true", field_name: "update[label_ids][]", show_no: false, show_any: false, use_id: true, default_label: _("Labels") }, label_name: _("Select labels"), no_default_styles: true + .block + .title = _('Milestone') .filter-item = dropdown_tag(_("Select milestone"), options: { title: _("Assign milestone"), toggle_class: "js-milestone-select js-extra-options js-filter-submit js-filter-bulk-update", filter: true, dropdown_class: "dropdown-menu-selectable dropdown-menu-milestone", placeholder: _("Search milestones"), data: { show_no: true, field_name: "update[milestone_id]", project_id: @project.id, use_id: true, default_label: _("Milestone") } }) - if is_issue = render_if_exists 'shared/issuable/iterations_dropdown', parent: @project.group - .block - .title - = _('Labels') - .filter-item.labels-filter - = render "shared/issuable/label_dropdown", classes: ["js-filter-bulk-update", "js-multiselect"], dropdown_title: _("Apply a label"), show_create: false, show_footer: false, extra_options: false, filter_submit: false, data_options: { persist_when_hide: "true", field_name: "update[label_ids][]", show_no: false, show_any: false, use_id: true, default_label: _("Labels") }, label_name: _("Select labels"), no_default_styles: true - if is_issue = render_if_exists 'shared/issuable/health_status_dropdown', parent: @project .block diff --git a/app/views/shared/issuable/_form.html.haml b/app/views/shared/issuable/_form.html.haml index da49a301087..e90ea35f28e 100644 --- a/app/views/shared/issuable/_form.html.haml +++ b/app/views/shared/issuable/_form.html.haml @@ -67,11 +67,11 @@ = form.submit _('Save changes'), class: 'gl-button btn btn-confirm gl-mr-2', data: { track_experiment: 'promote_mr_approvals_in_free', track_action: 'click_button', track_label: 'submit_mr', track_value: 0 } - if issuable.new_record? - = link_to _('Cancel'), polymorphic_path([@project, issuable.class]), class: 'btn gl-button btn-default' + = link_to _('Cancel'), polymorphic_path([@project, issuable.class]), class: 'btn gl-button btn-default js-reset-autosave' - else - = link_to _('Cancel'), polymorphic_path([@project, issuable]), class: 'gl-button btn btn-default' + = link_to _('Cancel'), polymorphic_path([@project, issuable]), class: 'gl-button btn btn-default js-reset-autosave' - if can?(current_user, :"destroy_#{issuable.to_ability_name}", @project) - = link_to 'Delete', polymorphic_path([@project, issuable], params: { destroy_confirm: true }), data: { confirm: _('%{issuableType} will be removed! Are you sure?') % { issuableType: issuable.human_class_name } }, method: :delete, class: 'btn gl-button btn-danger btn-danger-secondary gl-float-right' + = link_to 'Delete', polymorphic_path([@project, issuable], params: { destroy_confirm: true }), data: { confirm: _('%{issuableType} will be removed! Are you sure?') % { issuableType: issuable.human_class_name } }, method: :delete, class: 'btn gl-button btn-danger btn-danger-secondary gl-float-right js-reset-autosave' - if issuable.respond_to?(:issue_type) = form.hidden_field :issue_type diff --git a/app/views/shared/issuable/form/_contribution.html.haml b/app/views/shared/issuable/form/_contribution.html.haml index c9dda22de46..f9c70236c8f 100644 --- a/app/views/shared/issuable/form/_contribution.html.haml +++ b/app/views/shared/issuable/form/_contribution.html.haml @@ -9,11 +9,10 @@ %hr -.form-group.row - %label.col-form-label.col-sm-2.pt-sm-0 +.form-group + %label = _('Contribution') - .col-sm-10 - = form.gitlab_ui_checkbox_component :allow_collaboration, - _('Allow commits from members who can merge to the target branch. %{link_start}About this feature.%{link_end}').html_safe % { link_start: contribution_help_link_start, link_end: '</a>'.html_safe }, - checkbox_options: { disabled: !issuable.can_allow_collaboration?(current_user) }, - help_text: allow_collaboration_unavailable_reason(issuable) + = form.gitlab_ui_checkbox_component :allow_collaboration, + _('Allow commits from members who can merge to the target branch. %{link_start}About this feature.%{link_end}').html_safe % { link_start: contribution_help_link_start, link_end: '</a>'.html_safe }, + checkbox_options: { disabled: !issuable.can_allow_collaboration?(current_user) }, + help_text: allow_collaboration_unavailable_reason(issuable) diff --git a/app/views/shared/issuable/form/_type_selector.html.haml b/app/views/shared/issuable/form/_type_selector.html.haml index d5c696b1698..a94ef70b2d5 100644 --- a/app/views/shared/issuable/form/_type_selector.html.haml +++ b/app/views/shared/issuable/form/_type_selector.html.haml @@ -1,35 +1,35 @@ - return unless issuable.supports_issue_type? && can?(current_user, :create_issue, @project) .form-group - = form.label :type, _('Type') - .gl-display-flex.gl-align-items-center - .issuable-form-select-holder.selectbox.form-group.gl-mb-0 - .dropdown.js-issuable-type-filter-dropdown-wrap - %button.dropdown-menu-toggle{ type: 'button', 'data-toggle' => 'dropdown' } - %span.dropdown-toggle-text.is-default - = issuable.issue_type.capitalize || _("Select type") - = sprite_icon('chevron-down', css_class: "dropdown-menu-toggle-icon gl-top-3") - .dropdown-menu.dropdown-menu-selectable.dropdown-select - .dropdown-title.gl-display-flex - %span.gl-ml-auto - = _("Select type") - %button.dropdown-title-button.dropdown-menu-close.gl-ml-auto{ type: 'button', "aria-label" => _('Close') } - = sprite_icon('close', size: 16, css_class: 'dropdown-menu-close-icon') - .dropdown-content{ data: { testid: 'issue-type-select-dropdown' } } - %ul - - if create_issue_type_allowed?(@project, :issue) - %li.js-filter-issuable-type - = link_to new_project_issue_path(@project), class: ("is-active" if issuable.issue?) do - #{sprite_icon(work_item_type_icon(:issue), css_class: 'gl-icon')} #{_('Issue')} - - if create_issue_type_allowed?(@project, :incident) - %li.js-filter-issuable-type{ data: { track: { action: "select_issue_type_incident", label: "select_issue_type_incident_dropdown_option" } } } - = link_to new_project_issue_path(@project, { issuable_template: 'incident', issue: { issue_type: 'incident' } }), class: ("is-active" if issuable.incident?) do - #{sprite_icon(work_item_type_icon(:incident), css_class: 'gl-icon')} #{_('Incident')} - + = form.label :type do + = _('Type') #js-type-popover - - if issuable.incident? - %p.form-text.text-muted - - incident_docs_url = help_page_path('operations/incident_management/incidents.md') - - incident_docs_start = format('<a href="%{url}" target="_blank" rel="noopener noreferrer">', url: incident_docs_url) - = format(_('A %{incident_docs_start}modified issue%{incident_docs_end} to guide the resolution of incidents.'), incident_docs_start: incident_docs_start, incident_docs_end: '</a>').html_safe + .issuable-form-select-holder.selectbox.form-group.gl-mb-0.gl-display-block + .dropdown.js-issuable-type-filter-dropdown-wrap + %button.dropdown-menu-toggle{ type: 'button', 'data-toggle' => 'dropdown' } + %span.dropdown-toggle-text.is-default + = issuable.issue_type.capitalize || _("Select type") + = sprite_icon('chevron-down', css_class: "dropdown-menu-toggle-icon gl-top-3") + .dropdown-menu.dropdown-menu-selectable.dropdown-select + .dropdown-title.gl-display-flex + %span.gl-ml-auto + = _("Select type") + %button.dropdown-title-button.dropdown-menu-close.gl-ml-auto{ type: 'button', "aria-label" => _('Close') } + = sprite_icon('close', size: 16, css_class: 'dropdown-menu-close-icon') + .dropdown-content{ data: { testid: 'issue-type-select-dropdown' } } + %ul + - if create_issue_type_allowed?(@project, :issue) + %li.js-filter-issuable-type + = link_to new_project_issue_path(@project), class: ("is-active" if issuable.issue?) do + #{sprite_icon(work_item_type_icon(:issue), css_class: 'gl-icon')} #{_('Issue')} + - if create_issue_type_allowed?(@project, :incident) + %li.js-filter-issuable-type{ data: { track: { action: "select_issue_type_incident", label: "select_issue_type_incident_dropdown_option" } } } + = link_to new_project_issue_path(@project, { issuable_template: 'incident', issue: { issue_type: 'incident' } }), class: ("is-active" if issuable.incident?) do + #{sprite_icon(work_item_type_icon(:incident), css_class: 'gl-icon')} #{_('Incident')} + + - if issuable.incident? + %p.form-text.text-muted + - incident_docs_url = help_page_path('operations/incident_management/incidents.md') + - incident_docs_start = format('<a href="%{url}" target="_blank" rel="noopener noreferrer">', url: incident_docs_url) + = format(_('A %{incident_docs_start}modified issue%{incident_docs_end} to guide the resolution of incidents.'), incident_docs_start: incident_docs_start, incident_docs_end: '</a>').html_safe diff --git a/app/views/shared/issue_type/_details_content.html.haml b/app/views/shared/issue_type/_details_content.html.haml index 7c5b3fd4b3c..39e7d196965 100644 --- a/app/views/shared/issue_type/_details_content.html.haml +++ b/app/views/shared/issue_type/_details_content.html.haml @@ -18,6 +18,7 @@ = render 'projects/issues/design_management' = render_if_exists 'projects/issues/work_item_links' + = render_if_exists 'projects/issues/linked_resources' = render_if_exists 'projects/issues/related_issues' #js-related-merge-requests{ data: { endpoint: expose_path(api_v4_projects_issues_related_merge_requests_path(id: @project.id, issue_iid: issuable.iid)), project_namespace: @project.namespace.path, project_path: @project.path } } diff --git a/app/views/shared/members/_member.html.haml b/app/views/shared/members/_member.html.haml index ba0e5e492f4..23f78f4be45 100644 --- a/app/views/shared/members/_member.html.haml +++ b/app/views/shared/members/_member.html.haml @@ -45,7 +45,8 @@ · %span.js-expires-in-text{ class: "has-tooltip#{' text-warning' if member.expires_soon?}", title: (member.expires_at.to_time.in_time_zone.to_s(:medium) if member.expires?) } - if member.expires? - = _("Expires in %{expires_at}").html_safe % { expires_at: distance_of_time_in_words_to_now(member.expires_at) } + - preposition = current_user.time_display_relative ? '' : 'on' + = _("Expires %{preposition} %{expires_at}").html_safe % { expires_at: time_ago_with_tooltip(member.expires_at), preposition: preposition } - else = image_tag avatar_icon_for_email(member.invite_email, 40), class: "avatar s40 flex-shrink-0 flex-grow-0", alt: '' diff --git a/app/views/shared/milestones/_header.html.haml b/app/views/shared/milestones/_header.html.haml index 541d7a52385..18db556e024 100644 --- a/app/views/shared/milestones/_header.html.haml +++ b/app/views/shared/milestones/_header.html.haml @@ -11,23 +11,21 @@ .milestone-buttons - if can?(current_user, :admin_milestone, @group || @project) - = link_to _('Edit'), edit_milestone_path(milestone), class: 'btn gl-button btn-grouped' + = render Pajamas::ButtonComponent.new(href: edit_milestone_path(milestone), button_options: { class: 'btn-grouped' }) do + = _('Edit') - if milestone.project_milestone? && milestone.project.group - %button.js-promote-project-milestone-button.btn.gl-button.btn-grouped{ data: { milestone_title: milestone.title, - group_name: milestone.project.group.name, - url: promote_project_milestone_path(milestone.project, milestone)}, - disabled: true, - type: 'button' } + = render Pajamas::ButtonComponent.new(button_options: { class: 'js-promote-project-milestone-button btn-grouped', data: { milestone_title: milestone.title, group_name: milestone.project.group.name, url: promote_project_milestone_path(milestone.project, milestone) }, disabled: true }) do = _('Promote') #promote-milestone-modal - if milestone.active? - = link_to _('Close milestone'), update_milestone_path(milestone, { state_event: :close }), method: :put, class: 'btn gl-button btn-grouped btn-close' + = render Pajamas::ButtonComponent.new(href: update_milestone_path(milestone, { state_event: :close }), button_options: { class: 'btn-grouped btn-close', data: { method: 'put' }, rel: 'nofollow' }) do + = _('Close milestone') - else - = link_to _('Reopen milestone'), update_milestone_path(milestone, { state_event: :activate }), method: :put, class: 'btn gl-button btn-grouped' + = render Pajamas::ButtonComponent.new(href: update_milestone_path(milestone, { state_event: :activate }), button_options: { class: 'btn-grouped', data: { method: 'put' }, rel: 'nofollow' }) do + = _('Reopen milestone') = render 'shared/milestones/delete_button' - %button.btn.gl-button.btn-default.btn-grouped.float-right.d-block.d-sm-none.js-sidebar-toggle{ type: 'button' } - = sprite_icon('chevron-double-lg-left') + = render Pajamas::ButtonComponent.new(icon: 'chevron-double-lg-left', button_options: { 'aria-label' => _('Toggle sidebar'), class: 'btn-grouped gl-float-right! gl-sm-display-none js-sidebar-toggle' }) diff --git a/app/views/shared/runners/_form.html.haml b/app/views/shared/runners/_form.html.haml index 024b06fe97a..e0079a95cec 100644 --- a/app/views/shared/runners/_form.html.haml +++ b/app/views/shared/runners/_form.html.haml @@ -1,5 +1,5 @@ = gitlab_ui_form_for runner, url: runner_form_url do |f| - = form_errors(runner) + = form_errors(runner, pajamas_alert: true) .form-group.row = label :active, _("Active"), class: 'col-form-label col-sm-2' .col-sm-10 diff --git a/app/views/shared/snippets/_form.html.haml b/app/views/shared/snippets/_form.html.haml index 5f511b35b61..33b0e1f693e 100644 --- a/app/views/shared/snippets/_form.html.haml +++ b/app/views/shared/snippets/_form.html.haml @@ -1,2 +1,2 @@ - available_visibility_levels = available_visibility_levels(@snippet) -#js-snippet-edit.snippet-form{ data: {'project_path': @snippet.project&.full_path, 'snippet-gid': @snippet.new_record? ? '' : @snippet.to_global_id, 'markdown-preview-path': preview_markdown_path(parent), 'markdown-docs-path': help_page_path('user/markdown'), 'visibility-help-link': help_page_path("public_access/public_access"), 'visibility_levels': available_visibility_levels, 'selected_level': snippets_selected_visibility_level(available_visibility_levels, @snippet.visibility_level), 'multiple_levels_restricted': multiple_visibility_levels_restricted? } } +#js-snippet-edit.snippet-form{ data: {'project_path': @snippet.project&.full_path, 'snippet-gid': @snippet.new_record? ? '' : @snippet.to_global_id, 'markdown-preview-path': preview_markdown_path(parent), 'markdown-docs-path': help_page_path('user/markdown'), 'visibility-help-link': help_page_path("user/public_access"), 'visibility_levels': available_visibility_levels, 'selected_level': snippets_selected_visibility_level(available_visibility_levels, @snippet.visibility_level), 'multiple_levels_restricted': multiple_visibility_levels_restricted? } } diff --git a/app/views/shared/web_hooks/_form.html.haml b/app/views/shared/web_hooks/_form.html.haml index afe72767b9a..fe68244f1da 100644 --- a/app/views/shared/web_hooks/_form.html.haml +++ b/app/views/shared/web_hooks/_form.html.haml @@ -1,4 +1,4 @@ -= form_errors(hook) += form_errors(hook, pajamas_alert: true) .form-group = form.label :url, s_('Webhooks|URL'), class: 'label-bold' diff --git a/app/views/shared/wikis/edit.html.haml b/app/views/shared/wikis/edit.html.haml index 6bbce6b80d8..fc56a191cad 100644 --- a/app/views/shared/wikis/edit.html.haml +++ b/app/views/shared/wikis/edit.html.haml @@ -1,5 +1,7 @@ - wiki_page_title @page, @page.persisted? ? _('Edit') : _('New') - add_page_specific_style 'page_bundles/wiki' +- @gfm_form = true +- @noteable_type = 'Wiki' - if @error #js-wiki-error{ data: { error: @error, wiki_page_path: wiki_page_path(@wiki, @page) } } diff --git a/app/views/users/_profile_basic_info.html.haml b/app/views/users/_profile_basic_info.html.haml index 3b0186e84e1..b62440fcbde 100644 --- a/app/views/users/_profile_basic_info.html.haml +++ b/app/views/users/_profile_basic_info.html.haml @@ -3,4 +3,7 @@ @#{@user.username} - if can?(current_user, :read_user_profile, @user) = render 'middle_dot_divider' do + = s_('UserProfile|User ID: %{id}') % { id: @user.id } + = clipboard_button(title: s_('UserProfile|Copy user ID'), text: @user.id) + = render 'middle_dot_divider' do = s_('Member since %{date}') % { date: @user.created_at.to_date.to_s(:long) } |