diff options
Diffstat (limited to 'app')
26 files changed, 191 insertions, 39 deletions
diff --git a/app/assets/javascripts/ci_variable_list/components/ci_variable_table.vue b/app/assets/javascripts/ci_variable_list/components/ci_variable_table.vue index e5923124653..b959d97daea 100644 --- a/app/assets/javascripts/ci_variable_list/components/ci_variable_table.vue +++ b/app/assets/javascripts/ci_variable_list/components/ci_variable_table.vue @@ -162,23 +162,26 @@ export default { </p> </template> </gl-table> - <div class="ci-variable-actions" :class="{ 'justify-content-center': !tableIsNotEmpty }"> + <div + class="ci-variable-actions gl-display-flex" + :class="{ 'justify-content-center': !tableIsNotEmpty }" + > + <gl-button + ref="add-ci-variable" + v-gl-modal-directive="$options.modalId" + class="gl-mr-3" + data-qa-selector="add_ci_variable_button" + variant="confirm" + category="primary" + >{{ __('Add variable') }}</gl-button + > <gl-button v-if="tableIsNotEmpty" ref="secret-value-reveal-button" data-qa-selector="reveal_ci_variable_value_button" - class="gl-mr-3" @click="toggleValues(!valuesHidden)" >{{ valuesButtonText }}</gl-button > - <gl-button - ref="add-ci-variable" - v-gl-modal-directive="$options.modalId" - data-qa-selector="add_ci_variable_button" - variant="success" - category="primary" - >{{ __('Add Variable') }}</gl-button - > </div> </div> </template> diff --git a/app/assets/javascripts/pages/projects/settings/packages_and_registries/index/index.js b/app/assets/javascripts/pages/projects/settings/packages_and_registries/index/index.js new file mode 100644 index 00000000000..93c6a2c63a3 --- /dev/null +++ b/app/assets/javascripts/pages/projects/settings/packages_and_registries/index/index.js @@ -0,0 +1,5 @@ +import registrySettingsApp from '~/packages_and_registries/settings/project/registry_settings_bundle'; +import initSettingsPanels from '~/settings_panels'; + +registrySettingsApp(); +initSettingsPanels(); diff --git a/app/assets/stylesheets/pages/settings_ci_cd.scss b/app/assets/stylesheets/pages/settings_ci_cd.scss index 346b3f61caa..7d74070b4f2 100644 --- a/app/assets/stylesheets/pages/settings_ci_cd.scss +++ b/app/assets/stylesheets/pages/settings_ci_cd.scss @@ -11,10 +11,6 @@ .trigger-actions { white-space: nowrap; - - .btn { - margin-left: 10px; - } } .auto-devops-card { diff --git a/app/controllers/confirmations_controller.rb b/app/controllers/confirmations_controller.rb index c42c9827eaf..163c5fbca67 100644 --- a/app/controllers/confirmations_controller.rb +++ b/app/controllers/confirmations_controller.rb @@ -27,7 +27,7 @@ class ConfirmationsController < Devise::ConfirmationsController else Gitlab::AppLogger.info("Email Confirmed: username=#{resource.username} email=#{resource.email} ip=#{request.remote_ip}") flash[:notice] = flash[:notice] + _(" Please sign in.") - new_session_path(:user, anchor: 'login-pane') + new_session_path(:user, anchor: 'login-pane', invite_email: resource.email) end end diff --git a/app/controllers/projects/settings/packages_and_registries_controller.rb b/app/controllers/projects/settings/packages_and_registries_controller.rb new file mode 100644 index 00000000000..3756f5bb2d6 --- /dev/null +++ b/app/controllers/projects/settings/packages_and_registries_controller.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +module Projects + module Settings + class PackagesAndRegistriesController < Projects::ApplicationController + layout 'project_settings' + + before_action :authorize_admin_project! + before_action :packages_and_registries_settings_enabled! + + feature_category :package_registry + + def index + end + + private + + def packages_and_registries_settings_enabled! + render_404 unless settings_packages_and_registries_enabled?(project) + end + end + end +end diff --git a/app/controllers/whats_new_controller.rb b/app/controllers/whats_new_controller.rb index e24b0bbc7bb..6f389aa4924 100644 --- a/app/controllers/whats_new_controller.rb +++ b/app/controllers/whats_new_controller.rb @@ -5,6 +5,7 @@ class WhatsNewController < ApplicationController skip_before_action :authenticate_user! + before_action :check_whats_new_enabled before_action :check_valid_page_param, :set_pagination_headers feature_category :navigation @@ -19,6 +20,10 @@ class WhatsNewController < ApplicationController private + def check_whats_new_enabled + render_404 if Gitlab::CurrentSettings.current_application_settings.whats_new_variant_disabled? + end + def check_valid_page_param render_404 if current_page < 1 end diff --git a/app/helpers/application_settings_helper.rb b/app/helpers/application_settings_helper.rb index 4373f47877f..d643223255f 100644 --- a/app/helpers/application_settings_helper.rb +++ b/app/helpers/application_settings_helper.rb @@ -364,7 +364,8 @@ module ApplicationSettingsHelper :rate_limiting_response_text, :container_registry_expiration_policies_worker_capacity, :container_registry_cleanup_tags_service_max_list_size, - :keep_latest_artifact + :keep_latest_artifact, + :whats_new_variant ] end diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 4be6cd4276b..cfafb0443b9 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -743,6 +743,7 @@ module ProjectsHelper operations#show badges#index pages#show + packages_and_registries#index ] end @@ -782,6 +783,16 @@ module ProjectsHelper end def settings_container_registry_expiration_policy_available?(project) + Feature.disabled?(:sidebar_refactor) && + can_destroy_container_registry_image?(current_user, project) + end + + def settings_packages_and_registries_enabled?(project) + Feature.enabled?(:sidebar_refactor) && + can_destroy_container_registry_image?(current_user, project) + end + + def can_destroy_container_registry_image?(current_user, project) Gitlab.config.registry.enabled && can?(current_user, :destroy_container_image, project) end diff --git a/app/helpers/whats_new_helper.rb b/app/helpers/whats_new_helper.rb index 9362ae1491f..5fca00c5dce 100644 --- a/app/helpers/whats_new_helper.rb +++ b/app/helpers/whats_new_helper.rb @@ -10,6 +10,33 @@ module WhatsNewHelper end def display_whats_new? - Gitlab.dev_env_org_or_com? || user_signed_in? + (Gitlab.dev_env_org_or_com? || user_signed_in?) && + !Gitlab::CurrentSettings.current_application_settings.whats_new_variant_disabled? + end + + def whats_new_variants + ApplicationSetting.whats_new_variants + end + + def whats_new_variants_label(variant) + case variant + when 'all_tiers' + _("Enable What's new: All tiers") + when 'current_tier' + _("Enable What's new: Current tier only") + when 'disabled' + _("Disable What's new") + end + end + + def whats_new_variants_description(variant) + case variant + when 'all_tiers' + _("What's new presents new features from all tiers to help you keep track of all new features.") + when 'current_tier' + _("What's new presents new features for your current subscription tier, while hiding new features not available to your subscription tier.") + when 'disabled' + _("What's new is disabled and can no longer be viewed.") + end end end diff --git a/app/models/application_setting.rb b/app/models/application_setting.rb index 9ed0ebe49cc..0be511e5f6e 100644 --- a/app/models/application_setting.rb +++ b/app/models/application_setting.rb @@ -13,6 +13,8 @@ class ApplicationSetting < ApplicationRecord KROKI_URL_ERROR_MESSAGE = 'Please check your Kroki URL setting in ' \ 'Admin Area > Settings > General > Kroki' + enum whats_new_variant: { all_tiers: 0, current_tier: 1, disabled: 2 }, _prefix: true + add_authentication_token_field :runners_registration_token, encrypted: -> { Feature.enabled?(:application_settings_tokens_optional_encryption) ? :optional : :required } add_authentication_token_field :health_check_access_token add_authentication_token_field :static_objects_external_storage_auth_token @@ -491,6 +493,9 @@ class ApplicationSetting < ApplicationRecord allow_nil: true, numericality: { only_integer: true, greater_than: 0 } + validates :whats_new_variant, + inclusion: { in: ApplicationSetting.whats_new_variants.keys } + attr_encrypted :asset_proxy_secret_key, mode: :per_attribute_iv, key: Settings.attr_encrypted_db_key_base_truncated, diff --git a/app/models/application_setting_implementation.rb b/app/models/application_setting_implementation.rb index 88fd17133f2..140669c0695 100644 --- a/app/models/application_setting_implementation.rb +++ b/app/models/application_setting_implementation.rb @@ -187,7 +187,8 @@ module ApplicationSettingImplementation kroki_enabled: false, kroki_url: nil, kroki_formats: { blockdiag: false, bpmn: false, excalidraw: false }, - rate_limiting_response_text: nil + rate_limiting_response_text: nil, + whats_new_variant: 0 } end diff --git a/app/models/project_services/bamboo_service.rb b/app/models/project_services/bamboo_service.rb index a892d1a4314..60f53bd4a7d 100644 --- a/app/models/project_services/bamboo_service.rb +++ b/app/models/project_services/bamboo_service.rb @@ -36,12 +36,12 @@ class BambooService < CiService end def description - s_('BambooService|Use the Atlassian Bamboo CI/CD server with GitLab.') + s_('BambooService|Run CI/CD pipelines with Atlassian Bamboo.') end def help docs_link = link_to _('Learn more.'), Rails.application.routes.url_helpers.help_page_url('user/project/integrations/bamboo'), target: '_blank', rel: 'noopener noreferrer' - s_('BambooService|Use Atlassian Bamboo to run CI/CD pipelines. You must set up automatic revision labeling and a repository trigger in Bamboo. %{docs_link}').html_safe % { docs_link: docs_link.html_safe } + s_('BambooService|Run CI/CD pipelines with Atlassian Bamboo. You must set up automatic revision labeling and a repository trigger in Bamboo. %{docs_link}').html_safe % { docs_link: docs_link.html_safe } end def self.to_param diff --git a/app/models/project_services/jenkins_service.rb b/app/models/project_services/jenkins_service.rb index 6a123517b84..990a35cd617 100644 --- a/app/models/project_services/jenkins_service.rb +++ b/app/models/project_services/jenkins_service.rb @@ -64,12 +64,12 @@ class JenkinsService < CiService end def description - s_('An extendable open source CI/CD server.') + s_('Run CI/CD pipelines with Jenkins.') end def help docs_link = link_to _('Learn more.'), Rails.application.routes.url_helpers.help_page_url('integration/jenkins'), target: '_blank', rel: 'noopener noreferrer' - s_('Trigger Jenkins builds when you push to a repository, or when a merge request is created, updated, or merged. %{docs_link}').html_safe % { docs_link: docs_link.html_safe } + s_('Run CI/CD pipelines with Jenkins when you push to a repository, or when a merge request is created, updated, or merged. %{docs_link}').html_safe % { docs_link: docs_link.html_safe } end def self.to_param diff --git a/app/models/release_highlight.rb b/app/models/release_highlight.rb index 4b0ae251a9f..9c30d0611e6 100644 --- a/app/models/release_highlight.rb +++ b/app/models/release_highlight.rb @@ -4,6 +4,10 @@ class ReleaseHighlight CACHE_DURATION = 1.hour FILES_PATH = Rails.root.join('data', 'whats_new', '*.yml') + FREE_PACKAGE = 'Free' + PREMIUM_PACKAGE = 'Premium' + ULTIMATE_PACKAGE = 'Ultimate' + def self.paginated(page: 1) key = self.cache_key("items:page-#{page}") @@ -25,10 +29,8 @@ class ReleaseHighlight file = File.read(file_path) items = YAML.safe_load(file, permitted_classes: [Date]) - platform = Gitlab.com? ? 'gitlab-com' : 'self-managed' - items&.map! do |item| - next unless item[platform] + next unless include_item?(item) begin item.tap {|i| i['body'] = Kramdown::Document.new(i['body']).to_html } @@ -53,7 +55,8 @@ class ReleaseHighlight end def self.cache_key(key) - ['release_highlight', key, Gitlab.revision].join(':') + variant = Gitlab::CurrentSettings.current_application_settings.whats_new_variant + ['release_highlight', variant, key, Gitlab.revision].join(':') end def self.next_page(current_page: 1) @@ -88,4 +91,27 @@ class ReleaseHighlight delegate :each, to: :items end + + def self.current_package + return FREE_PACKAGE unless defined?(License) + + case License.current&.plan&.downcase + when License::PREMIUM_PLAN + PREMIUM_PACKAGE + when License::ULTIMATE_PLAN + ULTIMATE_PACKAGE + else + FREE_PACKAGE + end + end + + def self.include_item?(item) + platform = Gitlab.com? ? 'gitlab-com' : 'self-managed' + + return false unless item[platform] + + return true unless Gitlab::CurrentSettings.current_application_settings.whats_new_variant_current_tier? + + item['packages']&.include?(current_package) + end end diff --git a/app/views/admin/application_settings/_whats_new.html.haml b/app/views/admin/application_settings/_whats_new.html.haml new file mode 100644 index 00000000000..70ba994d21e --- /dev/null +++ b/app/views/admin/application_settings/_whats_new.html.haml @@ -0,0 +1,13 @@ += form_for @application_setting, url: preferences_admin_application_settings_path(anchor: 'js-whats-new-settings'), html: { class: 'fieldset-form whats-new-settings' } do |f| + = form_errors(@application_setting) + + - whats_new_variants.keys.each do |variant| + .form-check.gl-mb-4 + = f.radio_button :whats_new_variant, variant, class: 'form-check-input' + = f.label :whats_new_variant, value: variant, class: 'form-check-label' do + .font-weight-bold + = whats_new_variants_label(variant) + .option-description + = whats_new_variants_description(variant) + + = f.submit _('Save changes'), class: "gl-button btn btn-confirm" diff --git a/app/views/admin/application_settings/preferences.html.haml b/app/views/admin/application_settings/preferences.html.haml index fd5ce890648..17bf9ba84a2 100644 --- a/app/views/admin/application_settings/preferences.html.haml +++ b/app/views/admin/application_settings/preferences.html.haml @@ -13,6 +13,17 @@ .settings-content = render 'email' +%section.settings.as-whats-new-page.no-animate#js-whats-new-settings{ class: ('expanded' if expanded_by_default?) } + .settings-header + %h4 + = _("What's new") + %button.btn.gl-button.btn-default.js-settings-toggle{ type: 'button' } + = expanded_by_default? ? _('Collapse') : _('Expand') + %p + = _("Configure What's new drawer and content.") + .settings-content + = render 'whats_new' + %section.settings.as-help-page.no-animate#js-help-settings{ class: ('expanded' if expanded_by_default?) } .settings-header %h4 diff --git a/app/views/layouts/nav/sidebar/_project_menus.html.haml b/app/views/layouts/nav/sidebar/_project_menus.html.haml index d26a138cfc7..0507f6d4b16 100644 --- a/app/views/layouts/nav/sidebar/_project_menus.html.haml +++ b/app/views/layouts/nav/sidebar/_project_menus.html.haml @@ -274,6 +274,11 @@ = link_to project_pages_path(@project), title: _('Pages') do %span = _('Pages') + - if settings_packages_and_registries_enabled?(@project) + = nav_link(controller: :packages_and_registries) do + = link_to project_settings_packages_and_registries_path(@project), title: _('Packages & Registries'), data: { qa_selector: 'project_package_settings_link' } do + %span + = _('Packages & Registries') -# Shortcut to Project > Activity %li.hidden diff --git a/app/views/projects/milestones/_form.html.haml b/app/views/projects/milestones/_form.html.haml index 56906eb6e66..a6adfd31834 100644 --- a/app/views/projects/milestones/_form.html.haml +++ b/app/views/projects/milestones/_form.html.haml @@ -7,7 +7,7 @@ .col-form-label.col-sm-2 = f.label :title, _('Title') .col-sm-10 - = f.text_field :title, maxlength: 255, class: 'form-control', data: { qa_selector: 'milestone_title_field' }, required: true, autofocus: true + = f.text_field :title, maxlength: 255, class: 'form-control gl-form-input', data: { qa_selector: 'milestone_title_field' }, required: true, autofocus: true .form-group.row.milestone-description .col-form-label.col-sm-2 = f.label :description, _('Description') diff --git a/app/views/projects/pipelines/_with_tabs.html.haml b/app/views/projects/pipelines/_with_tabs.html.haml index 8af3764650c..e56a240c487 100644 --- a/app/views/projects/pipelines/_with_tabs.html.haml +++ b/app/views/projects/pipelines/_with_tabs.html.haml @@ -11,16 +11,16 @@ %li.js-builds-tab-link = link_to builds_project_pipeline_path(@project, @pipeline), data: { target: '#js-tab-builds', action: 'builds', toggle: 'tab' }, class: 'builds-tab' do = _('Jobs') - %span.badge.badge-pill.js-builds-counter= pipeline.total_size + %span.badge.badge-pill.gl-badge.badge-muted.sm.js-builds-counter= pipeline.total_size - if @pipeline.failed_builds.present? %li.js-failures-tab-link = link_to failures_project_pipeline_path(@project, @pipeline), data: { target: '#js-tab-failures', action: 'failures', toggle: 'tab' }, class: 'failures-tab' do = _('Failed Jobs') - %span.badge.badge-pill.js-failures-counter= @pipeline.failed_builds.count + %span.badge.badge-pill.gl-badge.badge-muted.sm.js-failures-counter= @pipeline.failed_builds.count %li.js-tests-tab-link = link_to test_report_project_pipeline_path(@project, @pipeline), data: { target: '#js-tab-tests', action: 'test_report', toggle: 'tab' }, class: 'test-tab' do = s_('TestReports|Tests') - %span.badge.badge-pill.js-test-report-badge-counter= @pipeline.test_report_summary.total[:count] + %span.badge.badge-pill.gl-badge.badge-muted.sm.js-test-report-badge-counter= @pipeline.test_report_summary.total[:count] = render_if_exists "projects/pipelines/tabs_holder", pipeline: @pipeline, project: @project .tab-content diff --git a/app/views/projects/project_members/index.html.haml b/app/views/projects/project_members/index.html.haml index 0e4100208d9..01114b8b4f7 100644 --- a/app/views/projects/project_members/index.html.haml +++ b/app/views/projects/project_members/index.html.haml @@ -18,7 +18,11 @@ = html_escape(_("Members can be added by project %{i_open}Maintainers%{i_close} or %{i_open}Owners%{i_close}")) % { i_open: '<i>'.html_safe, i_close: '</i>'.html_safe } .col-md-12.col-lg-6 .gl-display-flex.gl-flex-wrap.gl-justify-content-end - .js-invite-group-trigger{ data: { classes: 'gl-mt-3 gl-sm-w-auto gl-w-full', display_text: _('Invite a group') } } + = link_to _("Import a project"), + import_project_project_members_path(@project), + class: "btn btn-default btn-md gl-button gl-mt-3 gl-sm-w-auto gl-w-full", + title: _("Import members from another project") + .js-invite-group-trigger{ data: { classes: 'gl-mt-3 gl-sm-w-auto gl-w-full gl-sm-ml-3', display_text: _('Invite a group') } } .js-invite-members-trigger{ data: { variant: 'success', classes: 'gl-mt-3 gl-sm-w-auto gl-w-full gl-sm-ml-3', display_text: _('Invite members') } } = render 'projects/invite_members_modal', project: @project diff --git a/app/views/projects/runners/_group_runners.html.haml b/app/views/projects/runners/_group_runners.html.haml index b37b530c33f..5d737bb3901 100644 --- a/app/views/projects/runners/_group_runners.html.haml +++ b/app/views/projects/runners/_group_runners.html.haml @@ -13,7 +13,7 @@ %br %br - if @project.group_runners_enabled? - = link_to toggle_group_runners_project_runners_path(@project), class: 'btn gl-button btn-warning-secondary', method: :post do + = link_to toggle_group_runners_project_runners_path(@project), class: 'btn gl-button btn-default', method: :post do = _('Disable group runners') - else = link_to toggle_group_runners_project_runners_path(@project), class: 'btn gl-button btn-confirm-secondary', method: :post do diff --git a/app/views/projects/runners/_shared_runners.html.haml b/app/views/projects/runners/_shared_runners.html.haml index fccfca38013..f7248baeb27 100644 --- a/app/views/projects/runners/_shared_runners.html.haml +++ b/app/views/projects/runners/_shared_runners.html.haml @@ -9,10 +9,10 @@ = _('Shared runners disabled on group level') - else - if @project.shared_runners_enabled? - = link_to toggle_shared_runners_project_runners_path(@project), class: 'btn gl-button btn-warning-secondary', method: :post do + = link_to toggle_shared_runners_project_runners_path(@project), class: 'btn gl-button btn-default', method: :post do = _('Disable shared runners') - else - = link_to toggle_shared_runners_project_runners_path(@project), class: 'btn gl-button btn-confirm', method: :post do + = link_to toggle_shared_runners_project_runners_path(@project), class: 'btn gl-button btn-confirm-secondary', method: :post do = _('Enable shared runners') for this project diff --git a/app/views/projects/settings/packages_and_registries/index.html.haml b/app/views/projects/settings/packages_and_registries/index.html.haml new file mode 100644 index 00000000000..561ac7b347d --- /dev/null +++ b/app/views/projects/settings/packages_and_registries/index.html.haml @@ -0,0 +1,16 @@ +- breadcrumb_title _('Packages & Registries') +- page_title _('Packages & Registries') +- @content_class = 'limit-container-width' unless fluid_layout +- expanded = true + +%section.settings.no-animate#js-registry-policies{ class: ('expanded' if expanded) } + .settings-header + %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only + = _("Clean up image tags") + %button.btn.gl-button.btn-default.js-settings-toggle{ type: 'button' } + = expanded ? _('Collapse') : _('Expand') + %p + = _("Save space and find images in the Container Registry. Remove unneeded tags and keep only the ones you want.") + = link_to _('How does cleanup work?'), help_page_path('user/packages/container_registry/index', anchor: 'cleanup-policy'), target: '_blank', rel: 'noopener noreferrer' + .settings-content + = render 'projects/registry/settings/index' diff --git a/app/views/projects/triggers/_trigger.html.haml b/app/views/projects/triggers/_trigger.html.haml index 2def6c06458..081afacdaa6 100644 --- a/app/views/projects/triggers/_trigger.html.haml +++ b/app/views/projects/triggers/_trigger.html.haml @@ -30,8 +30,8 @@ %td.text-right.trigger-actions - revoke_trigger_confirmation = "By revoking a trigger you will break any processes making use of it. Are you sure?" - if can?(current_user, :admin_trigger, trigger) - = link_to edit_project_trigger_path(@project, trigger), method: :get, title: "Edit", class: "gl-button btn btn-default btn-sm" do + = link_to edit_project_trigger_path(@project, trigger), method: :get, title: "Edit", class: "gl-button btn btn-default btn-icon" do = sprite_icon('pencil') - if can?(current_user, :manage_trigger, trigger) - = link_to project_trigger_path(@project, trigger), data: { confirm: revoke_trigger_confirmation, testid: 'trigger_revoke_button' }, method: :delete, title: "Revoke", class: "gl-button btn btn-default btn-sm btn-trigger-revoke" do + = link_to project_trigger_path(@project, trigger), data: { confirm: revoke_trigger_confirmation, testid: 'trigger_revoke_button' }, method: :delete, title: "Revoke", class: "gl-button btn btn-default btn-icon btn-trigger-revoke gl-ml-3" do = sprite_icon('remove') diff --git a/app/views/shared/milestones/_form_dates.html.haml b/app/views/shared/milestones/_form_dates.html.haml index e995584309a..e0664c1feba 100644 --- a/app/views/shared/milestones/_form_dates.html.haml +++ b/app/views/shared/milestones/_form_dates.html.haml @@ -3,11 +3,11 @@ .col-form-label.col-sm-2 = f.label :start_date, _('Start Date') .col-sm-10 - = f.text_field :start_date, class: "datepicker form-control", data: { qa_selector: "start_date_field" }, placeholder: _('Select start date'), autocomplete: 'off' + = f.text_field :start_date, class: "datepicker form-control gl-form-input", data: { qa_selector: "start_date_field" }, placeholder: _('Select start date'), autocomplete: 'off' %a.inline.float-right.gl-mt-2.js-clear-start-date{ href: "#" }= _('Clear start date') .form-group.row .col-form-label.col-sm-2 = f.label :due_date, _('Due Date') .col-sm-10 - = f.text_field :due_date, class: "datepicker form-control", data: { qa_selector: "due_date_field" }, placeholder: _('Select due date'), autocomplete: 'off' + = f.text_field :due_date, class: "datepicker form-control gl-form-input", data: { qa_selector: "due_date_field" }, placeholder: _('Select due date'), autocomplete: 'off' %a.inline.float-right.gl-mt-2.js-clear-due-date{ href: "#" }= _('Clear due date') diff --git a/app/views/shared/milestones/_search_form.html.haml b/app/views/shared/milestones/_search_form.html.haml index 403a0224a85..1c51f1ad09d 100644 --- a/app/views/shared/milestones/_search_form.html.haml +++ b/app/views/shared/milestones/_search_form.html.haml @@ -1,7 +1,7 @@ = form_tag request.path, method: :get do |f| = search_field_tag :search_title, params[:search_title], placeholder: _('Filter by milestone name'), - class: 'form-control input-short', + class: 'form-control gl-form-input input-short', spellcheck: false = hidden_field_tag :state, params[:state] = hidden_field_tag :sort, params[:sort] |