Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/views/admin')
-rw-r--r--app/views/admin/abuse_reports/_abuse_report.html.haml2
-rw-r--r--app/views/admin/appearances/_form.html.haml8
-rw-r--r--app/views/admin/appearances/_system_header_footer_form.html.haml8
-rw-r--r--app/views/admin/appearances/preview_sign_in.html.haml4
-rw-r--r--app/views/admin/application_settings/_abuse.html.haml2
-rw-r--r--app/views/admin/application_settings/_account_and_limit.html.haml16
-rw-r--r--app/views/admin/application_settings/_ci_cd.html.haml26
-rw-r--r--app/views/admin/application_settings/_diff_limits.html.haml2
-rw-r--r--app/views/admin/application_settings/_eks.html.haml6
-rw-r--r--app/views/admin/application_settings/_email.html.haml2
-rw-r--r--app/views/admin/application_settings/_external_authorization_service_form.html.haml14
-rw-r--r--app/views/admin/application_settings/_gitaly.html.haml6
-rw-r--r--app/views/admin/application_settings/_gitpod.html.haml2
-rw-r--r--app/views/admin/application_settings/_grafana.html.haml2
-rw-r--r--app/views/admin/application_settings/_help_page.html.haml6
-rw-r--r--app/views/admin/application_settings/_import_export_limits.html.haml12
-rw-r--r--app/views/admin/application_settings/_initial_branch_name.html.haml2
-rw-r--r--app/views/admin/application_settings/_ip_limits.html.haml14
-rw-r--r--app/views/admin/application_settings/_issue_limits.html.haml2
-rw-r--r--app/views/admin/application_settings/_kroki.html.haml10
-rw-r--r--app/views/admin/application_settings/_note_limits.html.haml12
-rw-r--r--app/views/admin/application_settings/_outbound.html.haml2
-rw-r--r--app/views/admin/application_settings/_package_registry.html.haml12
-rw-r--r--app/views/admin/application_settings/_pages.html.haml4
-rw-r--r--app/views/admin/application_settings/_performance.html.haml6
-rw-r--r--app/views/admin/application_settings/_performance_bar.html.haml2
-rw-r--r--app/views/admin/application_settings/_plantuml.html.haml2
-rw-r--r--app/views/admin/application_settings/_prometheus.html.haml2
-rw-r--r--app/views/admin/application_settings/_protected_paths.html.haml6
-rw-r--r--app/views/admin/application_settings/_realtime.html.haml2
-rw-r--r--app/views/admin/application_settings/_registry.html.haml16
-rw-r--r--app/views/admin/application_settings/_repository_check.html.haml6
-rw-r--r--app/views/admin/application_settings/_repository_static_objects.html.haml4
-rw-r--r--app/views/admin/application_settings/_signin.html.haml8
-rw-r--r--app/views/admin/application_settings/_signup.html.haml12
-rw-r--r--app/views/admin/application_settings/_snowplow.html.haml6
-rw-r--r--app/views/admin/application_settings/_sourcegraph.html.haml2
-rw-r--r--app/views/admin/application_settings/_spam.html.haml12
-rw-r--r--app/views/admin/application_settings/_terminal.html.haml2
-rw-r--r--app/views/admin/application_settings/_terms.html.haml2
-rw-r--r--app/views/admin/application_settings/_visibility_and_access.html.haml8
-rw-r--r--app/views/admin/application_settings/ci/_header.html.haml15
-rw-r--r--app/views/admin/application_settings/ci_cd.html.haml2
-rw-r--r--app/views/admin/application_settings/general.html.haml1
-rw-r--r--app/views/admin/application_settings/integrations.html.haml4
-rw-r--r--app/views/admin/application_settings/metrics_and_profiling.html.haml2
-rw-r--r--app/views/admin/application_settings/network.html.haml11
-rw-r--r--app/views/admin/application_settings/preferences.html.haml12
-rw-r--r--app/views/admin/application_settings/reporting.html.haml4
-rw-r--r--app/views/admin/application_settings/repository.html.haml10
-rw-r--r--app/views/admin/applications/_form.html.haml6
-rw-r--r--app/views/admin/applications/index.html.haml53
-rw-r--r--app/views/admin/applications/show.html.haml4
-rw-r--r--app/views/admin/broadcast_messages/_form.html.haml8
-rw-r--r--app/views/admin/dashboard/index.html.haml118
-rw-r--r--app/views/admin/groups/_form.html.haml2
-rw-r--r--app/views/admin/groups/_group.html.haml4
-rw-r--r--app/views/admin/hooks/_form.html.haml19
-rw-r--r--app/views/admin/jobs/index.html.haml1
-rw-r--r--app/views/admin/labels/_form.html.haml6
-rw-r--r--app/views/admin/projects/_projects.html.haml4
-rw-r--r--app/views/admin/projects/index.html.haml2
-rw-r--r--app/views/admin/projects/show.html.haml4
-rw-r--r--app/views/admin/runners/index.html.haml6
-rw-r--r--app/views/admin/users/_access_levels.html.haml2
-rw-r--r--app/views/admin/users/_admin_notes.html.haml2
-rw-r--r--app/views/admin/users/_cohorts.html.haml (renamed from app/views/admin/cohorts/index.html.haml)3
-rw-r--r--app/views/admin/users/_cohorts_table.html.haml (renamed from app/views/admin/cohorts/_cohorts_table.html.haml)0
-rw-r--r--app/views/admin/users/_form.html.haml18
-rw-r--r--app/views/admin/users/_head.html.haml3
-rw-r--r--app/views/admin/users/_user.html.haml4
-rw-r--r--app/views/admin/users/_user_detail.html.haml7
-rw-r--r--app/views/admin/users/_users.html.haml88
-rw-r--r--app/views/admin/users/index.html.haml99
-rw-r--r--app/views/admin/users/show.html.haml42
75 files changed, 464 insertions, 376 deletions
diff --git a/app/views/admin/abuse_reports/_abuse_report.html.haml b/app/views/admin/abuse_reports/_abuse_report.html.haml
index c3d7fac6df7..3e1a76f31e1 100644
--- a/app/views/admin/abuse_reports/_abuse_report.html.haml
+++ b/app/views/admin/abuse_reports/_abuse_report.html.haml
@@ -13,7 +13,7 @@
%td
%strong.subheading.d-block.d-sm-none
= _('Reported by %{reporter}').html_safe % { reporter: reporter ? link_to(reporter.name, reporter) : _('(removed)') }
- .light.gl-display-none.gl-display-sm-block
+ .light.gl-display-none.gl-sm-display-block
= link_to(reporter.name, reporter)
.light.small
= time_ago_with_tooltip(abuse_report.created_at)
diff --git a/app/views/admin/appearances/_form.html.haml b/app/views/admin/appearances/_form.html.haml
index 67ac9d1c7b8..e6f12f4785a 100644
--- a/app/views/admin/appearances/_form.html.haml
+++ b/app/views/admin/appearances/_form.html.haml
@@ -54,10 +54,10 @@
.col-lg-8
.form-group
= f.label :title, class: 'col-form-label label-bold'
- = f.text_field :title, class: "form-control"
+ = f.text_field :title, class: "form-control gl-form-input"
.form-group
= f.label :description, class: 'col-form-label label-bold'
- = f.text_area :description, class: "form-control", rows: 10
+ = f.text_area :description, class: "form-control gl-form-input", rows: 10
.hint
= parsed_with_gfm
.form-group
@@ -83,7 +83,7 @@
.form-group
= f.label :new_project_guidelines, class: 'col-form-label label-bold'
%p
- = f.text_area :new_project_guidelines, class: "form-control", rows: 10
+ = f.text_area :new_project_guidelines, class: "form-control gl-form-input", rows: 10
.hint
= parsed_with_gfm
@@ -96,7 +96,7 @@
.form-group
= f.label :profile_image_guidelines, class: 'col-form-label label-bold'
%p
- = f.text_area :profile_image_guidelines, class: "form-control", rows: 10
+ = f.text_area :profile_image_guidelines, class: "form-control gl-form-input", rows: 10
.hint
= parsed_with_gfm
diff --git a/app/views/admin/appearances/_system_header_footer_form.html.haml b/app/views/admin/appearances/_system_header_footer_form.html.haml
index b50778a1076..4571d34a497 100644
--- a/app/views/admin/appearances/_system_header_footer_form.html.haml
+++ b/app/views/admin/appearances/_system_header_footer_form.html.haml
@@ -9,10 +9,10 @@
.col-lg-8
.form-group
= form.label :header_message, _('Header message'), class: 'col-form-label label-bold'
- = form.text_area :header_message, placeholder: _('State your message to activate'), class: "form-control js-autosize"
+ = form.text_area :header_message, placeholder: _('State your message to activate'), class: "form-control gl-form-input js-autosize"
.form-group
= form.label :footer_message, _('Footer message'), class: 'col-form-label label-bold'
- = form.text_area :footer_message, placeholder: _('State your message to activate'), class: "form-control js-autosize"
+ = form.text_area :footer_message, placeholder: _('State your message to activate'), class: "form-control gl-form-input js-autosize"
.form-group
.form-check
= form.check_box :email_header_and_footer_enabled, class: 'form-check-input'
@@ -27,7 +27,7 @@
= _('Customize colors')
.form-group.js-toggle-colors-container.hide
= form.label :message_background_color, _('Background Color'), class: 'col-form-label label-bold'
- = form.color_field :message_background_color, class: "form-control"
+ = form.color_field :message_background_color, class: "form-control gl-form-input"
.form-group.js-toggle-colors-container.hide
= form.label :message_font_color, _('Font Color'), class: 'col-form-label label-bold'
- = form.color_field :message_font_color, class: "form-control"
+ = form.color_field :message_font_color, class: "form-control gl-form-input"
diff --git a/app/views/admin/appearances/preview_sign_in.html.haml b/app/views/admin/appearances/preview_sign_in.html.haml
index eec4719c13c..6e5bb45c3cc 100644
--- a/app/views/admin/appearances/preview_sign_in.html.haml
+++ b/app/views/admin/appearances/preview_sign_in.html.haml
@@ -3,10 +3,10 @@
%form.gl-show-field-errors
.form-group
= label_tag :login
- = text_field_tag :login, nil, class: "form-control top", title: 'Please provide your username or email address.'
+ = text_field_tag :login, nil, class: "form-control gl-form-input top", title: 'Please provide your username or email address.'
.form-group
= label_tag :password
- = password_field_tag :password, nil, class: "form-control bottom", title: 'This field is required.'
+ = password_field_tag :password, nil, class: "form-control gl-form-input bottom", title: 'This field is required.'
.form-group
= button_tag "Sign in", class: "btn gl-button btn-success"
diff --git a/app/views/admin/application_settings/_abuse.html.haml b/app/views/admin/application_settings/_abuse.html.haml
index c77615f9040..ea9bdbed9ae 100644
--- a/app/views/admin/application_settings/_abuse.html.haml
+++ b/app/views/admin/application_settings/_abuse.html.haml
@@ -4,7 +4,7 @@
%fieldset
.form-group
= f.label :abuse_notification_email, 'Abuse reports notification email', class: 'label-bold'
- = f.text_field :abuse_notification_email, class: 'form-control'
+ = f.text_field :abuse_notification_email, class: 'form-control gl-form-input'
.form-text.text-muted
Abuse reports will be sent to this address if it is set. Abuse reports are always available in the admin area.
diff --git a/app/views/admin/application_settings/_account_and_limit.html.haml b/app/views/admin/application_settings/_account_and_limit.html.haml
index 46155f3f670..009e0732911 100644
--- a/app/views/admin/application_settings/_account_and_limit.html.haml
+++ b/app/views/admin/application_settings/_account_and_limit.html.haml
@@ -10,27 +10,29 @@
.form-group
= f.label :default_projects_limit, _('Default projects limit'), class: 'label-bold'
- = f.number_field :default_projects_limit, class: 'form-control', title: _('Maximum number of projects.'), data: { toggle: 'tooltip', container: 'body' }
+ = f.number_field :default_projects_limit, class: 'form-control gl-form-input', title: _('Maximum number of projects.'), data: { toggle: 'tooltip', container: 'body' }
.form-group
= f.label :max_attachment_size, _('Maximum attachment size (MB)'), class: 'label-bold'
- = f.number_field :max_attachment_size, class: 'form-control', title: _('Maximum size of individual attachments in comments.'), data: { toggle: 'tooltip', container: 'body' }
+ = f.number_field :max_attachment_size, class: 'form-control gl-form-input', title: _('Maximum size of individual attachments in comments.'), data: { toggle: 'tooltip', container: 'body' }
= render_if_exists 'admin/application_settings/repository_size_limit_setting', form: f
.form-group
= f.label :receive_max_input_size, _('Maximum push size (MB)'), class: 'label-light'
- = f.number_field :receive_max_input_size, class: 'form-control qa-receive-max-input-size-field', title: _('Maximum size limit for a single commit.'), data: { toggle: 'tooltip', container: 'body' }
+ = f.number_field :receive_max_input_size, class: 'form-control gl-form-input qa-receive-max-input-size-field', title: _('Maximum size limit for a single commit.'), data: { toggle: 'tooltip', container: 'body' }
.form-group
= f.label :max_import_size, _('Maximum import size (MB)'), class: 'label-light'
- = f.number_field :max_import_size, class: 'form-control qa-receive-max-import-size-field', title: _('Maximum size of import files.'), data: { toggle: 'tooltip', container: 'body' }
+ = f.number_field :max_import_size, class: 'form-control gl-form-input qa-receive-max-import-size-field', title: _('Maximum size of import files.'), data: { toggle: 'tooltip', container: 'body' }
%span.form-text.text-muted= _('0 for unlimited, only effective with remote storage enabled.')
.form-group
= f.label :session_expire_delay, _('Session duration (minutes)'), class: 'label-light'
- = f.number_field :session_expire_delay, class: 'form-control', title: _('Maximum duration of a session.'), data: { toggle: 'tooltip', container: 'body' }
+ = f.number_field :session_expire_delay, class: 'form-control gl-form-input', title: _('Maximum duration of a session.'), data: { toggle: 'tooltip', container: 'body' }
%span.form-text.text-muted#session_expire_delay_help_block= _('GitLab restart is required to apply changes.')
+ = render_if_exists 'admin/application_settings/git_two_factor_session_expiry', form: f
= render_if_exists 'admin/application_settings/personal_access_token_expiration_policy', form: f
= render_if_exists 'admin/application_settings/enforce_pat_expiration', form: f
+ = render_if_exists 'admin/application_settings/enforce_ssh_key_expiration', form: f
.form-group
= f.label :user_oauth_applications, _('User OAuth applications'), class: 'label-bold'
@@ -46,14 +48,14 @@
= _('Newly registered users will by default be external')
.gl-mt-3
= _('Internal users')
- = f.text_field :user_default_internal_regex, placeholder: _('Regex pattern'), class: 'form-control gl-mt-2'
+ = f.text_field :user_default_internal_regex, placeholder: _('Regex pattern'), class: 'form-control gl-form-input gl-mt-2'
.help-block
= _('Specify an e-mail address regex pattern to identify default internal users.')
= link_to _('More information'), help_page_path('user/permissions', anchor: 'setting-new-users-to-external'),
target: '_blank'
.form-group
= f.label :personal_access_token_prefix, _('Personal Access Token prefix'), class: 'label-light'
- = f.text_field :personal_access_token_prefix, placeholder: _('Max 20 characters'), class: 'form-control'
+ = f.text_field :personal_access_token_prefix, placeholder: _('Max 20 characters'), class: 'form-control gl-form-input'
.form-group
= f.label :user_show_add_ssh_key_message, _('Prompt users to upload SSH keys'), class: 'label-bold'
.form-check
diff --git a/app/views/admin/application_settings/_ci_cd.html.haml b/app/views/admin/application_settings/_ci_cd.html.haml
index 9f384519c3a..f11770b397e 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 @@
= link_to _('More information'), help_page_path('topics/autodevops/index.md'), target: '_blank'
.form-group
= f.label :auto_devops_domain, s_('AdminSettings|Auto DevOps domain'), class: 'label-bold'
- = f.text_field :auto_devops_domain, class: 'form-control', placeholder: 'domain.com'
+ = f.text_field :auto_devops_domain, class: 'form-control gl-form-input', placeholder: 'domain.com'
.form-text.text-muted
= s_("AdminSettings|Specify a domain to use by default for every project's Auto Review Apps and Auto Deploy stages.")
.form-group
@@ -27,23 +27,31 @@
.form-group
= f.label :shared_runners_text, class: 'label-bold'
- = f.text_area :shared_runners_text, class: 'form-control', rows: 4
+ = f.text_area :shared_runners_text, class: 'form-control gl-form-input', rows: 4
.form-text.text-muted= _("Markdown enabled")
.form-group
= f.label :max_artifacts_size, _('Maximum artifacts size (MB)'), class: 'label-bold'
- = f.number_field :max_artifacts_size, class: 'form-control'
+ = f.number_field :max_artifacts_size, class: 'form-control gl-form-input'
.form-text.text-muted
= _("Set the maximum file size for each job's artifacts")
= link_to sprite_icon('question-o'), help_page_path('user/admin_area/settings/continuous_integration', anchor: 'maximum-artifacts-size')
.form-group
= f.label :default_artifacts_expire_in, _('Default artifacts expiration'), class: 'label-bold'
- = f.text_field :default_artifacts_expire_in, class: 'form-control'
+ = f.text_field :default_artifacts_expire_in, class: 'form-control gl-form-input'
.form-text.text-muted
= html_escape(_("Set the default expiration time for each job's artifacts. 0 for unlimited. The default unit is in seconds, but you can define an alternative. For example: %{code_open}4 mins 2 sec%{code_close}, %{code_open}2h42min%{code_close}.")) % { code_open: '<code>'.html_safe, code_close: '</code>'.html_safe }
= link_to sprite_icon('question-o'), help_page_path('user/admin_area/settings/continuous_integration', anchor: 'default-artifacts-expiration')
.form-group
+ .form-check
+ = f.check_box :keep_latest_artifact, class: 'form-check-input'
+ = f.label :keep_latest_artifact, class: 'form-check-label' do
+ %strong
+ = s_('AdminSettings|Keep the latest artifacts for all jobs in the latest successful pipelines')
+ .form-text.text-muted
+ = s_('AdminSettings|The latest artifacts for all jobs in the most recent successful pipelines in each project are stored and do not expire.')
+ .form-group
= f.label :archive_builds_in_human_readable, _('Archive jobs'), class: 'label-bold'
- = f.text_field :archive_builds_in_human_readable, class: 'form-control', placeholder: 'never'
+ = f.text_field :archive_builds_in_human_readable, class: 'form-control gl-form-input', placeholder: 'never'
.form-text.text-muted
= html_escape(_("Set the duration for which the jobs will be considered as old and expired. Once that time passes, the jobs will be archived and no longer able to be retried. Make it empty to never expire jobs. It has to be no less than 1 day, for example: %{code_open}15 days%{code_close}, %{code_open}1 month%{code_close}, %{code_open}2 years%{code_close}.")) % { code_open: '<code>'.html_safe, code_close: '</code>'.html_safe }
.form-group
@@ -51,13 +59,13 @@
= f.check_box :protected_ci_variables, class: 'form-check-input'
= f.label :protected_ci_variables, class: 'form-check-label' do
= s_('AdminSettings|Environment variables are protected by default')
- .form-text.text-muted
- = s_('AdminSettings|When creating a new environment variable it will be protected by default.')
+ .form-text.text-muted
+ = s_('AdminSettings|When creating a new environment variable it will be protected by default.')
.form-group
= f.label :ci_config_path, _('Default CI configuration path'), class: 'label-bold'
- = f.text_field :default_ci_config_path, class: 'form-control', placeholder: '.gitlab-ci.yml'
+ = f.text_field :default_ci_config_path, class: 'form-control gl-form-input', placeholder: '.gitlab-ci.yml'
%p.form-text.text-muted
= _("The default CI configuration path for new projects.").html_safe
- = link_to sprite_icon('question-o'), help_page_path('ci/pipelines/settings', anchor: 'custom-ci-configuration-path'), target: '_blank'
+ = link_to sprite_icon('question-o'), help_page_path('ci/pipelines/settings', anchor: 'custom-cicd-configuration-path'), target: '_blank'
= f.submit _('Save changes'), class: "gl-button btn btn-success"
diff --git a/app/views/admin/application_settings/_diff_limits.html.haml b/app/views/admin/application_settings/_diff_limits.html.haml
index 6811c1e10d6..494558a6c2d 100644
--- a/app/views/admin/application_settings/_diff_limits.html.haml
+++ b/app/views/admin/application_settings/_diff_limits.html.haml
@@ -4,7 +4,7 @@
%fieldset
.form-group
= f.label :diff_max_patch_bytes, 'Maximum diff patch size (Bytes)', class: 'label-light'
- = f.number_field :diff_max_patch_bytes, class: 'form-control'
+ = f.number_field :diff_max_patch_bytes, class: 'form-control gl-form-input'
%span.form-text.text-muted
Diff files surpassing this limit will be presented as 'too large'
and won't be expandable.
diff --git a/app/views/admin/application_settings/_eks.html.haml b/app/views/admin/application_settings/_eks.html.haml
index 589d754be04..8897d0eb14b 100644
--- a/app/views/admin/application_settings/_eks.html.haml
+++ b/app/views/admin/application_settings/_eks.html.haml
@@ -20,16 +20,16 @@
Enable Amazon EKS integration
.form-group
= f.label :eks_account_id, 'Account ID', class: 'label-bold'
- = f.text_field :eks_account_id, class: 'form-control'
+ = f.text_field :eks_account_id, class: 'form-control gl-form-input'
.form-group
= f.label :eks_access_key_id, 'Access key ID', class: 'label-bold'
- = f.text_field :eks_access_key_id, class: 'form-control'
+ = f.text_field :eks_access_key_id, class: 'form-control gl-form-input'
.form-text.text-muted
= _('AWS Access Key. Only required if not using role instance credentials')
.form-group
= f.label :eks_secret_access_key, 'Secret access key', class: 'label-bold'
- = f.password_field :eks_secret_access_key, autocomplete: 'off', class: 'form-control'
+ = f.password_field :eks_secret_access_key, autocomplete: 'off', class: 'form-control gl-form-input'
.form-text.text-muted
= _('AWS Secret Access Key. Only required if not using role instance credentials')
diff --git a/app/views/admin/application_settings/_email.html.haml b/app/views/admin/application_settings/_email.html.haml
index dd1be876505..89946c63bb0 100644
--- a/app/views/admin/application_settings/_email.html.haml
+++ b/app/views/admin/application_settings/_email.html.haml
@@ -18,7 +18,7 @@
= _('By default GitLab sends emails in HTML and plain text formats so mail clients can choose what format to use. Disable this option if you only want to send emails in plain text format.')
.form-group
= f.label :commit_email_hostname, _('Custom hostname (for private commit emails)'), class: 'label-bold'
- = f.text_field :commit_email_hostname, class: 'form-control'
+ = f.text_field :commit_email_hostname, class: 'form-control gl-form-input'
.form-text.text-muted
- commit_email_hostname_docs_link = link_to _('Learn more'), help_page_path('user/admin_area/settings/email.md', anchor: 'custom-hostname-for-private-commit-emails'), target: '_blank'
= _("This setting will update the hostname that is used to generate private commit emails. %{learn_more}").html_safe % { learn_more: commit_email_hostname_docs_link }
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 c8c1f3e6214..07256c9f4fe 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
@@ -2,7 +2,7 @@
.settings-header
%h4
= _('External authentication')
- %button.btn.js-settings-toggle{ type: 'button' }
+ %button.btn.gl-button.btn-default.js-settings-toggle{ type: 'button' }
= expanded ? 'Collapse' : 'Expand'
%p
= _('External Classification Policy Authorization')
@@ -22,29 +22,29 @@
= link_to sprite_icon('question-o'), help_page_path('user/admin_area/settings/external_authorization')
.form-group
= f.label :external_authorization_service_url, _('Service URL'), class: 'label-bold'
- = f.text_field :external_authorization_service_url, class: 'form-control'
+ = f.text_field :external_authorization_service_url, class: 'form-control gl-form-input'
%span.form-text.text-muted
= external_authorization_url_help_text
.form-group
= f.label :external_authorization_service_timeout, _('External authorization request timeout'), class: 'label-bold'
- = f.number_field :external_authorization_service_timeout, class: 'form-control', min: 0.001, max: 10, step: 0.001
+ = f.number_field :external_authorization_service_timeout, class: 'form-control gl-form-input', min: 0.001, max: 10, step: 0.001
%span.form-text.text-muted
= external_authorization_timeout_help_text
= f.label :external_auth_client_cert, _('Client authentication certificate'), class: 'label-bold'
- = f.text_area :external_auth_client_cert, class: 'form-control'
+ = f.text_area :external_auth_client_cert, class: 'form-control gl-form-input'
%span.form-text.text-muted
= external_authorization_client_certificate_help_text
.form-group
= f.label :external_auth_client_key, _('Client authentication key'), class: 'label-bold'
- = f.text_area :external_auth_client_key, class: 'form-control'
+ = f.text_area :external_auth_client_key, class: 'form-control gl-form-input'
%span.form-text.text-muted
= external_authorization_client_key_help_text
.form-group
= f.label :external_auth_client_key_pass, _('Client authentication key password'), class: 'label-bold'
- = f.password_field :external_auth_client_key_pass, class: 'form-control'
+ = f.password_field :external_auth_client_key_pass, class: 'form-control gl-form-input'
%span.form-text.text-muted
= external_authorization_client_pass_help_text
.form-group
= f.label :external_authorization_service_default_label, _('Default classification label'), class: 'label-bold'
- = f.text_field :external_authorization_service_default_label, class: 'form-control'
+ = f.text_field :external_authorization_service_default_label, class: 'form-control gl-form-input'
= f.submit 'Save changes', class: "gl-button btn btn-success"
diff --git a/app/views/admin/application_settings/_gitaly.html.haml b/app/views/admin/application_settings/_gitaly.html.haml
index a0cd70b4d7c..56ec35d9329 100644
--- a/app/views/admin/application_settings/_gitaly.html.haml
+++ b/app/views/admin/application_settings/_gitaly.html.haml
@@ -4,7 +4,7 @@
%fieldset
.form-group
= f.label :gitaly_timeout_default, 'Default Timeout Period', class: 'label-bold'
- = f.number_field :gitaly_timeout_default, class: 'form-control'
+ = f.number_field :gitaly_timeout_default, class: 'form-control gl-form-input'
.form-text.text-muted
Timeout for Gitaly calls from the GitLab application (in seconds). This timeout is not enforced
for git fetch/push operations or Sidekiq jobs.
@@ -13,14 +13,14 @@
the worker.
.form-group
= f.label :gitaly_timeout_fast, 'Fast Timeout Period', class: 'label-bold'
- = f.number_field :gitaly_timeout_fast, class: 'form-control'
+ = f.number_field :gitaly_timeout_fast, class: 'form-control gl-form-input'
.form-text.text-muted
Fast operation timeout (in seconds). Some Gitaly operations are expected to be fast.
If they exceed this threshold, there may be a problem with a storage shard and 'failing fast'
can help maintain the stability of the GitLab instance.
.form-group
= f.label :gitaly_timeout_medium, 'Medium Timeout Period', class: 'label-bold'
- = f.number_field :gitaly_timeout_medium, class: 'form-control'
+ = f.number_field :gitaly_timeout_medium, class: 'form-control gl-form-input'
.form-text.text-muted
Medium operation timeout (in seconds). This should be a value between the Fast and the Default timeout.
diff --git a/app/views/admin/application_settings/_gitpod.html.haml b/app/views/admin/application_settings/_gitpod.html.haml
index 7f78cce4575..cca81136bb9 100644
--- a/app/views/admin/application_settings/_gitpod.html.haml
+++ b/app/views/admin/application_settings/_gitpod.html.haml
@@ -22,7 +22,7 @@
= f.label :gitpod_enabled, s_('Gitpod|Enable Gitpod integration'), class: 'form-check-label'
.form-group
= f.label :gitpod_url, s_('Gitpod|Gitpod URL'), class: 'label-bold'
- = f.text_field :gitpod_url, class: 'form-control', placeholder: s_('Gitpod|e.g. https://gitpod.example.com')
+ = f.text_field :gitpod_url, class: 'form-control gl-form-input', placeholder: s_('Gitpod|e.g. https://gitpod.example.com')
.form-text.text-muted
= s_('Gitpod|Add the URL to your Gitpod instance configured to read your GitLab projects.')
= f.submit s_('Save changes'), class: 'gl-button btn btn-success'
diff --git a/app/views/admin/application_settings/_grafana.html.haml b/app/views/admin/application_settings/_grafana.html.haml
index bd2b2094311..368b4db4549 100644
--- a/app/views/admin/application_settings/_grafana.html.haml
+++ b/app/views/admin/application_settings/_grafana.html.haml
@@ -12,6 +12,6 @@
= _('Enable access to Grafana')
.form-group
= f.label :grafana_url, _('Grafana URL'), class: 'label-bold'
- = f.text_field :grafana_url, class: 'form-control', placeholder: '/-/grafana'
+ = f.text_field :grafana_url, class: 'form-control gl-form-input', placeholder: '/-/grafana'
= f.submit _('Save changes'), class: "gl-button btn btn-success"
diff --git a/app/views/admin/application_settings/_help_page.html.haml b/app/views/admin/application_settings/_help_page.html.haml
index fc31f612b8c..858df44bd98 100644
--- a/app/views/admin/application_settings/_help_page.html.haml
+++ b/app/views/admin/application_settings/_help_page.html.haml
@@ -6,7 +6,7 @@
.form-group
= f.label :help_page_text, class: 'label-bold'
- = f.text_area :help_page_text, class: 'form-control', rows: 4
+ = f.text_area :help_page_text, class: 'form-control gl-form-input', rows: 4
.form-text.text-muted= _('Markdown enabled')
.form-group
.form-check
@@ -15,12 +15,12 @@
= _('Hide marketing-related entries from help')
.form-group
= f.label :help_page_support_url, _('Support page URL'), class: 'label-bold'
- = f.text_field :help_page_support_url, class: 'form-control', placeholder: 'http://company.example.com/getting-help', :'aria-describedby' => 'support_help_block'
+ = f.text_field :help_page_support_url, class: 'form-control gl-form-input', placeholder: 'http://company.example.com/getting-help', :'aria-describedby' => 'support_help_block'
%span.form-text.text-muted#support_help_block= _('Alternate support URL for help page and help dropdown')
- if show_documentation_base_url_field?
.form-group
= f.label :help_page_documentation_base_url, _('Documentation pages URL'), class: 'label-bold'
- = f.text_field :help_page_documentation_base_url, class: 'form-control', placeholder: 'https://docs.gitlab.com'
+ = f.text_field :help_page_documentation_base_url, class: 'form-control gl-form-input', placeholder: 'https://docs.gitlab.com'
= f.submit _('Save changes'), class: "gl-button btn btn-success"
diff --git a/app/views/admin/application_settings/_import_export_limits.html.haml b/app/views/admin/application_settings/_import_export_limits.html.haml
index 58218a41282..e1a58c888a5 100644
--- a/app/views/admin/application_settings/_import_export_limits.html.haml
+++ b/app/views/admin/application_settings/_import_export_limits.html.haml
@@ -4,31 +4,31 @@
%fieldset
.form-group
= f.label :project_import_limit, _('Max Project Import requests per minute per user'), class: 'label-bold'
- = f.number_field :project_import_limit, class: 'form-control'
+ = f.number_field :project_import_limit, class: 'form-control gl-form-input'
%fieldset
.form-group
= f.label :project_export_limit, _('Max Project Export requests per minute per user'), class: 'label-bold'
- = f.number_field :project_export_limit, class: 'form-control'
+ = f.number_field :project_export_limit, class: 'form-control gl-form-input'
%fieldset
.form-group
= f.label :project_download_export_limit, _('Max Project Export Download requests per minute per user'), class: 'label-bold'
- = f.number_field :project_download_export_limit, class: 'form-control'
+ = f.number_field :project_download_export_limit, class: 'form-control gl-form-input'
%fieldset
.form-group
= f.label :group_import_limit, _('Max Group Import requests per minute per user'), class: 'label-bold'
- = f.number_field :group_import_limit, class: 'form-control'
+ = f.number_field :group_import_limit, class: 'form-control gl-form-input'
%fieldset
.form-group
= f.label :group_export_limit, _('Max Group Export requests per minute per user'), class: 'label-bold'
- = f.number_field :group_export_limit, class: 'form-control'
+ = f.number_field :group_export_limit, class: 'form-control gl-form-input'
%fieldset
.form-group
= f.label :group_download_export_limit, _('Max Group Export Download requests per minute per user'), class: 'label-bold'
- = f.number_field :group_download_export_limit, class: 'form-control'
+ = f.number_field :group_download_export_limit, class: 'form-control gl-form-input'
= f.submit 'Save changes', class: "gl-button btn btn-success", data: { qa_selector: 'save_changes_button' }
diff --git a/app/views/admin/application_settings/_initial_branch_name.html.haml b/app/views/admin/application_settings/_initial_branch_name.html.haml
index bab841fcade..e7718f94b90 100644
--- a/app/views/admin/application_settings/_initial_branch_name.html.haml
+++ b/app/views/admin/application_settings/_initial_branch_name.html.haml
@@ -6,7 +6,7 @@
%fieldset
.form-group
= f.label :default_branch_name, _('Default initial branch name'), class: 'label-light'
- = f.text_field :default_branch_name, placeholder: 'master', class: 'form-control'
+ = f.text_field :default_branch_name, placeholder: 'master', class: 'form-control gl-form-input'
%span.form-text.text-muted
= (_("Changes affect new repositories only. If not specified, Git's default name %{branch_name_default} will be used.") % { branch_name_default: fallback_branch_name } ).html_safe
diff --git a/app/views/admin/application_settings/_ip_limits.html.haml b/app/views/admin/application_settings/_ip_limits.html.haml
index 11ffe3f56e3..a603eaec913 100644
--- a/app/views/admin/application_settings/_ip_limits.html.haml
+++ b/app/views/admin/application_settings/_ip_limits.html.haml
@@ -13,10 +13,10 @@
Helps reduce request volume (e.g. from crawlers or abusive bots)
.form-group
= f.label :throttle_unauthenticated_requests_per_period, 'Max unauthenticated requests per period per IP', class: 'label-bold'
- = f.number_field :throttle_unauthenticated_requests_per_period, class: 'form-control'
+ = f.number_field :throttle_unauthenticated_requests_per_period, class: 'form-control gl-form-input'
.form-group
= f.label :throttle_unauthenticated_period_in_seconds, 'Unauthenticated rate limit period in seconds', class: 'label-bold'
- = f.number_field :throttle_unauthenticated_period_in_seconds, class: 'form-control'
+ = f.number_field :throttle_unauthenticated_period_in_seconds, class: 'form-control gl-form-input'
%hr
%h5
= _('Authenticated API request rate limit')
@@ -29,10 +29,10 @@
Helps reduce request volume (e.g. from crawlers or abusive bots)
.form-group
= f.label :throttle_authenticated_api_requests_per_period, 'Max authenticated API requests per period per user', class: 'label-bold'
- = f.number_field :throttle_authenticated_api_requests_per_period, class: 'form-control'
+ = f.number_field :throttle_authenticated_api_requests_per_period, class: 'form-control gl-form-input'
.form-group
= f.label :throttle_authenticated_api_period_in_seconds, 'Authenticated API rate limit period in seconds', class: 'label-bold'
- = f.number_field :throttle_authenticated_api_period_in_seconds, class: 'form-control'
+ = f.number_field :throttle_authenticated_api_period_in_seconds, class: 'form-control gl-form-input'
%hr
%h5
= _('Authenticated web request rate limit')
@@ -45,16 +45,16 @@
Helps reduce request volume (e.g. from crawlers or abusive bots)
.form-group
= f.label :throttle_authenticated_web_requests_per_period, 'Max authenticated web requests per period per user', class: 'label-bold'
- = f.number_field :throttle_authenticated_web_requests_per_period, class: 'form-control'
+ = f.number_field :throttle_authenticated_web_requests_per_period, class: 'form-control gl-form-input'
.form-group
= f.label :throttle_authenticated_web_period_in_seconds, 'Authenticated web rate limit period in seconds', class: 'label-bold'
- = f.number_field :throttle_authenticated_web_period_in_seconds, class: 'form-control'
+ = f.number_field :throttle_authenticated_web_period_in_seconds, class: 'form-control gl-form-input'
%hr
%h5
= _('Response text')
.form-group
= f.label :rate_limiting_response_text, class: 'label-bold' do
= _('A plain-text response to show to clients that hit the rate limit.')
- = f.text_area :rate_limiting_response_text, placeholder: ::Gitlab::Throttle::DEFAULT_RATE_LIMITING_RESPONSE_TEXT, class: 'form-control', rows: 5
+ = f.text_area :rate_limiting_response_text, placeholder: ::Gitlab::Throttle::DEFAULT_RATE_LIMITING_RESPONSE_TEXT, class: 'form-control gl-form-input', rows: 5
= f.submit 'Save changes', class: "gl-button btn btn-success", data: { qa_selector: 'save_changes_button' }
diff --git a/app/views/admin/application_settings/_issue_limits.html.haml b/app/views/admin/application_settings/_issue_limits.html.haml
index 200ea3a8ec1..e16561b4489 100644
--- a/app/views/admin/application_settings/_issue_limits.html.haml
+++ b/app/views/admin/application_settings/_issue_limits.html.haml
@@ -4,6 +4,6 @@
%fieldset
.form-group
= f.label :issues_create_limit, 'Max requests per minute per user', class: 'label-bold'
- = f.number_field :issues_create_limit, class: 'form-control'
+ = f.number_field :issues_create_limit, class: 'form-control gl-form-input'
= f.submit 'Save changes', class: "gl-button btn btn-success", data: { qa_selector: 'save_changes_button' }
diff --git a/app/views/admin/application_settings/_kroki.html.haml b/app/views/admin/application_settings/_kroki.html.haml
index 1547b28c651..cd57d4cca65 100644
--- a/app/views/admin/application_settings/_kroki.html.haml
+++ b/app/views/admin/application_settings/_kroki.html.haml
@@ -18,8 +18,16 @@
= f.label :kroki_enabled, _('Enable Kroki'), class: 'form-check-label'
.form-group
= f.label :kroki_url, 'Kroki URL', class: 'label-bold'
- = f.text_field :kroki_url, class: 'form-control', placeholder: 'http://your-kroki-instance:8000'
+ = f.text_field :kroki_url, class: 'form-control gl-form-input', placeholder: 'http://your-kroki-instance:8000'
.form-text.text-muted
= (_('When Kroki is enabled, GitLab sends diagrams to an instance of Kroki to display them as images. You can use the free public cloud instance %{kroki_public_url} or you can %{install_link} on your own infrastructure. Once you\'ve installed Kroki, make sure to update the server URL to point to your instance.') % { kroki_public_url: '<code>https://kroki.io</code>', install_link: link_to('install Kroki', 'https://docs.kroki.io/kroki/setup/install/', target: '_blank') }).html_safe
+ .form-group
+ = f.label :kroki_formats, 'Additional diagram formats', class: 'label-bold'
+ .form-text.text-muted
+ = (_('Using additional formats requires starting the companion containers. Make sure that all %{kroki_images} are running.') % { kroki_images: link_to('required containers', 'https://docs.kroki.io/kroki/setup/install/#_images', target: '_blank') }).html_safe
+ - kroki_available_formats.each do |format|
+ .form-check
+ = f.check_box format[:name], class: 'form-check-input'
+ = f.label format[:name], format[:label], class: 'form-check-label'
= f.submit _('Save changes'), class: "btn gl-button btn-success"
diff --git a/app/views/admin/application_settings/_note_limits.html.haml b/app/views/admin/application_settings/_note_limits.html.haml
new file mode 100644
index 00000000000..9578da90170
--- /dev/null
+++ b/app/views/admin/application_settings/_note_limits.html.haml
@@ -0,0 +1,12 @@
+= form_for @application_setting, url: network_admin_application_settings_path(anchor: 'js-note-limits-settings'), html: { class: 'fieldset-form' } do |f|
+ = form_errors(@application_setting)
+
+ %fieldset
+ .form-group
+ = f.label :notes_create_limit, _('Max requests per minute per user'), class: 'label-bold'
+ = f.number_field :notes_create_limit, class: 'form-control gl-form-input'
+ .form-group
+ = f.label :notes_create_limit_allowlist, _('List of users to be excluded from the limit'), class: 'label-bold'
+ = f.text_area :notes_create_limit_allowlist_raw, placeholder: 'username1, username2', class: 'form-control gl-form-input', rows: 5
+
+ = f.submit _('Save changes'), class: "gl-button btn btn-success", data: { qa_selector: 'save_changes_button' }
diff --git a/app/views/admin/application_settings/_outbound.html.haml b/app/views/admin/application_settings/_outbound.html.haml
index db0a87c366e..694cc9deab6 100644
--- a/app/views/admin/application_settings/_outbound.html.haml
+++ b/app/views/admin/application_settings/_outbound.html.haml
@@ -15,7 +15,7 @@
.form-group
= f.label :outbound_local_requests_allowlist_raw, class: 'label-bold' do
= _('Local IP addresses and domain names that hooks and services may access.')
- = f.text_area :outbound_local_requests_allowlist_raw, placeholder: "example.com, 192.168.1.1", class: 'form-control', rows: 8
+ = f.text_area :outbound_local_requests_allowlist_raw, placeholder: "example.com, 192.168.1.1", class: 'form-control gl-form-input', rows: 8
%span.form-text.text-muted
= _('Requests to these domain(s)/address(es) on the local network will be allowed when local requests from hooks and services are not allowed. IP ranges such as 1:0:0:0:0:0:0:0/124 or 127.0.0.0/28 are supported. Domain wildcards are not supported currently. Use comma, semicolon, or newline to separate multiple entries. The allowlist can hold a maximum of 1000 entries. Domains should use IDNA encoding. Ex: example.com, 192.168.1.1, 127.0.0.0/28, xn--itlab-j1a.com.')
diff --git a/app/views/admin/application_settings/_package_registry.html.haml b/app/views/admin/application_settings/_package_registry.html.haml
index 8c956a43e22..86df1aa6e02 100644
--- a/app/views/admin/application_settings/_package_registry.html.haml
+++ b/app/views/admin/application_settings/_package_registry.html.haml
@@ -31,20 +31,20 @@
= f.hidden_field(:plan_id, value: plan.id)
.form-group
= f.label :conan_max_file_size, _('Maximum Conan package file size in bytes'), class: 'label-bold'
- = f.number_field :conan_max_file_size, class: 'form-control'
+ = f.number_field :conan_max_file_size, class: 'form-control gl-form-input'
.form-group
= f.label :maven_max_file_size, _('Maximum Maven package file size in bytes'), class: 'label-bold'
- = f.number_field :maven_max_file_size, class: 'form-control'
+ = f.number_field :maven_max_file_size, class: 'form-control gl-form-input'
.form-group
= f.label :npm_max_file_size, _('Maximum NPM package file size in bytes'), class: 'label-bold'
- = f.number_field :npm_max_file_size, class: 'form-control'
+ = f.number_field :npm_max_file_size, class: 'form-control gl-form-input'
.form-group
= f.label :nuget_max_file_size, _('Maximum NuGet package file size in bytes'), class: 'label-bold'
- = f.number_field :nuget_max_file_size, class: 'form-control'
+ = f.number_field :nuget_max_file_size, class: 'form-control gl-form-input'
.form-group
= f.label :pypi_max_file_size, _('Maximum PyPI package file size in bytes'), class: 'label-bold'
- = f.number_field :pypi_max_file_size, class: 'form-control'
+ = f.number_field :pypi_max_file_size, class: 'form-control gl-form-input'
.form-group
= f.label :generic_packages_max_file_size, _('Generic package file size in bytes'), class: 'label-bold'
- = f.number_field :generic_packages_max_file_size, class: 'form-control'
+ = f.number_field :generic_packages_max_file_size, class: 'form-control gl-form-input'
= f.submit _('Save %{name} size limits').html_safe % { name: plan.name.capitalize }, class: 'btn gl-button btn-success'
diff --git a/app/views/admin/application_settings/_pages.html.haml b/app/views/admin/application_settings/_pages.html.haml
index d42987eb7d8..503aae861d0 100644
--- a/app/views/admin/application_settings/_pages.html.haml
+++ b/app/views/admin/application_settings/_pages.html.haml
@@ -4,7 +4,7 @@
%fieldset
.form-group
= f.label :max_pages_size, 'Maximum size of pages (MB)', class: 'label-bold'
- = f.number_field :max_pages_size, class: 'form-control'
+ = f.number_field :max_pages_size, class: 'form-control gl-form-input'
.form-text.text-muted
= _("0 for unlimited")
.form-group
@@ -31,7 +31,7 @@
= _("%{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end} is a free, automated, and open certificate authority (CA), that give digital certificates in order to enable HTTPS (SSL/TLS) for websites.").html_safe % { lets_encrypt_link_start: lets_encrypt_link_start, lets_encrypt_link_end: '</a>'.html_safe }
.form-group
= f.label :lets_encrypt_notification_email, _("Email"), class: 'label-bold'
- = f.text_field :lets_encrypt_notification_email, class: 'form-control'
+ = f.text_field :lets_encrypt_notification_email, class: 'form-control gl-form-input'
.form-text.text-muted
= _("A Let's Encrypt account will be configured for this GitLab installation using your email address. You will receive emails to warn of expiring certificates.")
.form-group
diff --git a/app/views/admin/application_settings/_performance.html.haml b/app/views/admin/application_settings/_performance.html.haml
index 2d27bceef10..3efe163de7b 100644
--- a/app/views/admin/application_settings/_performance.html.haml
+++ b/app/views/admin/application_settings/_performance.html.haml
@@ -17,17 +17,17 @@
.form-group
= f.label :raw_blob_request_limit, _('Raw blob request rate limit per minute'), class: 'label-bold'
- = f.number_field :raw_blob_request_limit, class: 'form-control'
+ = f.number_field :raw_blob_request_limit, class: 'form-control gl-form-input'
.form-text.text-muted
= _('Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0.')
.form-group
= f.label :push_event_hooks_limit, class: 'label-bold'
- = f.number_field :push_event_hooks_limit, class: 'form-control'
+ = f.number_field :push_event_hooks_limit, class: 'form-control gl-form-input'
.form-text.text-muted
= _("Number of changes (branches or tags) in a single push to determine whether webhooks and services will be fired or not. Webhooks and services won't be submitted if it surpasses that value.")
.form-group
= f.label :push_event_activities_limit, class: 'label-bold'
- = f.number_field :push_event_activities_limit, class: 'form-control'
+ = f.number_field :push_event_activities_limit, class: 'form-control gl-form-input'
.form-text.text-muted
= _('Number of changes (branches or tags) in a single push to determine whether individual push events or bulk push event will be created. Bulk push event will be created if it surpasses that value.')
diff --git a/app/views/admin/application_settings/_performance_bar.html.haml b/app/views/admin/application_settings/_performance_bar.html.haml
index 1036cc94bd0..2db22552596 100644
--- a/app/views/admin/application_settings/_performance_bar.html.haml
+++ b/app/views/admin/application_settings/_performance_bar.html.haml
@@ -9,6 +9,6 @@
Enable access to the Performance Bar
.form-group
= f.label :performance_bar_allowed_group_path, 'Allowed group', class: 'label-bold'
- = f.text_field :performance_bar_allowed_group_path, class: 'form-control', placeholder: 'my-org/my-group', value: @application_setting.performance_bar_allowed_group&.full_path
+ = f.text_field :performance_bar_allowed_group_path, class: 'form-control gl-form-input', placeholder: 'my-org/my-group', value: @application_setting.performance_bar_allowed_group&.full_path
= f.submit 'Save changes', class: 'gl-button btn btn-success qa-save-changes-button'
diff --git a/app/views/admin/application_settings/_plantuml.html.haml b/app/views/admin/application_settings/_plantuml.html.haml
index 77a310c73a8..93fcc90f044 100644
--- a/app/views/admin/application_settings/_plantuml.html.haml
+++ b/app/views/admin/application_settings/_plantuml.html.haml
@@ -18,7 +18,7 @@
= f.label :plantuml_enabled, _('Enable PlantUML'), class: 'form-check-label'
.form-group
= f.label :plantuml_url, 'PlantUML URL', class: 'label-bold'
- = f.text_field :plantuml_url, class: 'form-control', placeholder: 'http://your-plantuml-instance:8080'
+ = f.text_field :plantuml_url, class: 'form-control gl-form-input', placeholder: 'http://your-plantuml-instance:8080'
.form-text.text-muted
Allow rendering of
= link_to "PlantUML", "http://plantuml.com"
diff --git a/app/views/admin/application_settings/_prometheus.html.haml b/app/views/admin/application_settings/_prometheus.html.haml
index c571ec1c1b0..c394bc65046 100644
--- a/app/views/admin/application_settings/_prometheus.html.haml
+++ b/app/views/admin/application_settings/_prometheus.html.haml
@@ -25,7 +25,7 @@
= link_to sprite_icon('question-o'), help_page_path('administration/monitoring/prometheus/gitlab_metrics', anchor: 'metrics-shared-directory')
.form-group
= f.label :metrics_method_call_threshold, 'Method Call Threshold (ms)', class: 'label-bold'
- = f.number_field :metrics_method_call_threshold, class: 'form-control'
+ = f.number_field :metrics_method_call_threshold, class: 'form-control gl-form-input'
.form-text.text-muted
A method call is only tracked when it takes longer to complete than
the given amount of milliseconds.
diff --git a/app/views/admin/application_settings/_protected_paths.html.haml b/app/views/admin/application_settings/_protected_paths.html.haml
index fce64369f17..57bba4f970a 100644
--- a/app/views/admin/application_settings/_protected_paths.html.haml
+++ b/app/views/admin/application_settings/_protected_paths.html.haml
@@ -17,15 +17,15 @@
= _('Helps reduce request volume for protected paths')
.form-group
= f.label :throttle_protected_paths_requests_per_period, 'Max requests per period per user', class: 'label-bold'
- = f.number_field :throttle_protected_paths_requests_per_period, class: 'form-control'
+ = f.number_field :throttle_protected_paths_requests_per_period, class: 'form-control gl-form-input'
.form-group
= f.label :throttle_protected_paths_period_in_seconds, 'Rate limit period in seconds', class: 'label-bold'
- = f.number_field :throttle_protected_paths_period_in_seconds, class: 'form-control'
+ = f.number_field :throttle_protected_paths_period_in_seconds, class: 'form-control gl-form-input'
.form-group
= f.label :protected_paths, class: 'label-bold' do
- relative_url_link = 'https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-a-relative-url-for-gitlab'
- relative_url_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: relative_url_link }
= _('All paths are relative to the GitLab URL. Do not include %{relative_url_link_start}relative URL%{relative_url_link_end}.').html_safe % { relative_url_link_start: relative_url_link_start, relative_url_link_end: '</a>'.html_safe }
- = f.text_area :protected_paths_raw, placeholder: '/users/sign_in,/users/password', class: 'form-control', rows: 10
+ = f.text_area :protected_paths_raw, placeholder: '/users/sign_in,/users/password', class: 'form-control gl-form-input', rows: 10
= f.submit 'Save changes', class: 'gl-button btn btn-success'
diff --git a/app/views/admin/application_settings/_realtime.html.haml b/app/views/admin/application_settings/_realtime.html.haml
index cf0b2b53eff..2b54a15d615 100644
--- a/app/views/admin/application_settings/_realtime.html.haml
+++ b/app/views/admin/application_settings/_realtime.html.haml
@@ -4,7 +4,7 @@
%fieldset
.form-group
= f.label :polling_interval_multiplier, 'Polling interval multiplier', class: 'label-bold'
- = f.text_field :polling_interval_multiplier, class: 'form-control'
+ = f.text_field :polling_interval_multiplier, class: 'form-control gl-form-input'
.form-text.text-muted
Change this value to influence how frequently the GitLab UI polls for updates.
If you set the value to 2 all polling intervals are multiplied
diff --git a/app/views/admin/application_settings/_registry.html.haml b/app/views/admin/application_settings/_registry.html.haml
index dd64d0ae419..5fb5effaa55 100644
--- a/app/views/admin/application_settings/_registry.html.haml
+++ b/app/views/admin/application_settings/_registry.html.haml
@@ -4,7 +4,7 @@
%fieldset
.form-group
= f.label :container_registry_token_expire_delay, 'Authorization token duration (minutes)', class: 'label-bold'
- = f.number_field :container_registry_token_expire_delay, class: 'form-control'
+ = f.number_field :container_registry_token_expire_delay, class: 'form-control gl-form-input'
.form-group
.form-check
= f.check_box :container_expiration_policies_enable_historic_entries, class: 'form-check-input'
@@ -14,11 +14,21 @@
.form-text.text-muted
= _("Existing projects will be able to use expiration policies. Avoid enabling this if an external Container Registry is being used, as there is a performance risk if many images exist on one project.")
= link_to sprite_icon('question-o'), help_page_path('user/packages/container_registry/index', anchor: 'use-with-external-container-registries')
- - if limit_delete_tags_service?
+ - if container_registry_expiration_policies_throttling?
.form-group
= f.label :container_registry_delete_tags_service_timeout, _('Cleanup policy maximum processing time (seconds)'), class: 'label-bold'
- = f.number_field :container_registry_delete_tags_service_timeout, min: 0, class: 'form-control'
+ = f.number_field :container_registry_delete_tags_service_timeout, min: 0, class: 'form-control gl-form-input'
.form-text.text-muted
= _("Tags are deleted until the timeout is reached. Any remaining tags are included the next time the policy runs. To remove the time limit, set it to 0.")
+ .form-group
+ = f.label :container_registry_expiration_policies_worker_capacity, _('Cleanup policy maximum workers running concurrently'), class: 'label-bold'
+ = f.number_field :container_registry_expiration_policies_worker_capacity, min: 0, class: 'form-control'
+ .form-text.text-muted
+ = _("Cleanup policies are executed by background workers. This setting defines the maximum number of workers that can run concurrently. Set it to 0 to remove all workers and not execute the cleanup policies.")
+ .form-group
+ = f.label :container_registry_cleanup_tags_service_max_list_size, _('Cleanup policy maximum number of tags to be deleted'), class: 'label-bold'
+ = f.number_field :container_registry_cleanup_tags_service_max_list_size, min: 0, class: 'form-control'
+ .form-text.text-muted
+ = _("The maximum number of tags that a single worker accepts for cleanup. If the number of tags goes above this limit, the list of tags to delete is truncated to this number. To remove this limit, set it to 0.")
= f.submit 'Save changes', class: "gl-button btn btn-success"
diff --git a/app/views/admin/application_settings/_repository_check.html.haml b/app/views/admin/application_settings/_repository_check.html.haml
index b9c2e406b78..24e74dd0f1b 100644
--- a/app/views/admin/application_settings/_repository_check.html.haml
+++ b/app/views/admin/application_settings/_repository_check.html.haml
@@ -41,17 +41,17 @@
bitmaps should accelerate 'git clone' performance.
.form-group
= f.label :housekeeping_incremental_repack_period, 'Incremental repack period', class: 'label-bold'
- = f.number_field :housekeeping_incremental_repack_period, class: 'form-control'
+ = f.number_field :housekeeping_incremental_repack_period, class: 'form-control gl-form-input'
.form-text.text-muted
Number of Git pushes after which an incremental 'git repack' is run.
.form-group
= f.label :housekeeping_full_repack_period, 'Full repack period', class: 'label-bold'
- = f.number_field :housekeeping_full_repack_period, class: 'form-control'
+ = f.number_field :housekeeping_full_repack_period, class: 'form-control gl-form-input'
.form-text.text-muted
Number of Git pushes after which a full 'git repack' is run.
.form-group
= f.label :housekeeping_gc_period, 'Git GC period', class: 'label-bold'
- = f.number_field :housekeeping_gc_period, class: 'form-control'
+ = f.number_field :housekeeping_gc_period, class: 'form-control gl-form-input'
.form-text.text-muted
Number of Git pushes after which 'git gc' is run.
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 00b9b4b8964..42fe2b24bb2 100644
--- a/app/views/admin/application_settings/_repository_static_objects.html.haml
+++ b/app/views/admin/application_settings/_repository_static_objects.html.haml
@@ -5,13 +5,13 @@
.form-group
= f.label :static_objects_external_storage_url, class: 'label-bold' do
= _('External storage URL')
- = f.text_field :static_objects_external_storage_url, class: 'form-control'
+ = f.text_field :static_objects_external_storage_url, class: 'form-control gl-form-input'
%span.form-text.text-muted#static_objects_external_storage_url_help_block
= _('URL of the external storage that will serve the repository static objects (e.g. archives, blobs, ...).')
.form-group
= f.label :static_objects_external_storage_auth_token, class: 'label-bold' do
= _('External storage authentication token')
- = f.text_field :static_objects_external_storage_auth_token, class: 'form-control'
+ = f.text_field :static_objects_external_storage_auth_token, class: 'form-control gl-form-input'
%span.form-text.text-muted#static_objects_external_storage_auth_token_help_block
= _('A secure token that identifies an external storage request.')
diff --git a/app/views/admin/application_settings/_signin.html.haml b/app/views/admin/application_settings/_signin.html.haml
index 66fd0087c3e..23a7856e483 100644
--- a/app/views/admin/application_settings/_signin.html.haml
+++ b/app/views/admin/application_settings/_signin.html.haml
@@ -43,18 +43,18 @@
target: '_blank'
.form-group
= f.label :two_factor_authentication, 'Two-factor grace period (hours)', class: 'label-bold'
- = f.number_field :two_factor_grace_period, min: 0, class: 'form-control', placeholder: '0'
+ = f.number_field :two_factor_grace_period, min: 0, class: 'form-control gl-form-input', placeholder: '0'
.form-text.text-muted Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication
.form-group
= f.label :home_page_url, 'Home page URL', class: 'label-bold'
- = f.text_field :home_page_url, class: 'form-control', placeholder: 'http://company.example.com', :'aria-describedby' => 'home_help_block'
+ = f.text_field :home_page_url, class: 'form-control gl-form-input', placeholder: 'http://company.example.com', :'aria-describedby' => 'home_help_block'
%span.form-text.text-muted#home_help_block We will redirect non-logged in users to this page
.form-group
= f.label :after_sign_out_path, _('After sign-out path'), class: 'label-bold'
- = f.text_field :after_sign_out_path, class: 'form-control', placeholder: 'http://company.example.com', :'aria-describedby' => 'after_sign_out_path_help_block'
+ = f.text_field :after_sign_out_path, class: 'form-control gl-form-input', placeholder: 'http://company.example.com', :'aria-describedby' => 'after_sign_out_path_help_block'
%span.form-text.text-muted#after_sign_out_path_help_block We will redirect users to this page after they sign out
.form-group
= f.label :sign_in_text, _('Sign-in text'), class: 'label-bold'
- = f.text_area :sign_in_text, class: 'form-control', rows: 4
+ = f.text_area :sign_in_text, class: 'form-control gl-form-input', rows: 4
.form-text.text-muted Markdown enabled
= f.submit 'Save changes', class: "gl-button btn btn-success"
diff --git a/app/views/admin/application_settings/_signup.html.haml b/app/views/admin/application_settings/_signup.html.haml
index 92477dff3d8..82824f1d436 100644
--- a/app/views/admin/application_settings/_signup.html.haml
+++ b/app/views/admin/application_settings/_signup.html.haml
@@ -26,13 +26,13 @@
.form-group
= f.label :minimum_password_length, _('Minimum password length (number of characters)'), class: 'label-bold'
- = f.number_field :minimum_password_length, class: 'form-control', rows: 4, min: ApplicationSetting::DEFAULT_MINIMUM_PASSWORD_LENGTH, max: Devise.password_length.max
+ = f.number_field :minimum_password_length, class: 'form-control gl-form-input', rows: 4, min: ApplicationSetting::DEFAULT_MINIMUM_PASSWORD_LENGTH, max: Devise.password_length.max
- password_policy_guidelines_link = link_to _('Password Policy Guidelines'), 'https://about.gitlab.com/handbook/security/#gitlab-password-policy-guidelines', target: '_blank', rel: 'noopener noreferrer nofollow'
.form-text.text-muted
= _("See GitLab's %{password_policy_guidelines}").html_safe % { password_policy_guidelines: password_policy_guidelines_link }
.form-group
= f.label :domain_allowlist, _('Allowed domains for sign-ups'), class: 'label-bold'
- = f.text_area :domain_allowlist_raw, placeholder: 'domain.com', class: 'form-control', rows: 8
+ = f.text_area :domain_allowlist_raw, placeholder: 'domain.com', class: 'form-control gl-form-input', rows: 8
.form-text.text-muted ONLY users with e-mail addresses that match these domain(s) will be able to sign-up. Wildcards allowed. Use separate lines for multiple entries. Ex: domain.com, *.domain.com
.form-group
= f.label :domain_denylist_enabled, _('Domain denylist'), class: 'label-bold'
@@ -53,11 +53,11 @@
Enter denylist manually
.form-group.js-denylist-file
= f.label :domain_denylist_file, _('Denylist file'), class: 'label-bold'
- = f.file_field :domain_denylist_file, class: 'form-control', accept: '.txt,.conf'
+ = f.file_field :domain_denylist_file, class: 'form-control gl-form-input', accept: '.txt,.conf'
.form-text.text-muted Users with e-mail addresses that match these domain(s) will NOT be able to sign-up. Wildcards allowed. Use separate lines or commas for multiple entries.
.form-group.js-denylist-raw
= f.label :domain_denylist, _('Denied domains for sign-ups'), class: 'label-bold'
- = f.text_area :domain_denylist_raw, placeholder: 'domain.com', class: 'form-control', rows: 8
+ = f.text_area :domain_denylist_raw, placeholder: 'domain.com', class: 'form-control gl-form-input', rows: 8
.form-text.text-muted Users with e-mail addresses that match these domain(s) will NOT be able to sign-up. Wildcards allowed. Use separate lines for multiple entries. Ex: domain.com, *.domain.com
.form-group
= f.label :email_restrictions_enabled, _('Email restrictions'), class: 'label-bold'
@@ -67,7 +67,7 @@
= _('Enable email restrictions for sign ups')
.form-group
= f.label :email_restrictions, _('Email restrictions for sign-ups'), class: 'label-bold'
- = f.text_area :email_restrictions, class: 'form-control', rows: 4
+ = f.text_area :email_restrictions, class: 'form-control gl-form-input', rows: 4
.form-text.text-muted
- supported_syntax_link_url = 'https://github.com/google/re2/wiki/Syntax'
- supported_syntax_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: supported_syntax_link_url }
@@ -75,6 +75,6 @@
.form-group
= f.label :after_sign_up_text, class: 'label-bold'
- = f.text_area :after_sign_up_text, class: 'form-control', rows: 4
+ = f.text_area :after_sign_up_text, class: 'form-control gl-form-input', rows: 4
.form-text.text-muted Markdown enabled
= f.submit 'Save changes', class: "gl-button btn btn-success", data: { qa_selector: 'save_changes_button' }
diff --git a/app/views/admin/application_settings/_snowplow.html.haml b/app/views/admin/application_settings/_snowplow.html.haml
index c1edaf9ff29..5f5a3a6992c 100644
--- a/app/views/admin/application_settings/_snowplow.html.haml
+++ b/app/views/admin/application_settings/_snowplow.html.haml
@@ -18,12 +18,12 @@
= f.label :snowplow_enabled, _('Enable snowplow tracking'), class: 'form-check-label'
.form-group
= f.label :snowplow_collector_hostname, _('Collector hostname'), class: 'label-light'
- = f.text_field :snowplow_collector_hostname, class: 'form-control', placeholder: 'snowplow.example.com'
+ = f.text_field :snowplow_collector_hostname, class: 'form-control gl-form-input', placeholder: 'snowplow.example.com'
.form-group
= f.label :snowplow_app_id, _('App ID'), class: 'label-light'
- = f.text_field :snowplow_app_id, class: 'form-control'
+ = f.text_field :snowplow_app_id, class: 'form-control gl-form-input'
.form-group
= f.label :snowplow_cookie_domain, _('Cookie domain'), class: 'label-light'
- = f.text_field :snowplow_cookie_domain, class: 'form-control'
+ = f.text_field :snowplow_cookie_domain, class: 'form-control gl-form-input'
= f.submit _('Save changes'), class: 'gl-button btn btn-success'
diff --git a/app/views/admin/application_settings/_sourcegraph.html.haml b/app/views/admin/application_settings/_sourcegraph.html.haml
index 2a4e8f87c31..e1af269c6fd 100644
--- a/app/views/admin/application_settings/_sourcegraph.html.haml
+++ b/app/views/admin/application_settings/_sourcegraph.html.haml
@@ -32,7 +32,7 @@
= s_('SourcegraphAdmin|If checked, only public projects will have code intelligence and communicate with Sourcegraph.')
.form-group
= f.label :sourcegraph_url, s_('SourcegraphAdmin|Sourcegraph URL'), class: 'label-bold'
- = f.text_field :sourcegraph_url, class: 'form-control', placeholder: s_('SourcegraphAdmin|e.g. https://sourcegraph.example.com')
+ = f.text_field :sourcegraph_url, class: 'form-control gl-form-input', placeholder: s_('SourcegraphAdmin|e.g. https://sourcegraph.example.com')
.form-text.text-muted
= s_('SourcegraphAdmin|Configure the URL to a Sourcegraph instance which can read your GitLab projects.')
= f.submit s_('SourcegraphAdmin|Save changes'), class: 'gl-button btn btn-success'
diff --git a/app/views/admin/application_settings/_spam.html.haml b/app/views/admin/application_settings/_spam.html.haml
index 2b871d3693c..6085cea4f5d 100644
--- a/app/views/admin/application_settings/_spam.html.haml
+++ b/app/views/admin/application_settings/_spam.html.haml
@@ -18,7 +18,7 @@
= _('Helps prevent bots from brute-force attacks.')
.form-group
= f.label :recaptcha_site_key, 'reCAPTCHA Site Key', class: 'label-bold'
- = f.text_field :recaptcha_site_key, class: 'form-control'
+ = f.text_field :recaptcha_site_key, class: 'form-control gl-form-input'
.form-text.text-muted
Generate site and private keys at
%a{ href: 'http://www.google.com/recaptcha', target: 'blank' } http://www.google.com/recaptcha
@@ -26,7 +26,7 @@
.form-group
= f.label :recaptcha_private_key, 'reCAPTCHA Private Key', class: 'label-bold'
.form-group
- = f.text_field :recaptcha_private_key, class: 'form-control'
+ = f.text_field :recaptcha_private_key, class: 'form-control gl-form-input'
.form-group
.form-check
@@ -45,7 +45,7 @@
.form-group
= f.label :akismet_api_key, 'Akismet API Key', class: 'label-bold'
- = f.text_field :akismet_api_key, class: 'form-control'
+ = f.text_field :akismet_api_key, class: 'form-control gl-form-input'
.form-text.text-muted
Generate API key at
%a{ href: 'http://www.akismet.com', target: 'blank' } http://www.akismet.com
@@ -60,13 +60,13 @@
.form-group
= f.label :unique_ips_limit_per_user, 'IPs per user', class: 'label-bold'
- = f.number_field :unique_ips_limit_per_user, class: 'form-control'
+ = f.number_field :unique_ips_limit_per_user, class: 'form-control gl-form-input'
.form-text.text-muted
Maximum number of unique IPs per user
.form-group
= f.label :unique_ips_limit_time_window, 'IP expiration time', class: 'label-bold'
- = f.number_field :unique_ips_limit_time_window, class: 'form-control'
+ = f.number_field :unique_ips_limit_time_window, class: 'form-control gl-form-input'
.form-text.text-muted
How many seconds an IP will be counted towards the limit
@@ -77,6 +77,6 @@
.form-text.text-muted= _('Define custom rules for what constitutes spam, independent of Akismet')
.form-group
= f.label :spam_check_endpoint_url, _('URL of the external Spam Check endpoint'), class: 'label-bold'
- = f.text_field :spam_check_endpoint_url, class: 'form-control'
+ = f.text_field :spam_check_endpoint_url, class: 'form-control gl-form-input'
= f.submit 'Save changes', class: "gl-button btn btn-success"
diff --git a/app/views/admin/application_settings/_terminal.html.haml b/app/views/admin/application_settings/_terminal.html.haml
index 7bc5b2405e8..8f89cf27291 100644
--- a/app/views/admin/application_settings/_terminal.html.haml
+++ b/app/views/admin/application_settings/_terminal.html.haml
@@ -4,7 +4,7 @@
%fieldset
.form-group
= f.label :terminal_max_session_time, 'Max session time', class: 'label-bold'
- = f.number_field :terminal_max_session_time, class: 'form-control'
+ = f.number_field :terminal_max_session_time, class: 'form-control gl-form-input'
.form-text.text-muted
Maximum time for web terminal websocket connection (in seconds).
0 for unlimited.
diff --git a/app/views/admin/application_settings/_terms.html.haml b/app/views/admin/application_settings/_terms.html.haml
index 10db1e23d7b..717b2220336 100644
--- a/app/views/admin/application_settings/_terms.html.haml
+++ b/app/views/admin/application_settings/_terms.html.haml
@@ -12,7 +12,7 @@
.form-group
= f.label :terms do
= _("Terms of Service Agreement and Privacy Policy")
- = f.text_area :terms, class: 'form-control', rows: 8
+ = f.text_area :terms, class: 'form-control gl-form-input', rows: 8
.form-text.text-muted
= _("Markdown enabled")
= f.submit _("Save changes"), class: "gl-button btn btn-success"
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 709ce497132..0931ba50aa7 100644
--- a/app/views/admin/application_settings/_visibility_and_access.html.haml
+++ b/app/views/admin/application_settings/_visibility_and_access.html.haml
@@ -35,11 +35,11 @@
.form-check= source
%span.form-text.text-muted#import-sources-help
= _('Enabled sources for code import during project creation. OmniAuth must be configured for GitHub')
- = link_to "(?)", help_page_path("integration/github")
+ = link_to sprite_icon('question-o'), help_page_path("integration/github")
, Bitbucket
- = link_to "(?)", help_page_path("integration/bitbucket")
+ = link_to sprite_icon('question-o'), help_page_path("integration/bitbucket")
and GitLab.com
- = link_to "(?)", help_page_path("integration/gitlab")
+ = link_to sprite_icon('question-o'), help_page_path("integration/gitlab")
= render_if_exists 'admin/application_settings/ldap_access_setting', form: f
@@ -57,7 +57,7 @@
.form-group
= f.label :custom_http_clone_url_root, _('Custom Git clone URL for HTTP(S)'), class: 'label-bold'
- = f.text_field :custom_http_clone_url_root, class: 'form-control', placeholder: 'https://git.example.com', :'aria-describedby' => 'custom_http_clone_url_root_help_block'
+ = f.text_field :custom_http_clone_url_root, class: 'form-control gl-form-input', placeholder: 'https://git.example.com', :'aria-describedby' => 'custom_http_clone_url_root_help_block'
%span.form-text.text-muted#custom_http_clone_url_root_help_block
= _('Replaces the clone URL root.')
diff --git a/app/views/admin/application_settings/ci/_header.html.haml b/app/views/admin/application_settings/ci/_header.html.haml
index 0a0f8aaf032..aa4cebdb603 100644
--- a/app/views/admin/application_settings/ci/_header.html.haml
+++ b/app/views/admin/application_settings/ci/_header.html.haml
@@ -2,19 +2,18 @@
%h4
= _('Variables')
- = link_to sprite_icon('question-o', css_class: 'gl-vertical-align-baseline!'), help_page_path('ci/variables/README', anchor: 'custom-environment-variables'), target: '_blank', rel: 'noopener noreferrer'
%button.btn.gl-button.btn-default.js-settings-toggle{ type: 'button' }
= expanded ? _('Collapse') : _('Expand')
%p
- = html_escape(_('Environment variables are applied to environments via the Runner. You can use environment variables for passwords, secret keys, etc. Make variables available to the running application by prepending the variable key with %{code_open}K8S_SECRET_%{code_close}. You can set variables to be:')) % { code_open: '<code>'.html_safe, code_close: '</code>'.html_safe }
-
+ = _('Variables store information, like passwords and secret keys, that you can use in job scripts. All projects on the instance can use these variables.')
+ = link_to s_('Learn more.'), help_page_path('ci/variables/README', anchor: 'instance-level-cicd-variables'), target: '_blank', rel: 'noopener noreferrer'
+%p
+ = _('Variables can be:')
%ul
%li
- = html_escape(_('%{code_open}Protected%{code_close} variables are only exposed to protected branches or tags.')) % { code_open: '<code>'.html_safe, code_close: '</code>'.html_safe }
+ = html_escape(_('%{code_open}Protected:%{code_close} Only exposed to protected branches or tags.')) % { code_open: '<code>'.html_safe, code_close: '</code>'.html_safe }
%li
- = html_escape(_('%{code_open}Masked%{code_close} variables are hidden in job logs (though they must match certain regexp requirements to do so).')) % { code_open: '<code>'.html_safe, code_close: '</code>'.html_safe }
-
-%p
- = link_to _('More information'), help_page_path('ci/variables/README', anchor: 'instance-level-cicd-environment-variables')
+ = html_escape(_('%{code_open}Masked:%{code_close} Hidden in job logs. Must match masking requirements.')) % { code_open: '<code>'.html_safe, code_close: '</code>'.html_safe }
+ = link_to _('Learn more.'), help_page_path('ci/variables/README', anchor: 'masked-variable-requirements'), target: '_blank', rel: 'noopener noreferrer'
diff --git a/app/views/admin/application_settings/ci_cd.html.haml b/app/views/admin/application_settings/ci_cd.html.haml
index b05e8621d07..485fb71d111 100644
--- a/app/views/admin/application_settings/ci_cd.html.haml
+++ b/app/views/admin/application_settings/ci_cd.html.haml
@@ -10,7 +10,7 @@
- if ci_variable_protected_by_default?
%p.settings-message.text-center
- link_start = '<a href="%{url}">'.html_safe % { url: help_page_path('ci/variables/README', anchor: 'protect-a-custom-variable') }
- = s_('Environment variables on this GitLab instance are configured to be %{link_start}protected%{link_end} by default').html_safe % { link_start: link_start, link_end: '</a>'.html_safe }
+ = s_('Environment variables on this GitLab instance are configured to be %{link_start}protected%{link_end} by default.').html_safe % { link_start: link_start, link_end: '</a>'.html_safe }
#js-instance-variables{ data: { endpoint: admin_ci_variables_path, group: 'true', maskable_regex: ci_variable_maskable_regex, protected_by_default: ci_variable_protected_by_default?.to_s} }
%section.settings.as-ci-cd.no-animate#js-ci-cd-settings{ class: ('expanded' if expanded_by_default?) }
diff --git a/app/views/admin/application_settings/general.html.haml b/app/views/admin/application_settings/general.html.haml
index 8f15dcac40a..794e02787f5 100644
--- a/app/views/admin/application_settings/general.html.haml
+++ b/app/views/admin/application_settings/general.html.haml
@@ -104,7 +104,6 @@
= f.submit _('Save changes'), class: "gl-button btn btn-success"
= render_if_exists 'admin/application_settings/maintenance_mode_settings_form'
-= render_if_exists 'admin/application_settings/elasticsearch_form'
= render 'admin/application_settings/gitpod'
= render 'admin/application_settings/kroki'
= render 'admin/application_settings/plantuml'
diff --git a/app/views/admin/application_settings/integrations.html.haml b/app/views/admin/application_settings/integrations.html.haml
index ed4f63d0b82..949908b09a7 100644
--- a/app/views/admin/application_settings/integrations.html.haml
+++ b/app/views/admin/application_settings/integrations.html.haml
@@ -9,9 +9,9 @@
= sprite_icon('close', css_class: 'gl-icon')
.gl-alert-body
%h4.gl-alert-title= s_('AdminSettings|Some settings have moved')
- = html_escape_once(s_('AdminSettings|Elasticsearch, PlantUML, Slack application, Third party offers, Snowplow, Amazon EKS have moved to Settings &gt; General.')).html_safe
+ = html_escape_once(s_('AdminSettings|PlantUML, Slack application, Third party offers, Snowplow, Amazon EKS have moved to Settings &gt; General.')).html_safe
.gl-alert-actions
- = link_to s_('AdminSettings|Go to General Settings'), general_admin_application_settings_path, class: 'btn gl-alert-action btn-info new-gl-button'
+ = link_to s_('AdminSettings|Go to General Settings'), general_admin_application_settings_path, class: 'btn gl-alert-action btn-info gl-button'
%h4= s_('AdminSettings|Apply integration settings to all Projects')
%p
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 4959e596148..113ff20e910 100644
--- a/app/views/admin/application_settings/metrics_and_profiling.html.haml
+++ b/app/views/admin/application_settings/metrics_and_profiling.html.haml
@@ -1,3 +1,5 @@
+- add_page_specific_style 'page_bundles/admin/application_settings_metrics_and_profiling'
+
- breadcrumb_title _("Metrics and profiling")
- page_title _("Metrics and profiling")
- @content_class = "limit-container-width" unless fluid_layout
diff --git a/app/views/admin/application_settings/network.html.haml b/app/views/admin/application_settings/network.html.haml
index f977a8c93fa..72716e76013 100644
--- a/app/views/admin/application_settings/network.html.haml
+++ b/app/views/admin/application_settings/network.html.haml
@@ -61,6 +61,17 @@
.settings-content
= render 'issue_limits'
+%section.settings.as-note-limits.no-animate#js-note-limits-settings{ class: ('expanded' if expanded_by_default?) }
+ .settings-header
+ %h4
+ = _('Notes Rate Limits')
+ %button.btn.gl-button.btn-default.js-settings-toggle{ type: 'button' }
+ = expanded_by_default? ? _('Collapse') : _('Expand')
+ %p
+ = _('Configure limit for notes created per minute by web and API requests.')
+ .settings-content
+ = render 'note_limits'
+
%section.settings.as-import-export-limits.no-animate#js-import-export-limits-settings{ class: ('expanded' if expanded_by_default?) }
.settings-header
%h4
diff --git a/app/views/admin/application_settings/preferences.html.haml b/app/views/admin/application_settings/preferences.html.haml
index 787760516ce..fd5ce890648 100644
--- a/app/views/admin/application_settings/preferences.html.haml
+++ b/app/views/admin/application_settings/preferences.html.haml
@@ -6,7 +6,7 @@
.settings-header
%h4
= _('Email')
- %button.btn.btn-default.js-settings-toggle{ type: 'button' }
+ %button.btn.gl-button.btn-default.js-settings-toggle{ type: 'button' }
= expanded_by_default? ? _('Collapse') : _('Expand')
%p
= _('Various email settings.')
@@ -17,7 +17,7 @@
.settings-header
%h4
= _('Help page')
- %button.btn.btn-default.js-settings-toggle{ type: 'button' }
+ %button.btn.gl-button.btn-default.js-settings-toggle{ type: 'button' }
= expanded_by_default? ? _('Collapse') : _('Expand')
%p
= _('Help page text and support page url.')
@@ -28,7 +28,7 @@
.settings-header
%h4
= _('Pages')
- %button.btn.btn-default.js-settings-toggle{ type: 'button' }
+ %button.btn.gl-button.btn-default.js-settings-toggle{ type: 'button' }
= expanded_by_default? ? _('Collapse') : _('Expand')
%p
= _('Size and domain settings for static websites')
@@ -39,7 +39,7 @@
.settings-header
%h4
= _('Real-time features')
- %button.btn.btn-default.js-settings-toggle{ type: 'button' }
+ %button.btn.gl-button.btn-default.js-settings-toggle{ type: 'button' }
= expanded_by_default? ? _('Collapse') : _('Expand')
%p
= _('Change this value to influence how frequently the GitLab UI polls for updates.')
@@ -50,7 +50,7 @@
.settings-header
%h4
= _('Gitaly')
- %button.btn.btn-default.js-settings-toggle{ type: 'button' }
+ %button.btn.gl-button.btn-default.js-settings-toggle{ type: 'button' }
= expanded_by_default? ? _('Collapse') : _('Expand')
%p
= _('Configure Gitaly timeouts.')
@@ -61,7 +61,7 @@
.settings-header
%h4
= _('Localization')
- %button.btn.btn-default.js-settings-toggle{ type: 'button' }
+ %button.btn.gl-button.btn-default.js-settings-toggle{ type: 'button' }
= expanded_by_default? ? _('Collapse') : _('Expand')
%p
= _('Various localization settings.')
diff --git a/app/views/admin/application_settings/reporting.html.haml b/app/views/admin/application_settings/reporting.html.haml
index 6ea139844d4..914a09ff5db 100644
--- a/app/views/admin/application_settings/reporting.html.haml
+++ b/app/views/admin/application_settings/reporting.html.haml
@@ -6,7 +6,7 @@
.settings-header
%h4
= _('Spam and Anti-bot Protection')
- %button.btn.btn-default.js-settings-toggle{ type: 'button' }
+ %button.btn.gl-button.btn-default.js-settings-toggle{ type: 'button' }
= expanded_by_default? ? _('Collapse') : _('Expand')
%p
- recaptcha_v2_link_url = 'https://developers.google.com/recaptcha/docs/versions'
@@ -19,7 +19,7 @@
.settings-header
%h4
= _('Abuse reports')
- %button.btn.btn-default.js-settings-toggle{ type: 'button' }
+ %button.btn.gl-button.btn-default.js-settings-toggle{ type: 'button' }
= expanded_by_default? ? _('Collapse') : _('Expand')
%p
= _('Set notification email for abuse reports.')
diff --git a/app/views/admin/application_settings/repository.html.haml b/app/views/admin/application_settings/repository.html.haml
index 18e093f7b2c..4365d8937bd 100644
--- a/app/views/admin/application_settings/repository.html.haml
+++ b/app/views/admin/application_settings/repository.html.haml
@@ -7,7 +7,7 @@
.settings-header
%h4
= _('Default initial branch name')
- %button.gl-button.js-settings-toggle{ type: 'button' }
+ %button.btn.gl-button.btn-default.js-settings-toggle{ type: 'button' }
= expanded_by_default? ? _('Collapse') : _('Expand')
%p
= _('Set the default name of the initial branch when creating new repositories through the user interface.')
@@ -18,7 +18,7 @@
.settings-header
%h4
= _('Repository mirroring')
- %button.btn.js-settings-toggle{ type: 'button' }
+ %button.btn.gl-button.btn-default.js-settings-toggle{ type: 'button' }
= expanded_by_default? ? 'Collapse' : 'Expand'
%p
= _('Configure repository mirroring.')
@@ -29,7 +29,7 @@
.settings-header
%h4
= _('Repository storage')
- %button.btn.btn-default.js-settings-toggle{ type: 'button' }
+ %button.btn.gl-button.btn-default.js-settings-toggle{ type: 'button' }
= expanded_by_default? ? _('Collapse') : _('Expand')
%p
= _('Configure storage path settings.')
@@ -40,7 +40,7 @@
.settings-header
%h4
= _('Repository maintenance')
- %button.btn.btn-default.js-settings-toggle{ type: 'button' }
+ %button.btn.gl-button.btn-default.js-settings-toggle{ type: 'button' }
= expanded_by_default? ? _('Collapse') : _('Expand')
%p
= _('Configure automatic git checks and housekeeping on repositories.')
@@ -51,7 +51,7 @@
.settings-header
%h4
= _('Repository static objects')
- %button.btn.btn-default.js-settings-toggle{ type: 'button' }
+ %button.btn.gl-button.btn-default.js-settings-toggle{ type: 'button' }
= expanded_by_default? ? _('Collapse') : _('Expand')
%p
= _('Serve repository static objects (e.g. archives, blobs, ...) from an external storage (e.g. a CDN).')
diff --git a/app/views/admin/applications/_form.html.haml b/app/views/admin/applications/_form.html.haml
index 0c3a4e73e30..14044d6eecb 100644
--- a/app/views/admin/applications/_form.html.haml
+++ b/app/views/admin/applications/_form.html.haml
@@ -5,14 +5,14 @@
.col-sm-2.col-form-label
= f.label :name
.col-sm-10
- = f.text_field :name, class: 'form-control'
+ = f.text_field :name, class: 'form-control gl-form-input'
= doorkeeper_errors_for application, :name
= content_tag :div, class: 'form-group row' do
.col-sm-2.col-form-label
= f.label :redirect_uri
.col-sm-10
- = f.text_area :redirect_uri, class: 'form-control'
+ = f.text_area :redirect_uri, class: 'form-control gl-form-input'
= doorkeeper_errors_for application, :redirect_uri
%span.form-text.text-muted
Use one line per URI
@@ -23,7 +23,7 @@
.col-sm-10
= f.check_box :trusted
%span.form-text.text-muted
- Trusted applications are automatically authorized on GitLab OAuth flow.
+ Trusted applications are automatically authorized on GitLab OAuth flow. It's highly recommended for the security of users that trusted applications have the confidential setting set to true.
= content_tag :div, class: 'form-group row' do
.col-sm-2.col-form-label.pt-0
diff --git a/app/views/admin/applications/index.html.haml b/app/views/admin/applications/index.html.haml
index c1c1c2a4cfe..7ac55157f65 100644
--- a/app/views/admin/applications/index.html.haml
+++ b/app/views/admin/applications/index.html.haml
@@ -1,28 +1,35 @@
- page_title _("Applications")
%h3.page-title
- System OAuth applications
+ = _('System OAuth applications')
%p.light
- System OAuth applications don't belong to any user and can only be managed by admins
+ = _('System OAuth applications don\'t belong to any user and can only be managed by admins')
%hr
-%p= link_to 'New application', new_admin_application_path, class: 'gl-button btn btn-success'
-%table.table
- %thead
- %tr
- %th Name
- %th Callback URL
- %th Clients
- %th Trusted
- %th Confidential
- %th
- %th
- %tbody.oauth-applications
- - @applications.each do |application|
- %tr{ :id => "application_#{application.id}" }
- %td= link_to application.name, admin_application_path(application)
- %td= application.redirect_uri
- %td= @application_counts[application.id].to_i
- %td= application.trusted? ? 'Y': 'N'
- %td= application.confidential? ? 'Y': 'N'
- %td= link_to 'Edit', edit_admin_application_path(application), class: 'gl-button btn btn-link'
- %td= render 'delete_form', application: application
+%p= link_to _('New application'), new_admin_application_path, class: 'gl-button btn btn-success'
+.table-responsive
+ %table.table
+ %thead
+ %tr
+ %th
+ = _('Name')
+ %th
+ = _('Callback URL')
+ %th
+ = _('Clients')
+ %th
+ = _('Trusted')
+ %th
+ = _('Confidential')
+ %th
+ %th
+ %tbody.oauth-applications
+ - @applications.each do |application|
+ %tr{ :id => "application_#{application.id}" }
+ %td= link_to application.name, admin_application_path(application)
+ %td= application.redirect_uri
+ %td= @application_counts[application.id].to_i
+ %td= application.trusted? ? _('Yes'): _('No')
+ %td= application.confidential? ? _('Yes'): _('No')
+ %td= link_to 'Edit', edit_admin_application_path(application), class: 'gl-button btn btn-link'
+ %td= render 'delete_form', application: application
+
= paginate @applications, theme: 'gitlab'
diff --git a/app/views/admin/applications/show.html.haml b/app/views/admin/applications/show.html.haml
index f029da6b3af..8d643a7a4bc 100644
--- a/app/views/admin/applications/show.html.haml
+++ b/app/views/admin/applications/show.html.haml
@@ -45,5 +45,5 @@
= render "shared/tokens/scopes_list", token: @application
.form-actions
- = link_to 'Edit', edit_admin_application_path(@application), class: 'gl-button btn btn-primary wide float-left'
- = render 'delete_form', application: @application, submit_btn_css: 'btn btn-danger gl-ml-3'
+ = link_to 'Edit', edit_admin_application_path(@application), class: 'gl-button btn btn-confirm wide float-left'
+ = render 'delete_form', application: @application, submit_btn_css: 'gl-button btn btn-danger gl-ml-3'
diff --git a/app/views/admin/broadcast_messages/_form.html.haml b/app/views/admin/broadcast_messages/_form.html.haml
index 9693a97367f..89fccff954d 100644
--- a/app/views/admin/broadcast_messages/_form.html.haml
+++ b/app/views/admin/broadcast_messages/_form.html.haml
@@ -21,7 +21,7 @@
.col-sm-2.col-form-label
= f.label :message
.col-sm-10
- = f.text_area :message, class: "form-control js-autosize js-broadcast-message-message",
+ = f.text_area :message, class: "form-control gl-form-input js-autosize js-broadcast-message-message",
required: true,
dir: 'auto',
data: { preview_path: preview_admin_broadcast_messages_path }
@@ -38,7 +38,7 @@
.input-group-prepend
.input-group-text.label-color-preview{ :style => 'background-color: ' + @broadcast_message.color + '; color: ' + @broadcast_message.font }
= '&nbsp;'.html_safe
- = f.text_field :color, class: "form-control js-broadcast-message-color"
+ = f.text_field :color, class: "form-control gl-form-input js-broadcast-message-color"
.form-text.text-muted
= _('Choose any color.')
%br
@@ -57,12 +57,12 @@
.col-sm-2.col-form-label
= f.label :font, "Font Color"
.col-sm-10
- = f.color_field :font, class: "form-control text-font-color"
+ = f.color_field :font, class: "form-control gl-form-input text-font-color"
.form-group.row
.col-sm-2.col-form-label
= f.label :target_path, _('Target Path')
.col-sm-10
- = f.text_field :target_path, class: "form-control"
+ = f.text_field :target_path, class: "form-control gl-form-input"
.form-text.text-muted
= _('Paths can contain wildcards, like */welcome')
.form-group.row
diff --git a/app/views/admin/dashboard/index.html.haml b/app/views/admin/dashboard/index.html.haml
index 8cc04392752..f6ebc4c465d 100644
--- a/app/views/admin/dashboard/index.html.haml
+++ b/app/views/admin/dashboard/index.html.haml
@@ -15,49 +15,63 @@
= render_if_exists 'admin/licenses/breakdown'
.admin-dashboard.gl-mt-3
+ .h3.gl-mb-5.gl-mt-0= _('Instance overview')
.row
- .col-sm-4
- .info-well.dark-well.flex-fill
- .well-segment.well-centered
- = link_to admin_projects_path do
- %h3.text-center
- = s_('AdminArea|Projects: %{number_of_projects}') % { number_of_projects: approximate_count_with_delimiters(@counts, Project) }
- %hr
- = link_to(s_('AdminArea|New project'), new_project_path, class: "btn gl-button btn-success gl-w-full")
- .col-sm-4
- .info-well.dark-well
- .well-segment.well-centered.gl-text-center
- = link_to admin_users_path do
- %h3.gl-display-inline-block.gl-mb-0
- = s_('AdminArea|Users: %{number_of_users}') % { number_of_users: approximate_count_with_delimiters(@counts, User) }
-
- %span.gl-outline-0.gl-ml-2{ href: "#", tabindex: "0", data: { container: "body",
- toggle: "popover",
- placement: "top",
- html: "true",
- trigger: "focus",
- content: s_("AdminArea|All users created in the instance, including users who are not %{billable_users_link_start}billable users%{billable_users_link_end}.").html_safe % { billable_users_link_start: billable_users_link_start, billable_users_link_end: '</a>'.html_safe },
- } }
- = sprite_icon('question', size: 16, css_class: 'gl-text-gray-700 gl-mb-1')
-
- %hr
- .btn-group.d-flex{ role: 'group' }
- = link_to s_('AdminArea|New user'), new_admin_user_path, class: "btn gl-button btn-success gl-w-full"
- = link_to s_('AdminArea|Users statistics'), admin_dashboard_stats_path, class: 'btn gl-button btn-info gl-w-full'
- .col-sm-4
- .info-well.dark-well
- .well-segment.well-centered
- = link_to admin_groups_path do
- %h3.text-center
- = s_('AdminArea|Groups: %{number_of_groups}') % { number_of_groups: approximate_count_with_delimiters(@counts, Group) }
- %hr
- = link_to s_('AdminArea|New group'), new_admin_group_path, class: "btn gl-button btn-success gl-w-full"
+ .col-md-4.gl-mb-6
+ .gl-card
+ .gl-card-body.d-flex.justify-content-between.align-items-center.gl-p-6
+ %span
+ .d-flex.align-items-center
+ = sprite_icon('project', size: 16, css_class: 'gl-text-gray-700')
+ %h3.gl-m-0.gl-ml-3= approximate_count_with_delimiters(@counts, Project)
+ .gl-mt-3.text-uppercase= s_('AdminArea|Projects')
+ = link_to(s_('AdminArea|New project'), new_project_path, class: "btn gl-button btn-default")
+ .gl-card-footer.gl-bg-transparent
+ .d-flex.align-items-center
+ = link_to(s_('AdminArea|View latest projects'), admin_projects_path)
+ = sprite_icon('angle-right', size: 12, css_class: 'gl-text-gray-700 gl-ml-2')
+ .col-md-4.gl-mb-6
+ .gl-card
+ .gl-card-body.d-flex.justify-content-between.align-items-center.gl-p-6
+ %span
+ .d-flex.align-items-center
+ = sprite_icon('users', size: 16, css_class: 'gl-text-gray-700')
+ %h3.gl-m-0.gl-ml-3= approximate_count_with_delimiters(@counts, User)
+ %span.gl-outline-0.gl-ml-3{ tabindex: "0", data: { container: "body",
+ toggle: "popover",
+ placement: "top",
+ html: "true",
+ trigger: "focus",
+ content: s_("AdminArea|All users created in the instance, including users who are not %{billable_users_link_start}billable users%{billable_users_link_end}.").html_safe % { billable_users_link_start: billable_users_link_start, billable_users_link_end: '</a>'.html_safe },
+ } }
+ = sprite_icon('question', size: 16, css_class: 'gl-text-gray-700')
+ .gl-mt-3.text-uppercase
+ = s_('AdminArea|Users')
+ = link_to(s_('AdminArea|Users statistics'), admin_dashboard_stats_path, class: "text-capitalize gl-ml-2")
+ = link_to(s_('AdminArea|New user'), new_admin_user_path, class: "btn gl-button btn-default")
+ .gl-card-footer.gl-bg-transparent
+ .d-flex.align-items-center
+ = link_to(s_('AdminArea|View latest users'), admin_users_path)
+ = sprite_icon('angle-right', size: 12, css_class: 'gl-text-gray-700 gl-ml-2')
+ .col-md-4.gl-mb-6
+ .gl-card
+ .gl-card-body.d-flex.justify-content-between.align-items-center.gl-p-6
+ %span
+ .d-flex.align-items-center
+ = sprite_icon('group', size: 16, css_class: 'gl-text-gray-700')
+ %h3.gl-m-0.gl-ml-3= approximate_count_with_delimiters(@counts, Group)
+ .gl-mt-3.text-uppercase= s_('AdminArea|Projects')
+ = link_to(s_('AdminArea|New group'), new_admin_group_path, class: "btn gl-button btn-default")
+ .gl-card-footer.gl-bg-transparent
+ .d-flex.align-items-center
+ = link_to(s_('AdminArea|View latest groups'), admin_groups_path)
+ = sprite_icon('angle-right', size: 12, css_class: 'gl-text-gray-700 gl-ml-2')
.row
- .col-md-4
+ .col-md-4.gl-mb-6
#js-admin-statistics-container
- .col-md-4
- .info-well
- .well-segment.admin-well.admin-well-features
+ .col-md-4.gl-mb-6
+ .gl-card
+ .gl-card-body
%h4= s_('AdminArea|Features')
= feature_entry(_('Sign up'),
href: general_admin_application_settings_path(anchor: 'js-signup-settings'),
@@ -94,9 +108,9 @@
= feature_entry(_('Shared Runners'),
href: admin_runners_path,
enabled: Gitlab.config.gitlab_ci.shared_runners_enabled)
- .col-md-4
- .info-well
- .well-segment.admin-well
+ .col-md-4.gl-mb-6
+ .gl-card
+ .gl-card-body
%h4
= s_('AdminArea|Components')
- if Gitlab::CurrentSettings.version_check_enabled
@@ -146,18 +160,18 @@
%p
= link_to _("Gitaly Servers"), admin_gitaly_servers_path
.row
- .col-md-4
- .info-well
- .well-segment.admin-well
+ .col-md-4.gl-mb-6
+ .gl-card
+ .gl-card-body
%h4= s_('AdminArea|Latest projects')
- @projects.each do |project|
%p
= link_to project.full_name, admin_project_path(project), class: 'str-truncated-60'
%span.light.float-right
#{time_ago_with_tooltip(project.created_at)}
- .col-md-4
- .info-well
- .well-segment.admin-well
+ .col-md-4.gl-mb-6
+ .gl-card
+ .gl-card-body
%h4= s_('AdminArea|Latest users')
- @users.each do |user|
%p
@@ -165,9 +179,9 @@
= user.name
%span.light.float-right
#{time_ago_with_tooltip(user.created_at)}
- .col-md-4
- .info-well
- .well-segment.admin-well
+ .col-md-4.gl-mb-6
+ .gl-card
+ .gl-card-body
%h4= s_('AdminArea|Latest groups')
- @groups.each do |group|
%p
diff --git a/app/views/admin/groups/_form.html.haml b/app/views/admin/groups/_form.html.haml
index e4517dca6d0..c2599238bce 100644
--- a/app/views/admin/groups/_form.html.haml
+++ b/app/views/admin/groups/_form.html.haml
@@ -31,7 +31,7 @@
= render 'shared/group_tips'
.form-actions
= f.submit _('Create group'), class: "gl-button btn btn-success"
- = link_to _('Cancel'), admin_groups_path, class: "gl-button btn btn-cancel"
+ = link_to _('Cancel'), admin_groups_path, class: "gl-button btn btn-default btn-cancel"
- else
.form-actions
diff --git a/app/views/admin/groups/_group.html.haml b/app/views/admin/groups/_group.html.haml
index a667fc7ca04..dc122d74e90 100644
--- a/app/views/admin/groups/_group.html.haml
+++ b/app/views/admin/groups/_group.html.haml
@@ -14,7 +14,7 @@
.description
= markdown_field(group, :description)
- .stats.gl-text-gray-500.gl-flex-shrink-0.gl-display-none.gl-display-sm-flex
+ .stats.gl-text-gray-500.gl-flex-shrink-0.gl-display-none.gl-sm-display-flex
%span.badge.badge-pill
= storage_counter(group.storage_size)
@@ -33,5 +33,5 @@
= visibility_level_icon(group.visibility_level)
.controls.gl-flex-shrink-0.gl-ml-5
- = link_to _('Edit'), admin_group_edit_path(group), id: "edit_#{dom_id(group)}", class: 'btn'
+ = link_to _('Edit'), admin_group_edit_path(group), id: "edit_#{dom_id(group)}", class: 'gl-button btn'
= link_to _('Delete'), [:admin, group], data: { confirm: _("Are you sure you want to remove %{group_name}?") % { group_name: group.name } }, method: :delete, class: 'gl-button btn btn-danger'
diff --git a/app/views/admin/hooks/_form.html.haml b/app/views/admin/hooks/_form.html.haml
index e6abd8ff85a..459df5c8d85 100644
--- a/app/views/admin/hooks/_form.html.haml
+++ b/app/views/admin/hooks/_form.html.haml
@@ -2,30 +2,31 @@
.form-group
= form.label :url, _('URL'), class: 'label-bold'
- = form.text_field :url, class: 'form-control'
+ = form.text_field :url, class: 'form-control gl-form-input'
+ %p.form-text.text-muted= _('URL must be percent-encoded if neccessary.')
.form-group
- = form.label :token, _('Secret Token'), class: 'label-bold'
- = form.text_field :token, class: 'form-control'
- %p.form-text.text-muted= _('Use this token to validate received payloads')
+ = form.label :token, _('Secret token'), class: 'label-bold'
+ = form.text_field :token, class: 'form-control gl-form-input'
+ %p.form-text.text-muted= _('Use this token to validate received payloads.')
.form-group
= form.label :url, _('Trigger'), class: 'label-bold'
- .form-text.text-secondary.gl-mb-5= _('System hook will be triggered on set of events like creating project or adding ssh key. But you can also enable extra triggers like Push events.')
+ .form-text.text-secondary.gl-mb-5= _('System hooks are triggered on sets of events like creating a project or adding an SSH key. You can also enable extra triggers, such as push events.')
%fieldset.form-group.form-check
= form.check_box :repository_update_events, class: 'form-check-input'
= form.label :repository_update_events, _('Repository update events'), class: 'label-bold form-check-label'
- .text-secondary= _('This URL will be triggered when repository is updated')
+ .text-secondary= _('URL is triggered when repository is updated')
%fieldset.form-group.form-check
= form.check_box :push_events, class: 'form-check-input'
= form.label :push_events, _('Push events'), class: 'label-bold form-check-label'
- .text-secondary= _('This URL will be triggered for each branch updated to the repository')
+ .text-secondary= _('URL is triggered for each branch updated to the repository')
%fieldset.form-group.form-check
= form.check_box :tag_push_events, class: 'form-check-input'
= form.label :tag_push_events, _('Tag push events'), class: 'label-bold form-check-label'
- .text-secondary= _('This URL will be triggered when a new tag is pushed to the repository')
+ .text-secondary= _('URL is triggered when a new tag is pushed to the repository')
%fieldset.form-group.form-check
= form.check_box :merge_requests_events, class: 'form-check-input'
= form.label :merge_requests_events, _('Merge request events'), class: 'label-bold form-check-label'
- .text-secondary= _('This URL will be triggered when a merge request is created/updated/merged')
+ .text-secondary= _('URL is triggered when a merge request is created, updated, or merged')
.form-group
= form.label :enable_ssl_verification, _('SSL verification'), class: 'label-bold checkbox'
.form-check
diff --git a/app/views/admin/jobs/index.html.haml b/app/views/admin/jobs/index.html.haml
index ce377eeea54..670628f7463 100644
--- a/app/views/admin/jobs/index.html.haml
+++ b/app/views/admin/jobs/index.html.haml
@@ -1,4 +1,5 @@
- add_page_specific_style 'page_bundles/ci_status'
+- add_page_specific_style 'page_bundles/admin/jobs_index'
- breadcrumb_title _("Jobs")
- page_title _("Jobs")
diff --git a/app/views/admin/labels/_form.html.haml b/app/views/admin/labels/_form.html.haml
index 664081339f3..12c7acd7668 100644
--- a/app/views/admin/labels/_form.html.haml
+++ b/app/views/admin/labels/_form.html.haml
@@ -5,12 +5,12 @@
.col-sm-2.col-form-label
= f.label :title
.col-sm-10
- = f.text_field :title, class: "form-control", required: true
+ = f.text_field :title, class: "form-control gl-form-input", required: true
.form-group.row
.col-sm-2.col-form-label
= f.label :description
.col-sm-10
- = f.text_field :description, class: "form-control js-quick-submit"
+ = f.text_field :description, class: "form-control gl-form-input js-quick-submit"
.form-group.row
.col-sm-2.col-form-label
= f.label :color, _("Background color")
@@ -18,7 +18,7 @@
.input-group
.input-group-prepend
.input-group-text.label-color-preview &nbsp;
- = f.text_field :color, class: "form-control"
+ = f.text_field :color, class: "form-control gl-form-input"
.form-text.text-muted
= _('Choose any color.')
%br
diff --git a/app/views/admin/projects/_projects.html.haml b/app/views/admin/projects/_projects.html.haml
index 44317eb7f6e..4131c8b7edd 100644
--- a/app/views/admin/projects/_projects.html.haml
+++ b/app/views/admin/projects/_projects.html.haml
@@ -4,8 +4,8 @@
- @projects.each_with_index do |project|
%li.project-row{ class: ('no-description' if project.description.blank?) }
.controls
- = link_to 'Edit', edit_project_path(project), id: "edit_#{dom_id(project)}", class: "btn"
- %button.delete-project-button.btn.btn-danger{ data: { delete_project_url: admin_project_path(project), project_name: project.name } }
+ = link_to 'Edit', edit_project_path(project), id: "edit_#{dom_id(project)}", class: "gl-button btn"
+ %button.delete-project-button.gl-button.btn.btn-danger{ data: { delete_project_url: admin_project_path(project), project_name: project.name } }
= s_('AdminProjects|Delete')
.stats
diff --git a/app/views/admin/projects/index.html.haml b/app/views/admin/projects/index.html.haml
index bcf09dfc0d2..d9ff4404519 100644
--- a/app/views/admin/projects/index.html.haml
+++ b/app/views/admin/projects/index.html.haml
@@ -32,6 +32,6 @@
= render 'shared/projects/dropdown'
= link_to new_project_path, class: 'gl-button btn btn-success' do
New Project
- = button_tag "Search", class: "gl-button btn btn-primary btn-search hide"
+ = button_tag "Search", class: "gl-button btn btn-confirm btn-search hide"
= render 'projects'
diff --git a/app/views/admin/projects/show.html.haml b/app/views/admin/projects/show.html.haml
index aae1d5b6a4e..2085515e349 100644
--- a/app/views/admin/projects/show.html.haml
+++ b/app/views/admin/projects/show.html.haml
@@ -150,7 +150,7 @@
.form-group.row
.offset-sm-3.col-sm-9
- = f.submit _('Transfer'), class: 'gl-button btn btn-primary'
+ = f.submit _('Transfer'), class: 'gl-button btn btn-confirm'
.card.repository-check
.card-header
@@ -170,7 +170,7 @@
= link_to sprite_icon('question-o'), help_page_path('administration/repository_checks')
.form-group
- = f.submit _('Trigger repository check'), class: 'gl-button btn btn-primary'
+ = f.submit _('Trigger repository check'), class: 'gl-button btn btn-confirm'
.col-md-6
- if @group
diff --git a/app/views/admin/runners/index.html.haml b/app/views/admin/runners/index.html.haml
index 9f19d3f5d4e..8e62dae6c4d 100644
--- a/app/views/admin/runners/index.html.haml
+++ b/app/views/admin/runners/index.html.haml
@@ -39,7 +39,9 @@
= render partial: 'ci/runner/how_to_setup_runner',
locals: { registration_token: Gitlab::CurrentSettings.runners_registration_token,
type: 'shared',
- reset_token_url: reset_registration_token_admin_application_settings_path }
+ reset_token_url: reset_registration_token_admin_application_settings_path,
+ project_path: '',
+ group_path: '' }
.row
.col-sm-9
@@ -48,7 +50,7 @@
.filtered-search-box
= dropdown_tag(_('Recent searches'),
options: { wrapper_class: 'filtered-search-history-dropdown-wrapper',
- toggle_class: 'gl-button btn filtered-search-history-dropdown-toggle-button',
+ toggle_class: 'btn filtered-search-history-dropdown-toggle-button',
dropdown_class: 'filtered-search-history-dropdown',
content_class: 'filtered-search-history-dropdown-content' }) do
.js-filtered-search-history-dropdown{ data: { full_path: admin_runners_path } }
diff --git a/app/views/admin/users/_access_levels.html.haml b/app/views/admin/users/_access_levels.html.haml
index 3ba01e8a350..573580bc5c5 100644
--- a/app/views/admin/users/_access_levels.html.haml
+++ b/app/views/admin/users/_access_levels.html.haml
@@ -5,7 +5,7 @@
.col-sm-2.col-form-label
= f.label :projects_limit
.col-sm-10
- = f.number_field :projects_limit, min: 0, max: Gitlab::Database::MAX_INT_VALUE, class: 'form-control'
+ = f.number_field :projects_limit, min: 0, max: Gitlab::Database::MAX_INT_VALUE, class: 'form-control gl-form-input'
.form-group.row
.col-sm-2.col-form-label.gl-pt-0
diff --git a/app/views/admin/users/_admin_notes.html.haml b/app/views/admin/users/_admin_notes.html.haml
index 4da70a504f7..a20b2fbffc4 100644
--- a/app/views/admin/users/_admin_notes.html.haml
+++ b/app/views/admin/users/_admin_notes.html.haml
@@ -4,4 +4,4 @@
.col-sm-2.col-form-label
= f.label :note, s_('AdminNote|Note')
.col-sm-10
- = f.text_area :note, class: 'form-control'
+ = f.text_area :note, class: 'form-control gl-form-input gl-form-textarea'
diff --git a/app/views/admin/cohorts/index.html.haml b/app/views/admin/users/_cohorts.html.haml
index 03cd392d370..013c6072165 100644
--- a/app/views/admin/cohorts/index.html.haml
+++ b/app/views/admin/users/_cohorts.html.haml
@@ -1,6 +1,3 @@
-- breadcrumb_title _("Cohorts")
-- page_title _("Cohorts")
-
- if @cohorts
= render 'cohorts_table'
- else
diff --git a/app/views/admin/cohorts/_cohorts_table.html.haml b/app/views/admin/users/_cohorts_table.html.haml
index bb6266b38f6..bb6266b38f6 100644
--- a/app/views/admin/cohorts/_cohorts_table.html.haml
+++ b/app/views/admin/users/_cohorts_table.html.haml
diff --git a/app/views/admin/users/_form.html.haml b/app/views/admin/users/_form.html.haml
index 61c31d2d864..40393f0db99 100644
--- a/app/views/admin/users/_form.html.haml
+++ b/app/views/admin/users/_form.html.haml
@@ -8,19 +8,19 @@
.col-sm-2.col-form-label
= f.label :name
.col-sm-10
- = f.text_field :name, required: true, autocomplete: 'off', class: 'form-control'
+ = f.text_field :name, required: true, autocomplete: 'off', class: 'form-control gl-form-input'
%span.help-inline * required
.form-group.row
.col-sm-2.col-form-label
= f.label :username
.col-sm-10
- = f.text_field :username, required: true, autocomplete: 'off', autocorrect: 'off', autocapitalize: 'off', spellcheck: false, class: 'form-control'
+ = f.text_field :username, required: true, autocomplete: 'off', autocorrect: 'off', autocapitalize: 'off', spellcheck: false, class: 'form-control gl-form-input'
%span.help-inline * required
.form-group.row
.col-sm-2.col-form-label
= f.label :email
.col-sm-10
- = f.text_field :email, required: true, autocomplete: 'off', class: 'form-control'
+ = f.text_field :email, required: true, autocomplete: 'off', class: 'form-control gl-form-input'
%span.help-inline * required
- if @user.new_record?
@@ -41,12 +41,12 @@
.col-sm-2.col-form-label
= f.label :password
.col-sm-10
- = f.password_field :password, disabled: f.object.force_random_password, class: 'form-control'
+ = f.password_field :password, disabled: f.object.force_random_password, class: 'form-control gl-form-input'
.form-group.row
.col-sm-2.col-form-label
= f.label :password_confirmation
.col-sm-10
- = f.password_field :password_confirmation, disabled: f.object.force_random_password, class: 'form-control'
+ = f.password_field :password_confirmation, disabled: f.object.force_random_password, class: 'form-control gl-form-input'
= render partial: 'access_levels', locals: { f: f }
@@ -66,22 +66,22 @@
.col-sm-2.col-form-label
= f.label :skype
.col-sm-10
- = f.text_field :skype, class: 'form-control'
+ = f.text_field :skype, class: 'form-control gl-form-input'
.form-group.row
.col-sm-2.col-form-label
= f.label :linkedin
.col-sm-10
- = f.text_field :linkedin, class: 'form-control'
+ = f.text_field :linkedin, class: 'form-control gl-form-input'
.form-group.row
.col-sm-2.col-form-label
= f.label :twitter
.col-sm-10
- = f.text_field :twitter, class: 'form-control'
+ = f.text_field :twitter, class: 'form-control gl-form-input'
.form-group.row
.col-sm-2.col-form-label
= f.label :website_url
.col-sm-10
- = f.text_field :website_url, class: 'form-control'
+ = 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 4abcdef7e27..8a4a1a54c58 100644
--- a/app/views/admin/users/_head.html.haml
+++ b/app/views/admin/users/_head.html.haml
@@ -15,7 +15,8 @@
- if @user.deactivated?
%span.cred
= s_('AdminUsers|(Deactivated)')
- = render_if_exists 'admin/users/audtior_user_badge'
+ = render_if_exists 'admin/users/auditor_user_badge'
+ = render_if_exists 'admin/users/gma_user_badge'
.float-right
- if impersonation_enabled? && @user != current_user && @user.can?(:log_in)
diff --git a/app/views/admin/users/_user.html.haml b/app/views/admin/users/_user.html.haml
index 31fd3aea94d..224a3cea28d 100644
--- a/app/views/admin/users/_user.html.haml
+++ b/app/views/admin/users/_user.html.haml
@@ -59,13 +59,13 @@
%li.divider
- if user.can_be_removed?
%li
- %button.delete-user-button.btn.btn-default-tertiary.text-danger{ data: { 'gl-modal-action': 'delete',
+ %button.js-delete-user-modal-button.btn.btn-default-tertiary.text-danger{ data: { 'gl-modal-action': 'delete',
delete_user_url: admin_user_path(user),
block_user_url: block_admin_user_path(user),
username: sanitize_name(user.name) } }
= s_('AdminUsers|Delete user')
%li
- %button.delete-user-button.btn.btn-default-tertiary.text-danger{ data: { 'gl-modal-action': 'delete-with-contributions',
+ %button.js-delete-user-modal-button.btn.btn-default-tertiary.text-danger{ data: { 'gl-modal-action': 'delete-with-contributions',
delete_user_url: admin_user_path(user, hard_delete: true),
block_user_url: block_admin_user_path(user),
username: sanitize_name(user.name) } }
diff --git a/app/views/admin/users/_user_detail.html.haml b/app/views/admin/users/_user_detail.html.haml
index 3bafd1cb396..05e387e6479 100644
--- a/app/views/admin/users/_user_detail.html.haml
+++ b/app/views/admin/users/_user_detail.html.haml
@@ -9,9 +9,10 @@
= render 'admin/users/user_listing_note', user: user
- user_badges_in_admin_section(user).each do |badge|
- - css_badge = "badge badge-#{badge[:variant]}" if badge[:variant].present?
- %span{ class: css_badge }
- = badge[:text]
+ - css_badge = "badge gl-badge sm badge-pill badge-#{badge[:variant]}" if badge[:variant].present?
+ %span.px-1.py-1
+ %span{ class: css_badge }
+ = badge[:text]
.row-second-line.str-truncated-100
= mail_to user.email, user.email, class: 'text-secondary'
diff --git a/app/views/admin/users/_users.html.haml b/app/views/admin/users/_users.html.haml
new file mode 100644
index 00000000000..57edb9abe90
--- /dev/null
+++ b/app/views/admin/users/_users.html.haml
@@ -0,0 +1,88 @@
+.top-area.scrolling-tabs-container.inner-page-scroll-tabs
+ .fade-left
+ = sprite_icon('chevron-lg-left', size: 12)
+ .fade-right
+ = sprite_icon('chevron-lg-right', size: 12)
+ %ul.nav-links.nav.nav-tabs.scrolling-tabs
+ = nav_link(html_options: { class: active_when(params[:filter].nil?) }) do
+ = link_to admin_users_path do
+ = s_('AdminUsers|Active')
+ %small.badge.badge-pill= limited_counter_with_delimiter(User.active_without_ghosts)
+ = nav_link(html_options: { class: active_when(params[:filter] == 'admins') }) do
+ = link_to admin_users_path(filter: "admins") do
+ = s_('AdminUsers|Admins')
+ %small.badge.badge-pill= limited_counter_with_delimiter(User.admins)
+ = nav_link(html_options: { class: "#{active_when(params[:filter] == 'two_factor_enabled')} filter-two-factor-enabled" }) do
+ = link_to admin_users_path(filter: 'two_factor_enabled') do
+ = s_('AdminUsers|2FA Enabled')
+ %small.badge.badge-pill= limited_counter_with_delimiter(User.with_two_factor)
+ = nav_link(html_options: { class: "#{active_when(params[:filter] == 'two_factor_disabled')} filter-two-factor-disabled" }) do
+ = link_to admin_users_path(filter: 'two_factor_disabled') do
+ = s_('AdminUsers|2FA Disabled')
+ %small.badge.badge-pill= limited_counter_with_delimiter(User.without_two_factor)
+ = nav_link(html_options: { class: active_when(params[:filter] == 'external') }) do
+ = link_to admin_users_path(filter: 'external') do
+ = s_('AdminUsers|External')
+ %small.badge.badge-pill= limited_counter_with_delimiter(User.external)
+ = nav_link(html_options: { class: active_when(params[:filter] == 'blocked') }) do
+ = link_to admin_users_path(filter: "blocked") do
+ = s_('AdminUsers|Blocked')
+ %small.badge.badge-pill= limited_counter_with_delimiter(User.blocked)
+ = nav_link(html_options: { class: "#{active_when(params[:filter] == 'blocked_pending_approval')} filter-blocked-pending-approval" }) do
+ = link_to admin_users_path(filter: "blocked_pending_approval"), data: { qa_selector: 'pending_approval_tab' } do
+ = s_('AdminUsers|Pending approval')
+ %small.badge.badge-pill= limited_counter_with_delimiter(User.blocked_pending_approval)
+ = nav_link(html_options: { class: active_when(params[:filter] == 'deactivated') }) do
+ = link_to admin_users_path(filter: "deactivated") do
+ = s_('AdminUsers|Deactivated')
+ %small.badge.badge-pill= limited_counter_with_delimiter(User.deactivated)
+ = nav_link(html_options: { class: active_when(params[:filter] == 'wop') }) do
+ = link_to admin_users_path(filter: "wop") do
+ = s_('AdminUsers|Without projects')
+ %small.badge.badge-pill= limited_counter_with_delimiter(User.without_projects)
+ .nav-controls
+ = render_if_exists 'admin/users/admin_email_users'
+ = render_if_exists 'admin/users/admin_export_user_permissions'
+ = link_to s_('AdminUsers|New user'), new_admin_user_path, class: 'btn gl-button btn-success btn-search float-right'
+
+.filtered-search-block.row-content-block.border-top-0
+ = form_tag admin_users_path, method: :get do
+ - if params[:filter].present?
+ = hidden_field_tag "filter", h(params[:filter])
+ .search-holder
+ .search-field-holder.gl-mb-4
+ = search_field_tag :search_query, params[:search_query], placeholder: s_('AdminUsers|Search by name, email or username'), class: 'form-control search-text-input js-search-input', spellcheck: false, data: { qa_selector: 'user_search_field' }
+ - if @sort.present?
+ = hidden_field_tag :sort, @sort
+ = sprite_icon('search', css_class: 'search-icon')
+ = button_tag s_('AdminUsers|Search users') if Rails.env.test?
+ .dropdown.user-sort-dropdown
+ = label_tag 'Sort by', nil, class: 'label-bold'
+ - toggle_text = @sort.present? ? users_sort_options_hash[@sort] : sort_title_name
+ = dropdown_toggle(toggle_text, { toggle: 'dropdown' })
+ %ul.dropdown-menu.dropdown-menu-right
+ %li.dropdown-header
+ = s_('AdminUsers|Sort by')
+ %li
+ - users_sort_options_hash.each do |value, title|
+ = link_to admin_users_path(sort: value, filter: params[:filter], search_query: params[:search_query]) do
+ = title
+
+- if Feature.enabled?(:vue_admin_users)
+ #js-admin-users-app{ data: admin_users_data_attributes(@users) }
+ .gl-spinner-container.gl-my-7
+ %span.gl-vertical-align-bottom.gl-spinner.gl-spinner-dark.gl-spinner-lg{ aria: { label: _('Loading') } }
+- elsif @users.empty?
+ .nothing-here-block.border-top-0
+ = s_('AdminUsers|No users found')
+- else
+ .table-holder
+ .thead-white.text-nowrap.gl-responsive-table-row.table-row-header{ role: 'row' }
+ - user_table_headers.each do |header|
+ .table-section{ class: header[:section_class_name], role: 'rowheader' }= header[:header_text]
+
+ = render partial: 'admin/users/user', collection: @users
+
+= paginate @users, theme: "gitlab"
+
+= render partial: 'admin/users/modals'
diff --git a/app/views/admin/users/index.html.haml b/app/views/admin/users/index.html.haml
index cef16b1881e..8da0c7f4300 100644
--- a/app/views/admin/users/index.html.haml
+++ b/app/views/admin/users/index.html.haml
@@ -1,92 +1,17 @@
- page_title _("Users")
-.top-area.scrolling-tabs-container.inner-page-scroll-tabs
- .fade-left
- = sprite_icon('chevron-lg-left', size: 12)
- .fade-right
- = sprite_icon('chevron-lg-right', size: 12)
- %ul.nav-links.nav.nav-tabs.scrolling-tabs
- = nav_link(html_options: { class: active_when(params[:filter].nil?) }) do
- = link_to admin_users_path do
- = s_('AdminUsers|Active')
- %small.badge.badge-pill= limited_counter_with_delimiter(User.active_without_ghosts)
- = nav_link(html_options: { class: active_when(params[:filter] == 'admins') }) do
- = link_to admin_users_path(filter: "admins") do
- = s_('AdminUsers|Admins')
- %small.badge.badge-pill= limited_counter_with_delimiter(User.admins)
- = nav_link(html_options: { class: "#{active_when(params[:filter] == 'two_factor_enabled')} filter-two-factor-enabled" }) do
- = link_to admin_users_path(filter: 'two_factor_enabled') do
- = s_('AdminUsers|2FA Enabled')
- %small.badge.badge-pill= limited_counter_with_delimiter(User.with_two_factor)
- = nav_link(html_options: { class: "#{active_when(params[:filter] == 'two_factor_disabled')} filter-two-factor-disabled" }) do
- = link_to admin_users_path(filter: 'two_factor_disabled') do
- = s_('AdminUsers|2FA Disabled')
- %small.badge.badge-pill= limited_counter_with_delimiter(User.without_two_factor)
- = nav_link(html_options: { class: active_when(params[:filter] == 'external') }) do
- = link_to admin_users_path(filter: 'external') do
- = s_('AdminUsers|External')
- %small.badge.badge-pill= limited_counter_with_delimiter(User.external)
- = nav_link(html_options: { class: active_when(params[:filter] == 'blocked') }) do
- = link_to admin_users_path(filter: "blocked") do
- = s_('AdminUsers|Blocked')
- %small.badge.badge-pill= limited_counter_with_delimiter(User.blocked)
- = nav_link(html_options: { class: "#{active_when(params[:filter] == 'blocked_pending_approval')} filter-blocked-pending-approval" }) do
- = link_to admin_users_path(filter: "blocked_pending_approval"), data: { qa_selector: 'pending_approval_tab' } do
- = s_('AdminUsers|Pending approval')
- %small.badge.badge-pill= limited_counter_with_delimiter(User.blocked_pending_approval)
- = nav_link(html_options: { class: active_when(params[:filter] == 'deactivated') }) do
- = link_to admin_users_path(filter: "deactivated") do
- = s_('AdminUsers|Deactivated')
- %small.badge.badge-pill= limited_counter_with_delimiter(User.deactivated)
- = nav_link(html_options: { class: active_when(params[:filter] == 'wop') }) do
- = link_to admin_users_path(filter: "wop") do
- = s_('AdminUsers|Without projects')
- %small.badge.badge-pill= limited_counter_with_delimiter(User.without_projects)
- .nav-controls
- = render_if_exists 'admin/users/admin_email_users'
- = render_if_exists 'admin/users/admin_export_user_permissions'
- = link_to s_('AdminUsers|New user'), new_admin_user_path, class: 'btn gl-button btn-success btn-search float-right'
+%ul.nav-links.nav-tabs.nav.js-users-tabs{ role: 'tablist' }
+ %li.nav-item.js-users-tab-item{ role: 'presentation' }
+ %a.nav-link{ href: '#users', class: active_when(params[:tab] != 'cohorts'), data: { toggle: 'tab' }, role: 'tab' }
+ = s_('AdminUsers|Users')
+ %li.nav-item.js-users-tab-item{ role: 'presentation' }
+ %a.nav-link{ href: '#cohorts', class: active_when(params[:tab] == 'cohorts'), data: { toggle: 'tab', track: { event: 'i_analytics_cohorts', action: 'click_tab' } }, role: 'tab' }
+ = s_('AdminUsers|Cohorts')
-.filtered-search-block.row-content-block.border-top-0
- = form_tag admin_users_path, method: :get do
- - if params[:filter].present?
- = hidden_field_tag "filter", h(params[:filter])
- .search-holder
- .search-field-holder.gl-mb-4
- = search_field_tag :search_query, params[:search_query], placeholder: s_('AdminUsers|Search by name, email or username'), class: 'form-control search-text-input js-search-input', spellcheck: false, data: { qa_selector: 'user_search_field' }
- - if @sort.present?
- = hidden_field_tag :sort, @sort
- = sprite_icon('search', css_class: 'search-icon')
- = button_tag s_('AdminUsers|Search users') if Rails.env.test?
- .dropdown.user-sort-dropdown
- = label_tag 'Sort by', nil, class: 'label-bold'
- - toggle_text = @sort.present? ? users_sort_options_hash[@sort] : sort_title_name
- = dropdown_toggle(toggle_text, { toggle: 'dropdown' })
- %ul.dropdown-menu.dropdown-menu-right
- %li.dropdown-header
- = s_('AdminUsers|Sort by')
- %li
- - users_sort_options_hash.each do |value, title|
- = link_to admin_users_path(sort: value, filter: params[:filter], search_query: params[:search_query]) do
- = title
+.tab-content
+ .tab-pane{ id: 'users', class: ('active' if params[:tab] != 'cohorts') }
+ = render 'users'
+ .tab-pane{ id: 'cohorts', class: ('active' if params[:tab] == 'cohorts') }
+ = render 'cohorts'
-- if Feature.enabled?(:vue_admin_users)
- #js-admin-users-app{ data: admin_users_data_attributes(@users) }
- .gl-spinner-container.gl-my-7
- %span.gl-vertical-align-bottom.gl-spinner.gl-spinner-dark.gl-spinner-lg{ aria: { label: _('Loading') } }
-- elsif @users.empty?
- .nothing-here-block.border-top-0
- = s_('AdminUsers|No users found')
-- else
- .table-holder
- .thead-white.text-nowrap.gl-responsive-table-row.table-row-header{ role: 'row' }
- .table-section.section-40{ role: 'rowheader' }= _('Name')
- .table-section.section-10{ role: 'rowheader' }= _('Projects')
- .table-section.section-15{ role: 'rowheader' }= _('Created on')
- .table-section.section-15{ role: 'rowheader' }= _('Last activity')
- = render partial: 'admin/users/user', collection: @users
-
-= paginate @users, theme: "gitlab"
-
-= render partial: 'admin/users/modals'
diff --git a/app/views/admin/users/show.html.haml b/app/views/admin/users/show.html.haml
index 26f78ea4d6a..c7ec3ab66d7 100644
--- a/app/views/admin/users/show.html.haml
+++ b/app/views/admin/users/show.html.haml
@@ -138,10 +138,10 @@
.col-md-6
- unless @user == current_user
- if can_force_email_confirmation?(@user)
- .card.border-info
- .card-header.bg-info.text-white
+ .gl-card.border-info.gl-mb-5
+ .gl-card-header.bg-info.text-white
Confirm user
- .card-body
+ .gl-card-body
- if @user.unconfirmed_email.present?
- email = " (#{@user.unconfirmed_email})"
%p This user has an unconfirmed email address#{email}. You may force a confirmation.
@@ -152,19 +152,19 @@
- unless @user.internal?
- if @user.deactivated?
- .card.border-info
- .card-header.bg-info.text-white
+ .gl-card.border-info.gl-mb-5
+ .gl-card-header.bg-info.text-white
Reactivate this user
- .card-body
+ .gl-card-body
= render partial: 'admin/users/user_activation_effects'
%br
%button.btn.gl-button.btn-info.js-confirm-modal-button{ data: user_activation_data(@user) }
= s_('AdminUsers|Activate user')
- elsif @user.can_be_deactivated?
- .card.border-warning
- .card-header.bg-warning.text-white
+ .gl-card.border-warning.gl-mb-5
+ .gl-card-header.bg-warning.text-white
Deactivate this user
- .card-body
+ .gl-card-body
= user_deactivation_effects
%br
%button.btn.gl-button.btn-warning.js-confirm-modal-button{ data: user_deactivation_data(@user, s_('AdminUsers|You can always re-activate their account, their data will remain intact.')) }
@@ -174,10 +174,10 @@
= render 'admin/users/approve_user', user: @user
= render 'admin/users/reject_pending_user', user: @user
- else
- .card.border-info
- .card-header.gl-bg-blue-500.gl-text-white
+ .gl-card.border-info.gl-mb-5
+ .gl-card-header.gl-bg-blue-500.gl-text-white
This user is blocked
- .card-body
+ .gl-card-body
%p A blocked user cannot:
%ul
%li Log in
@@ -189,7 +189,7 @@
= render 'admin/users/block_user', user: @user
- if @user.access_locked?
- .card.border-info
+ .card.border-info.gl-mb-5
.card-header.bg-info.text-white
This account has been locked
.card-body
@@ -197,15 +197,15 @@
%br
= link_to 'Unlock user', unlock_admin_user_path(@user), method: :put, class: "btn gl-button btn-info", data: { confirm: 'Are you sure?' }
- if !@user.blocked_pending_approval?
- .card.border-danger
- .card-header.bg-danger.text-white
+ .gl-card.border-danger.gl-mb-5
+ .gl-card-header.bg-danger.text-white
= s_('AdminUsers|Delete user')
- .card-body
+ .gl-card-body
- if @user.can_be_removed? && can?(current_user, :destroy_user, @user)
%p Deleting a user has the following effects:
= render 'users/deletion_guidance', user: @user
%br
- %button.delete-user-button.btn.gl-button.btn-danger{ data: { 'gl-modal-action': 'delete',
+ %button.js-delete-user-modal-button.btn.gl-button.btn-danger{ data: { 'gl-modal-action': 'delete',
delete_user_url: admin_user_path(@user),
block_user_url: block_admin_user_path(@user),
username: sanitize_name(@user.name) } }
@@ -221,10 +221,10 @@
%p
You don't have access to delete this user.
- .card.border-danger
- .card-header.bg-danger.text-white
+ .gl-card.border-danger
+ .gl-card-header.bg-danger.text-white
= s_('AdminUsers|Delete user and contributions')
- .card-body
+ .gl-card-body
- if can?(current_user, :destroy_user, @user)
%p
This option deletes the user and any contributions that
@@ -235,7 +235,7 @@
the user, and projects in them, will also be removed. Commits
to other projects are unaffected.
%br
- %button.delete-user-button.btn.gl-button.btn-danger{ data: { 'gl-modal-action': 'delete-with-contributions',
+ %button.js-delete-user-modal-button.btn.gl-button.btn-danger{ data: { 'gl-modal-action': 'delete-with-contributions',
delete_user_url: admin_user_path(@user, hard_delete: true),
block_user_url: block_admin_user_path(@user),
username: @user.name } }