diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-12-20 17:22:11 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-12-20 17:22:11 +0300 |
commit | 0c872e02b2c822e3397515ec324051ff540f0cd5 (patch) | |
tree | ce2fb6ce7030e4dad0f4118d21ab6453e5938cdd /app/views/projects | |
parent | f7e05a6853b12f02911494c4b3fe53d9540d74fc (diff) |
Add latest changes from gitlab-org/gitlab@15-7-stable-eev15.7.0-rc42
Diffstat (limited to 'app/views/projects')
79 files changed, 442 insertions, 649 deletions
diff --git a/app/views/projects/_files.html.haml b/app/views/projects/_files.html.haml index 51222784847..712d6fabf82 100644 --- a/app/views/projects/_files.html.haml +++ b/app/views/projects/_files.html.haml @@ -1,20 +1,23 @@ +- show_auto_devops_callout = show_auto_devops_callout?(@project) - is_project_overview = local_assigns.fetch(:is_project_overview, false) - ref = local_assigns.fetch(:ref) { current_ref } - project = local_assigns.fetch(:project) { @project } -- show_auto_devops_callout = show_auto_devops_callout?(@project) - add_page_startup_api_call logs_file_project_ref_path(@project, ref, @path, format: "json", offset: 0) - if readme_path = @project.repository.readme_path - add_page_startup_api_call project_blob_path(@project, tree_join(@ref, readme_path), viewer: "rich", format: "json") #tree-holder.tree-holder.clearfix.js-per-page{ data: { blame_per_page: Projects::BlameService::PER_PAGE } } - .nav-block.gl-display-flex.gl-xs-flex-direction-column.gl-align-items-stretch - = render 'projects/tree/tree_header', tree: @tree, is_project_overview: is_project_overview - .info-well.gl-display-none.gl-sm-display-flex.project-last-commit.gl-flex-direction-column #js-last-commit.gl-m-auto = gl_loading_icon(size: 'md') #js-code-owners + .nav-block.gl-display-flex.gl-xs-flex-direction-column.gl-align-items-stretch + = render 'projects/tree/tree_header', tree: @tree, is_project_overview: is_project_overview + + - if project.forked? && Feature.enabled?(:fork_divergence_counts, @project.fork_source) + = render 'projects/fork_info' + - if is_project_overview .project-buttons.gl-mb-5.js-show-on-project-root{ data: { qa_selector: 'project_buttons' } } = render 'stat_anchor_list', anchors: @project.statistics_buttons(show_auto_devops_callout: show_auto_devops_callout), project_buttons: true diff --git a/app/views/projects/_flash_messages.html.haml b/app/views/projects/_flash_messages.html.haml index 7395495b537..2d9f7e49ddc 100644 --- a/app/views/projects/_flash_messages.html.haml +++ b/app/views/projects/_flash_messages.html.haml @@ -2,11 +2,13 @@ = content_for :flash_message do = render partial: 'deletion_failed', locals: { project: project } - - if current_user && can?(current_user, :download_code, project) + - if current_user && can?(current_user, :read_code, project) = render 'shared/no_ssh' = render 'shared/no_password' - unless project.empty_repo? = render 'shared/auto_devops_implicitly_enabled_banner', project: project + - if show_auto_devops_callout?(@project) + = render 'shared/auto_devops_callout' = render_if_exists 'projects/above_size_limit_warning', project: project = render_if_exists 'shared/shared_runners_minutes_limit', project: project, classes: [container_class, ("limit-container-width" unless fluid_layout)] = render_if_exists 'projects/terraform_banner', project: project diff --git a/app/views/projects/_fork_info.html.haml b/app/views/projects/_fork_info.html.haml new file mode 100644 index 00000000000..7fe30214e97 --- /dev/null +++ b/app/views/projects/_fork_info.html.haml @@ -0,0 +1,14 @@ +.info-well.gl-sm-display-flex.gl-flex-direction-column + .well-segment.gl-p-5.gl-w-full.gl-display-flex + .gl-icon.s32.gl-mt-4.gl-mr-4.gl-text-center + = sprite_icon('fork') + - source = visible_fork_source(@project) + - if source + %div + #{ s_('ForkedFromProjectPath|Forked from') } + = link_to source.full_name, project_path(source), data: { qa_selector: 'forked_from_link' } + .gl-text-secondary + = fork_divergence_message(::Projects::Forks::DivergenceCounts.new(@project, @ref).counts) + - else + .gl-py-4 + = s_('ForkedFromProjectPath|Forked from an inaccessible project') diff --git a/app/views/projects/_home_panel.html.haml b/app/views/projects/_home_panel.html.haml index a862b841008..dc426f2f6b7 100644 --- a/app/views/projects/_home_panel.html.haml +++ b/app/views/projects/_home_panel.html.haml @@ -4,17 +4,16 @@ - cache_enabled = Feature.enabled?(:cache_home_panel, @project, type: :development) .project-home-panel.js-show-on-project-root.gl-my-5{ class: [("empty-project" if empty_repo)] } - .gl-display-flex.gl-justify-content-space-between.gl-flex-wrap.gl-sm-flex-direction-column.gl-mb-3 - .home-panel-title-row.gl-display-flex + .gl-display-flex.gl-justify-content-space-between.gl-flex-wrap.gl-sm-flex-direction-column.gl-mb-3.gl-gap-5 + .home-panel-title-row.gl-display-flex.gl-align-items-center %div{ class: 'avatar-container rect-avatar s64 home-panel-avatar gl-flex-shrink-0 gl-w-11 gl-h-11 gl-mr-3! float-none' } = project_icon(@project, alt: @project.name, class: 'avatar avatar-tile s64', width: 64, height: 64, itemprop: 'image') - .d-flex.flex-column.flex-wrap.align-items-baseline - .d-inline-flex.align-items-baseline - %h1.home-panel-title.gl-mt-3.gl-mb-2.gl-font-size-h1{ data: { qa_selector: 'project_name_content' }, itemprop: 'name' } - = @project.name - %span.visibility-icon.gl-text-secondary.gl-ml-2.has-tooltip{ data: { container: 'body' }, title: visibility_icon_description(@project) } - = visibility_level_icon(@project.visibility_level, options: { class: 'icon' }) - = render_if_exists 'compliance_management/compliance_framework/compliance_framework_badge', project: @project + %div + %h1.home-panel-title.gl-font-size-h1.gl-mt-3.gl-mb-2.gl-display-flex{ data: { qa_selector: 'project_name_content' }, itemprop: 'name' } + = @project.name + %span.visibility-icon.gl-text-secondary.has-tooltip.gl-ml-2{ data: { container: 'body' }, title: visibility_icon_description(@project) } + = visibility_level_icon(@project.visibility_level, options: { class: 'icon' }) + = render_if_exists 'compliance_management/compliance_framework/compliance_framework_badge', project: @project, additional_classes: 'gl-align-self-center gl-ml-2' .home-panel-metadata.gl-font-sm.gl-text-secondary.gl-font-base.gl-font-weight-normal.gl-line-height-normal{ data: { qa_selector: 'project_id_content' }, itemprop: 'identifier' } - if can?(current_user, :read_project, @project) %span.gl-display-inline-block.gl-vertical-align-middle @@ -25,22 +24,20 @@ = render 'shared/members/access_request_links', source: @project = cache_if(cache_enabled, [@project, @project.star_count, @project.forks_count, :buttons, current_user, @notification_setting], expires_in: 1.day) do - .project-repo-buttons.gl-display-flex.gl-justify-content-md-end.gl-align-items-start.gl-flex-wrap.gl-mt-5 + .project-repo-buttons.gl-display-flex.gl-justify-content-md-end.gl-align-items-center.gl-flex-wrap.gl-gap-3 - if current_user - if current_user.admin? - = link_to [:admin, @project], class: 'btn gl-button btn-icon gl-align-self-start gl-py-2! gl-mr-3', title: _('View project in admin area'), + = link_to [:admin, @project], class: 'btn btn-default gl-button btn-icon', title: _('View project in admin area'), data: {toggle: 'tooltip', placement: 'top', container: 'body'} do = sprite_icon('admin') - .gl-display-flex.gl-align-items-start.gl-mr-3 - - if @notification_setting - .js-vue-notification-dropdown{ data: { button_size: "small", disabled: emails_disabled.to_s, dropdown_items: notification_dropdown_items(@notification_setting).to_json, notification_level: @notification_setting.level, help_page_path: help_page_path('user/profile/notifications'), project_id: @project.id, no_flip: 'true' } } + - if @notification_setting + .js-vue-notification-dropdown{ data: { disabled: emails_disabled.to_s, dropdown_items: notification_dropdown_items(@notification_setting).to_json, notification_level: @notification_setting.level, help_page_path: help_page_path('user/profile/notifications'), project_id: @project.id, no_flip: 'true' } } - .count-buttons.gl-display-flex.gl-align-items-flex-start - = render 'projects/buttons/star' - = render 'projects/buttons/fork' + = render 'projects/buttons/star' + = render 'projects/buttons/fork' - - if can?(current_user, :download_code, @project) - = cache_if(cache_enabled, [@project, :download_code], expires_in: 1.minute) do + - if can?(current_user, :read_code, @project) + = cache_if(cache_enabled, [@project, :read_code], expires_in: 1.minute) do %nav.project-stats - if @project.empty_repo? = render 'stat_anchor_list', anchors: @project.empty_repo_statistics_anchors @@ -56,7 +53,7 @@ %button.btn.gl-button.btn-blank.btn-link.js-read-more-trigger.d-lg-none{ type: "button" } = _("Read more") - - if @project.forked? + - if @project.forked? && Feature.disabled?(:fork_divergence_counts, @project.fork_source) %p - source = visible_fork_source(@project) - if source diff --git a/app/views/projects/_invite_groups_modal.html.haml b/app/views/projects/_invite_groups_modal.html.haml index 40dc0009b24..101acd9149e 100644 --- a/app/views/projects/_invite_groups_modal.html.haml +++ b/app/views/projects/_invite_groups_modal.html.haml @@ -1,3 +1,3 @@ - return unless can_invite_members_for_project?(project) -.js-invite-groups-modal{ data: common_invite_group_modal_data(project, ProjectMember, 'true') } +.js-invite-groups-modal{ data: { reload_page_on_submit: local_assigns.fetch(:reload_page_on_submit, false).to_s }.merge(common_invite_group_modal_data(project, ProjectMember, 'true')) } diff --git a/app/views/projects/_invite_members_modal.html.haml b/app/views/projects/_invite_members_modal.html.haml index 16288f4357a..53f74a0f270 100644 --- a/app/views/projects/_invite_members_modal.html.haml +++ b/app/views/projects/_invite_members_modal.html.haml @@ -2,4 +2,5 @@ .js-invite-members-modal{ data: { is_project: 'true', access_levels: ProjectMember.permissible_access_level_roles(current_user, project).to_json, + reload_page_on_submit: local_assigns.fetch(:reload_page_on_submit, false).to_s, help_link: help_page_url('user/permissions') }.merge(common_invite_modal_dataset(project)).merge(users_filter_data(project.group)) } diff --git a/app/views/projects/_merge_request_merge_checks_settings.html.haml b/app/views/projects/_merge_request_merge_checks_settings.html.haml index 8c12399fdbb..bb7a7731067 100644 --- a/app/views/projects/_merge_request_merge_checks_settings.html.haml +++ b/app/views/projects/_merge_request_merge_checks_settings.html.haml @@ -3,17 +3,6 @@ .form-group %b= s_('ProjectSettings|Merge checks') %p.text-secondary= s_('ProjectSettings|These checks must pass before merge requests can be merged.') - .builds-feature - = form.gitlab_ui_checkbox_component :only_allow_merge_if_pipeline_succeeds, - s_('ProjectSettings|Pipelines must succeed'), - help_text: s_("ProjectSettings|Merge requests can't be merged if the latest pipeline did not succeed or is still running.") - .gl-pl-6 - = form.gitlab_ui_checkbox_component :allow_merge_on_skipped_pipeline, - s_('ProjectSettings|Skipped pipelines are considered successful'), - help_text: s_('ProjectSettings|Introduces the risk of merging changes that do not pass the pipeline.'), - checkbox_options: { class: 'gl-pl-6' } + = render 'projects/merge_request_pipelines_and_threads_options', form: form, project: @project = render_if_exists 'projects/merge_request_merge_checks_status_checks', form: form, project: @project - = form.gitlab_ui_checkbox_component :only_allow_merge_if_all_discussions_are_resolved, - s_('ProjectSettings|All threads must be resolved'), - checkbox_options: { data: { qa_selector: 'allow_merge_if_all_discussions_are_resolved_checkbox' } } = render_if_exists 'projects/merge_request_merge_checks_jira_enforcement', form: form, project: @project diff --git a/app/views/projects/_merge_request_pipelines_and_threads_options.html.haml b/app/views/projects/_merge_request_pipelines_and_threads_options.html.haml new file mode 100644 index 00000000000..94f8d3cc4a3 --- /dev/null +++ b/app/views/projects/_merge_request_pipelines_and_threads_options.html.haml @@ -0,0 +1,13 @@ +- form = local_assigns.fetch(:form) + += form.gitlab_ui_checkbox_component :only_allow_merge_if_pipeline_succeeds, + s_('ProjectSettings|Pipelines must succeed'), + help_text: s_("ProjectSettings|Merge requests can't be merged if the latest pipeline did not succeed or is still running.") +.gl-pl-6 + = form.gitlab_ui_checkbox_component :allow_merge_on_skipped_pipeline, + s_('ProjectSettings|Skipped pipelines are considered successful'), + help_text: s_('ProjectSettings|Introduces the risk of merging changes that do not pass the pipeline.'), + checkbox_options: { class: 'gl-pl-6' } += form.gitlab_ui_checkbox_component :only_allow_merge_if_all_discussions_are_resolved, + s_('ProjectSettings|All threads must be resolved'), + checkbox_options: { data: { qa_selector: 'allow_merge_if_all_discussions_are_resolved_checkbox' } } diff --git a/app/views/projects/_new_project_fields.html.haml b/app/views/projects/_new_project_fields.html.haml index 0699e39b420..ec83782985b 100644 --- a/app/views/projects/_new_project_fields.html.haml +++ b/app/views/projects/_new_project_fields.html.haml @@ -10,6 +10,7 @@ = f.label :name, class: 'label-bold' do %span= _("Project name") = f.text_field :name, placeholder: "My awesome project", class: "form-control gl-form-input input-lg", data: { qa_selector: 'project_name', track_label: "#{track_label}", track_action: "activate_form_input", track_property: "project_name", track_value: "" }, required: true, aria: { required: true } + #project_name_error.gl-field-error.hidden .form-group.project-path.col-sm-6.gl-pr-0 = f.label :namespace_id, class: 'label-bold' do %span= _('Project URL') @@ -18,6 +19,8 @@ - namespace_id = namespace_id_from(params) .js-vue-new-project-url-select{ data: { namespace_full_path: GroupFinder.new(current_user).execute(id: namespace_id)&.full_path || @current_user_group&.full_path, namespace_id: namespace_id || @current_user_group&.id, + input_id: 'project_namespace_id', + input_name: 'project[namespace_id]', root_url: root_url, track_label: track_label, user_namespace_id: current_user.namespace.id } } diff --git a/app/views/projects/blob/_editor.html.haml b/app/views/projects/blob/_editor.html.haml index a907e175443..87a6b54d697 100644 --- a/app/views/projects/blob/_editor.html.haml +++ b/app/views/projects/blob/_editor.html.haml @@ -28,7 +28,8 @@ .file-buttons.gl-display-flex.gl-align-items-center.gl-justify-content-end - if is_markdown - = render 'shared/blob/markdown_buttons', show_fullscreen_button: false, supports_file_upload: false + - unless Feature.enabled?(:source_editor_toolbar, current_user) + = render 'shared/blob/markdown_buttons', show_fullscreen_button: false, supports_file_upload: false %span.soft-wrap-toggle = render Pajamas::ButtonComponent.new(icon: 'soft-unwrap', button_options: { class: 'no-wrap' }) do = _("No wrap") diff --git a/app/views/projects/blob/_template_selectors.html.haml b/app/views/projects/blob/_template_selectors.html.haml index 249c474587c..4fe68c1ce1a 100644 --- a/app/views/projects/blob/_template_selectors.html.haml +++ b/app/views/projects/blob/_template_selectors.html.haml @@ -4,12 +4,12 @@ - toggle_text = should_suggest_gitlab_ci_yml? ? '.gitlab-ci.yml' : 'Select a template type' = dropdown_tag(_(toggle_text), options: { toggle_class: 'js-template-type-selector', dropdown_class: 'dropdown-menu-selectable', data: { qa_selector: 'template_type_dropdown' } }) .license-selector.js-license-selector-wrap.js-template-selector-wrap.hidden - = dropdown_tag(_("Apply a template"), options: { toggle_class: 'js-license-selector', dropdown_class: 'dropdown-menu-selectable', filter: true, placeholder: "Filter", data: { data: licenses_for_select(@project), project: @project.name, fullname: @project.namespace.human_name, qa_selector: 'license_dropdown' } } ) + = dropdown_tag(_("Apply a template"), options: { toggle_class: 'js-license-selector', dropdown_class: 'dropdown-menu-selectable', filter: true, placeholder: "Filter", data: { data: licenses_for_select(@project), project: @project.name, fullname: @project.namespace.human_name, qa_selector: 'license_dropdown' } }) .gitignore-selector.js-gitignore-selector-wrap.js-template-selector-wrap.hidden - = dropdown_tag(_("Apply a template"), options: { toggle_class: 'js-gitignore-selector', dropdown_class: 'dropdown-menu-selectable', filter: true, placeholder: "Filter", data: { data: gitignore_names(@project), qa_selector: 'gitignore_dropdown' } } ) + = dropdown_tag(_("Apply a template"), options: { toggle_class: 'js-gitignore-selector', dropdown_class: 'dropdown-menu-selectable', filter: true, placeholder: "Filter", data: { data: gitignore_names(@project), qa_selector: 'gitignore_dropdown' } }) .metrics-dashboard-selector.js-metrics-dashboard-selector-wrap.js-template-selector-wrap.hidden - = dropdown_tag(_("Apply a template"), options: { toggle_class: 'js-metrics-dashboard-selector', dropdown_class: 'dropdown-menu-selectable', filter: true, placeholder: "Filter", data: { data: metrics_dashboard_ymls(@project), qa_selector: 'metrics_dashboard_dropdown' } } ) + = dropdown_tag(_("Apply a template"), options: { toggle_class: 'js-metrics-dashboard-selector', dropdown_class: 'dropdown-menu-selectable', filter: true, placeholder: "Filter", data: { data: metrics_dashboard_ymls(@project), qa_selector: 'metrics_dashboard_dropdown' } }) #gitlab-ci-yml-selector.gitlab-ci-yml-selector.js-gitlab-ci-yml-selector-wrap.js-template-selector-wrap.hidden - = dropdown_tag(_("Apply a template"), options: { toggle_class: 'js-gitlab-ci-yml-selector', dropdown_class: 'dropdown-menu-selectable', filter: true, placeholder: "Filter", data: { data: gitlab_ci_ymls(@project), selected: params[:template], qa_selector: 'gitlab_ci_yml_dropdown' } } ) + = dropdown_tag(_("Apply a template"), options: { toggle_class: 'js-gitlab-ci-yml-selector', dropdown_class: 'dropdown-menu-selectable', filter: true, placeholder: "Filter", data: { data: gitlab_ci_ymls(@project), selected: params[:template], qa_selector: 'gitlab_ci_yml_dropdown' } }) .dockerfile-selector.js-dockerfile-selector-wrap.js-template-selector-wrap.hidden - = dropdown_tag(_("Apply a template"), options: { toggle_class: 'js-dockerfile-selector', dropdown_class: 'dropdown-menu-selectable', filter: true, placeholder: "Filter", data: { data: dockerfile_names(@project), qa_selector: 'dockerfile_dropdown' } } ) + = dropdown_tag(_("Apply a template"), options: { toggle_class: 'js-dockerfile-selector', dropdown_class: 'dropdown-menu-selectable', filter: true, placeholder: "Filter", data: { data: dockerfile_names(@project), qa_selector: 'dockerfile_dropdown' } }) diff --git a/app/views/projects/branches/new.html.haml b/app/views/projects/branches/new.html.haml index 63d0cf7145d..91efd5ef048 100644 --- a/app/views/projects/branches/new.html.haml +++ b/app/views/projects/branches/new.html.haml @@ -17,18 +17,12 @@ .form-text.text-muted.text-danger.js-branch-name-error .form-group.row = label_tag :ref, _('Create from'), class: 'col-form-label col-sm-2' - .col-sm-10.create-from - .dropdown - = hidden_field_tag :ref, default_ref - = button_tag type: 'button', title: default_ref, class: 'dropdown-menu-toggle wide js-branch-select monospace', required: true, data: { toggle: 'dropdown', selected: default_ref, field_name: 'ref' } do - .text-left.dropdown-toggle-text= default_ref - = sprite_icon('chevron-down', css_class: "dropdown-menu-toggle-icon gl-top-3") - = render 'shared/ref_dropdown', dropdown_class: 'wide' + .col-sm-auto.create-from + .js-new-branch-ref-selector{ data: { project_id: @project.id, default_branch_name: default_ref, hidden_input_name: 'ref' } } .form-text.text-muted = _('Existing branch name, tag, or commit SHA') .form-actions = render Pajamas::ButtonComponent.new(variant: :confirm, button_options: { type: 'submit', class: 'gl-mr-3' }) do = _('Create branch') = link_to _('Cancel'), project_branches_path(@project), class: 'gl-button btn btn-default btn-cancel' --# haml-lint:disable InlineJavaScript -%script#availableRefs{ type: "application/json" }= @project.repository.ref_names.to_json.html_safe + diff --git a/app/views/projects/buttons/_clone.html.haml b/app/views/projects/buttons/_clone.html.haml index 34aecd31c57..a755cb9f5b0 100644 --- a/app/views/projects/buttons/_clone.html.haml +++ b/app/views/projects/buttons/_clone.html.haml @@ -27,28 +27,28 @@ = render_if_exists 'projects/buttons/geo' = render_if_exists 'projects/buttons/kerberos_clone_field' %li.divider.mt-2 - %li.pt-2.gl-new-dropdown-item + %li.pt-2.gl-dropdown-item %label.label-bold{ class: 'gl-px-4!' } = _('Open in your IDE') - if ssh_enabled? - escaped_ssh_url_to_repo = CGI.escape(project.ssh_url_to_repo) %a.dropdown-item.open-with-link{ href: 'vscode://vscode.git/clone?url=' + escaped_ssh_url_to_repo } - .gl-new-dropdown-item-text-wrapper + .gl-dropdown-item-text-wrapper = _('Visual Studio Code (SSH)') - if http_enabled? - escaped_http_url_to_repo = CGI.escape(project.http_url_to_repo) %a.dropdown-item.open-with-link{ href: 'vscode://vscode.git/clone?url=' + escaped_http_url_to_repo } - .gl-new-dropdown-item-text-wrapper + .gl-dropdown-item-text-wrapper = _('Visual Studio Code (HTTPS)') - if ssh_enabled? %a.dropdown-item.open-with-link{ href: 'jetbrains://idea/checkout/git?idea.required.plugins.id=Git4Idea&checkout.repo=' + escaped_ssh_url_to_repo } - .gl-new-dropdown-item-text-wrapper + .gl-dropdown-item-text-wrapper = _('IntelliJ IDEA (SSH)') - if http_enabled? %a.dropdown-item.open-with-link{ href: 'jetbrains://idea/checkout/git?idea.required.plugins.id=Git4Idea&checkout.repo=' + escaped_http_url_to_repo } - .gl-new-dropdown-item-text-wrapper + .gl-dropdown-item-text-wrapper = _('IntelliJ IDEA (HTTPS)') - if show_xcode_link?(@project) %a.dropdown-item.open-with-link{ href: xcode_uri_to_repo(@project) } - .gl-new-dropdown-item-text-wrapper + .gl-dropdown-item-text-wrapper = _("Xcode") diff --git a/app/views/projects/buttons/_download.html.haml b/app/views/projects/buttons/_download.html.haml index 23dcb7f41e1..1fbc399c3ff 100644 --- a/app/views/projects/buttons/_download.html.haml +++ b/app/views/projects/buttons/_download.html.haml @@ -4,7 +4,7 @@ - if !project.empty_repo? && can?(current_user, :download_code, project) - archive_prefix = "#{project.path}-#{ref.tr('/', '-')}" - .project-action-button.dropdown.gl-new-dropdown.inline> + .project-action-button.dropdown.gl-dropdown.inline> %button.gl-button.btn.btn-default.dropdown-toggle.gl-dropdown-toggle.dropdown-icon-only.has-tooltip{ title: s_('DownloadSource|Download'), 'data-toggle' => 'dropdown', 'aria-label' => s_('DownloadSource|Download'), 'data-display' => 'static', data: { qa_selector: 'download_source_code_button' } } = sprite_icon('download', css_class: 'gl-icon dropdown-icon') %span.sr-only= _('Select Archive Format') diff --git a/app/views/projects/buttons/_fork.html.haml b/app/views/projects/buttons/_fork.html.haml index 3621853430d..97186149a9d 100644 --- a/app/views/projects/buttons/_fork.html.haml +++ b/app/views/projects/buttons/_fork.html.haml @@ -2,17 +2,17 @@ - if current_user .count-badge.btn-group - if current_user.already_forked?(@project) && current_user.forkable_namespaces.size < 2 - = link_to namespace_project_path(current_user, current_user.fork_of(@project)), title: s_('ProjectOverview|Go to your fork'), class: 'gl-button btn btn-default btn-sm has-tooltip fork-btn' do + = link_to namespace_project_path(current_user, current_user.fork_of(@project)), title: s_('ProjectOverview|Go to your fork'), class: 'gl-button btn btn-default has-tooltip fork-btn' do = sprite_icon('fork', css_class: 'icon') %span= s_('ProjectOverview|Fork') - else - disabled_tooltip = fork_button_disabled_tooltip(@project) - - count_class = 'disabled' unless can?(current_user, :download_code, @project) + - count_class = 'disabled' unless can?(current_user, :read_code, @project) - button_class = 'disabled' if disabled_tooltip %span.btn-group{ class: ('has-tooltip' if disabled_tooltip), title: disabled_tooltip } - = link_to new_project_fork_path(@project), class: "gl-button btn btn-default btn-sm fork-btn #{button_class}" do + = link_to new_project_fork_path(@project), class: "gl-button btn btn-default fork-btn #{button_class}" do = sprite_icon('fork', css_class: 'icon') %span= s_('ProjectOverview|Fork') - = link_to project_forks_path(@project), title: n_(s_('ProjectOverview|Forks'), s_('ProjectOverview|Forks'), @project.forks_count), class: "gl-button btn btn-default btn-sm count has-tooltip fork-count #{count_class}" do + = link_to project_forks_path(@project), title: n_(s_('ProjectOverview|Forks'), s_('ProjectOverview|Forks'), @project.forks_count), class: "gl-button btn btn-default count has-tooltip fork-count #{count_class}" do = @project.forks_count diff --git a/app/views/projects/buttons/_star.html.haml b/app/views/projects/buttons/_star.html.haml index eaf906ad89f..d4dcfbdff54 100644 --- a/app/views/projects/buttons/_star.html.haml +++ b/app/views/projects/buttons/_star.html.haml @@ -3,15 +3,15 @@ - icon = starred ? 'star' : 'star-o' - button_text = starred ? s_('ProjectOverview|Unstar') : s_('ProjectOverview|Star') - button_text_classes = starred ? 'starred' : '' - .count-badge.d-inline-flex.align-item-stretch.gl-mr-3.btn-group - = render Pajamas::ButtonComponent.new(size: :small, icon: icon, button_text_classes: button_text_classes, button_options: { class: 'star-btn toggle-star', data: { endpoint: toggle_star_project_path(@project, :json) } }) do + .count-badge.d-inline-flex.align-item-stretch.btn-group + = render Pajamas::ButtonComponent.new(size: :medium, icon: icon, button_text_classes: button_text_classes, button_options: { class: 'star-btn toggle-star', data: { endpoint: toggle_star_project_path(@project, :json) } }) do - button_text - = link_to project_starrers_path(@project), title: n_(s_('ProjectOverview|Starrer'), s_('ProjectOverview|Starrers'), @project.star_count), class: 'gl-button btn btn-default btn-sm has-tooltip star-count count' do + = link_to project_starrers_path(@project), title: n_(s_('ProjectOverview|Starrer'), s_('ProjectOverview|Starrers'), @project.star_count), class: 'gl-button btn btn-default has-tooltip star-count count' do = @project.star_count - else - .count-badge.d-inline-flex.align-item-stretch.gl-mr-3.btn-group - = link_to new_user_session_path, class: 'gl-button btn btn-default btn-sm has-tooltip star-btn', title: s_('ProjectOverview|You must sign in to star a project') do + .count-badge.d-inline-flex.align-item-stretch.btn-group + = link_to new_user_session_path, class: 'gl-button btn btn-default has-tooltip star-btn', title: s_('ProjectOverview|You must sign in to star a project') do = sprite_icon('star-o', css_class: 'icon') %span= s_('ProjectOverview|Star') - = link_to project_starrers_path(@project), title: n_(s_('ProjectOverview|Starrer'), s_('ProjectOverview|Starrers'), @project.star_count), class: 'gl-button btn btn-default btn-sm has-tooltip star-count count' do + = link_to project_starrers_path(@project), title: n_(s_('ProjectOverview|Starrer'), s_('ProjectOverview|Starrers'), @project.star_count), class: 'gl-button btn btn-default has-tooltip star-count count' do = @project.star_count diff --git a/app/views/projects/commit/_commit_box.html.haml b/app/views/projects/commit/_commit_box.html.haml index 6e202063900..079e24c6389 100644 --- a/app/views/projects/commit/_commit_box.html.haml +++ b/app/views/projects/commit/_commit_box.html.haml @@ -53,9 +53,7 @@ = ci_label_for_status(@last_pipeline.status) - if @last_pipeline.stages_count.nonzero? #{ n_(s_('Pipeline|with stage'), s_('Pipeline|with stages'), @last_pipeline.stages_count) } - .mr-widget-pipeline-graph - .stage-cell - .js-commit-pipeline-mini-graph{ data: { stages: @last_pipeline_stages.to_json.html_safe, full_path: @project.full_path, iid: @last_pipeline.iid, graphql_resource_etag: graphql_etag_pipeline_path(@last_pipeline) } } + .js-commit-pipeline-mini-graph{ data: { stages: @last_pipeline_stages.to_json.html_safe, full_path: @project.full_path, iid: @last_pipeline.iid, graphql_resource_etag: graphql_etag_pipeline_path(@last_pipeline) } } - if @last_pipeline.duration in = time_interval_in_words @last_pipeline.duration diff --git a/app/views/projects/commit/_signature.html.haml b/app/views/projects/commit/_signature.html.haml index 978d83bf2b4..c6f1e51049e 100644 --- a/app/views/projects/commit/_signature.html.haml +++ b/app/views/projects/commit/_signature.html.haml @@ -1,3 +1,3 @@ - if signature - - uri = "projects/commit/#{'x509/' if x509_signature?(signature)}" + - uri = "projects/commit/#{'x509/' if signature.x509?}" = render partial: "#{uri}#{signature.verification_status}_signature_badge", locals: { signature: signature } diff --git a/app/views/projects/commit/_signature_badge.html.haml b/app/views/projects/commit/_signature_badge.html.haml index fb30bfc2953..ad6b524c01b 100644 --- a/app/views/projects/commit/_signature_badge.html.haml +++ b/app/views/projects/commit/_signature_badge.html.haml @@ -17,18 +17,23 @@ - content = capture do - if show_user .clearfix - - uri_signature_badge_user = "projects/commit/#{'x509/' if x509_signature?(signature)}signature_badge_user" + - uri_signature_badge_user = "projects/commit/#{'x509/' if signature.x509?}signature_badge_user" = render partial: "#{uri_signature_badge_user}", locals: { signature: signature } - - if x509_signature?(signature) + - if signature.x509? = render partial: "projects/commit/x509/certificate_details", locals: { signature: signature } - = link_to(_('Learn more about X.509 signed commits'), help_page_path('user/project/repository/x509_signed_commits/index.md'), class: 'gpg-popover-help-link') + = link_to(_('Learn more about X.509 signed commits'), help_page_path('user/project/repository/x509_signed_commits/index.md'), class: 'gl-link gl-display-block') + - elsif ::Feature.enabled?(:ssh_commit_signatures, signature.project) && signature.ssh? + = _('SSH key fingerprint:') + %span.gl-font-monospace= signature.key&.fingerprint_sha256 || _('Unknown') + + = link_to(_('Learn about signing commits with SSH keys.'), help_page_path('user/project/repository/ssh_signed_commits/index.md'), class: 'gl-link gl-display-block') - else = _('GPG Key ID:') - %span.monospace= signature.gpg_key_primary_keyid + %span.gl-font-monospace= signature.gpg_key_primary_keyid - = link_to(_('Learn more about signing commits'), help_page_path('user/project/repository/gpg_signed_commits/index.md'), class: 'gpg-popover-help-link gl-display-block') + = link_to(_('Learn more about signing commits'), help_page_path('user/project/repository/gpg_signed_commits/index.md'), class: 'gl-link gl-display-block') %a{ role: 'button', tabindex: 0, class: css_classes, data: { toggle: 'popover', html: 'true', placement: 'top', title: title, content: content } } = label diff --git a/app/views/projects/commit/_signature_badge_user.html.haml b/app/views/projects/commit/_signature_badge_user.html.haml index b20198e76db..656adef6a72 100644 --- a/app/views/projects/commit/_signature_badge_user.html.haml +++ b/app/views/projects/commit/_signature_badge_user.html.haml @@ -1,7 +1,4 @@ -- gpg_key = signature.gpg_key -- user = gpg_key&.user -- user_name = signature.gpg_key_user_name -- user_email = signature.gpg_key_user_email +- user = signature.signed_by_user - if user = link_to user_path(user), class: 'gpg-popover-user-link' do @@ -11,11 +8,14 @@ %div %strong= user.name %div= user.to_reference -- else - = mail_to user_email do - %div - = user_avatar_without_link(user_name: user_name, user_email: user_email, size: 32) +- elsif signature.gpg? # SSH signatures do not have an email embedded in them + - user_name = signature.gpg_key_user_name + - user_email = signature.gpg_key_user_email + - if user_name && user_email + = mail_to user_email do + %div + = user_avatar_without_link(user_name: user_name, user_email: user_email, size: 32) - %div - %strong= user_name - %div= user_email + %div + %strong= user_name + %div= user_email diff --git a/app/views/projects/commit/x509/_signature_badge_user.html.haml b/app/views/projects/commit/x509/_signature_badge_user.html.haml index f3d39b21ec2..da749172369 100644 --- a/app/views/projects/commit/x509/_signature_badge_user.html.haml +++ b/app/views/projects/commit/x509/_signature_badge_user.html.haml @@ -1,5 +1,5 @@ - user_email = signature.x509_certificate.email -- user = signature.user +- user = signature.signed_by_user - if user = link_to user_path(user), class: 'gpg-popover-user-link' do diff --git a/app/views/projects/commits/_commits.html.haml b/app/views/projects/commits/_commits.html.haml index b5ecc9b0193..b79f17ae7b3 100644 --- a/app/views/projects/commits/_commits.html.haml +++ b/app/views/projects/commits/_commits.html.haml @@ -15,7 +15,7 @@ %li.commits-row{ data: { day: day } } %ul.content-list.commit-list.flex-list - if Feature.enabled?(:cached_commits, project) - = render partial: 'projects/commits/commit', collection: daily_commits, locals: { project: project, ref: ref, merge_request: merge_request }, cached: -> (commit) { commit_partial_cache_key(commit, ref: ref, merge_request: merge_request, request: request) } + = render partial: 'projects/commits/commit', collection: daily_commits, locals: { project: project, ref: ref, merge_request: merge_request }, cached: ->(commit) { commit_partial_cache_key(commit, ref: ref, merge_request: merge_request, request: request) } - else = render partial: 'projects/commits/commit', collection: daily_commits, locals: { project: project, ref: ref, merge_request: merge_request } @@ -29,7 +29,7 @@ %li.commits-row %ul.content-list.commit-list.flex-list - if Feature.enabled?(:cached_commits, project) - = render partial: 'projects/commits/commit', collection: context_commits, locals: { project: project, ref: ref, merge_request: merge_request }, cached: -> (commit) { commit_partial_cache_key(commit, ref: ref, merge_request: merge_request, request: request) } + = render partial: 'projects/commits/commit', collection: context_commits, locals: { project: project, ref: ref, merge_request: merge_request }, cached: ->(commit) { commit_partial_cache_key(commit, ref: ref, merge_request: merge_request, request: request) } - else = render partial: 'projects/commits/commit', collection: context_commits, locals: { project: project, ref: ref, merge_request: merge_request } diff --git a/app/views/projects/commits/show.html.haml b/app/views/projects/commits/show.html.haml index ae68a13929e..c129d978e7e 100644 --- a/app/views/projects/commits/show.html.haml +++ b/app/views/projects/commits/show.html.haml @@ -1,6 +1,7 @@ - breadcrumb_title _("Commits") - add_page_specific_style 'page_bundles/tree' - page_title _("Commits"), @ref + = content_for :meta_tags do = auto_discovery_link_tag(:atom, project_commits_path(@project, @ref, rss_url_options), title: "#{@project.name}:#{@ref} commits") @@ -9,7 +10,7 @@ .nav-block .tree-ref-container .tree-ref-holder - = render 'shared/ref_switcher', destination: 'commits' + #js-project-commits-ref-switcher{ data: { "project-id" => @project.id, "ref" => @ref, "commits_path": project_commits_path(@project) } } %ul.breadcrumb.repo-breadcrumb = commits_breadcrumbs @@ -24,7 +25,7 @@ = _("Create merge request") .control - = form_tag(project_commits_path(@project, @id), method: :get, class: 'commits-search-form js-signature-container', data: { 'signatures-path' => namespace_project_signatures_path }) do + = form_tag(project_commits_path(@project, @id, ref_type: @ref_type), method: :get, class: 'commits-search-form js-signature-container', data: { 'signatures-path' => namespace_project_signatures_path(ref_type: @ref_type)}) do = search_field_tag :search, params[:search], { placeholder: _('Search by message'), id: 'commits-search', class: 'form-control gl-form-input input-short gl-mt-3 gl-sm-mt-0 gl-min-w-full', spellcheck: false } .control.d-none.d-md-block = link_to project_commits_path(@project, @id, rss_url_options), title: _("Commits feed"), class: 'btn gl-button btn-default btn-icon' do diff --git a/app/views/projects/diffs/_diffs.html.haml b/app/views/projects/diffs/_diffs.html.haml index 11984a9d6f6..8ff6d348d95 100644 --- a/app/views/projects/diffs/_diffs.html.haml +++ b/app/views/projects/diffs/_diffs.html.haml @@ -34,7 +34,7 @@ - if load_diff_files_async - url = url_for(safe_params.merge(action: 'diff_files')) .js-diffs-batch{ data: { diff_files_path: url } } - = gl_loading_icon( size: "md", css_class: "gl-mt-4" ) + = gl_loading_icon(size: "md", css_class: "gl-mt-4") - else = render partial: 'projects/diffs/file', collection: diff_files, as: :diff_file, locals: { project: diffs.project, environment: environment, diff_page_context: diff_page_context } diff --git a/app/views/projects/environments/show.html.haml b/app/views/projects/environments/show.html.haml index 6d60ef92d86..53b2af88511 100644 --- a/app/views/projects/environments/show.html.haml +++ b/app/views/projects/environments/show.html.haml @@ -8,28 +8,31 @@ #environments-detail-view{ data: { details: environments_detail_data_json(current_user, @project, @environment) } } #environments-detail-view-header - .environments-container - - if @deployments.blank? - .empty-state - .text-content - %h4.state-title - = _("You don't have any deployments right now.") - %p - = html_escape(_("Define environments in the deploy stage(s) in %{code_open}.gitlab-ci.yml%{code_close} to track deployments here.")) % { code_open: '<code>'.html_safe, code_close: '</code>'.html_safe } - .text-center - = link_to _("Read more"), help_page_path("ci/environments/index.md"), class: "gl-button btn btn-confirm" - - else - .table-holder.gl-overflow-visible - .ci-table.environments{ role: 'grid' } - .gl-responsive-table-row.table-row-header{ role: 'row' } - .table-section.section-15{ role: 'columnheader' }= _('Status') - .table-section.section-10{ role: 'columnheader' }= _('ID') - .table-section.section-10{ role: 'columnheader' }= _('Triggerer') - .table-section.section-25{ role: 'columnheader' }= _('Commit') - .table-section.section-10{ role: 'columnheader' }= _('Job') - .table-section.section-10{ role: 'columnheader' }= _('Created') - .table-section.section-10{ role: 'columnheader' }= _('Deployed') + - if Feature.enabled?(:environment_details_vue, @project) + #environment_details_page + - else + .environments-container + - if @deployments.blank? + .empty-state + .text-content + %h4.state-title + = _("You don't have any deployments right now.") + %p + = html_escape(_("Define environments in the deploy stage(s) in %{code_open}.gitlab-ci.yml%{code_close} to track deployments here.")) % { code_open: '<code>'.html_safe, code_close: '</code>'.html_safe } + .text-center + = link_to _("Read more"), help_page_path("ci/environments/index.md"), class: "gl-button btn btn-confirm" + - else + .table-holder.gl-overflow-visible + .ci-table.environments{ role: 'grid' } + .gl-responsive-table-row.table-row-header{ role: 'row' } + .table-section.section-15{ role: 'columnheader' }= _('Status') + .table-section.section-10{ role: 'columnheader' }= _('ID') + .table-section.section-10{ role: 'columnheader' }= _('Triggerer') + .table-section.section-25{ role: 'columnheader' }= _('Commit') + .table-section.section-10{ role: 'columnheader' }= _('Job') + .table-section.section-10{ role: 'columnheader' }= _('Created') + .table-section.section-10{ role: 'columnheader' }= _('Deployed') - = render @deployments + = render @deployments - = paginate @deployments, theme: 'gitlab' + = paginate @deployments, theme: 'gitlab' diff --git a/app/views/projects/graphs/show.html.haml b/app/views/projects/graphs/show.html.haml index c7639eec75d..a27f076d5dd 100644 --- a/app/views/projects/graphs/show.html.haml +++ b/app/views/projects/graphs/show.html.haml @@ -1,8 +1,14 @@ - page_title _('Contributors') +- if Feature.enabled?(:use_ref_type_parameter, @project) + - graph_path = project_graph_path(@project, current_ref, ref_type: @ref_type, format: :json) + - commits_path = project_commits_path(@project, current_ref, ref_type: @ref_type) +- else + - graph_path = project_graph_path(@project, current_ref, format: :json) + - commits_path = project_commits_path(@project, current_ref) .sub-header-block.gl-bg-gray-10.gl-p-5 .tree-ref-holder.gl-display-inline-block.gl-vertical-align-middle.gl-mr-3> = render 'shared/ref_switcher', destination: 'graphs' - = link_to s_('Commits|History'), project_commits_path(@project, current_ref), class: 'btn gl-button btn-default' + = link_to s_('Commits|History'), commits_path, class: 'btn gl-button btn-default' -.js-contributors-graph{ class: container_class, data: { project_graph_path: project_graph_path(@project, current_ref, format: :json), project_branch: current_ref, default_branch: @project.default_branch } } +.js-contributors-graph{ class: container_class, data: { project_graph_path: graph_path, project_branch: current_ref, default_branch: @project.default_branch } } diff --git a/app/views/projects/issuable/_show.html.haml b/app/views/projects/issuable/_show.html.haml index 0898e0ae52d..ec233bc9aff 100644 --- a/app/views/projects/issuable/_show.html.haml +++ b/app/views/projects/issuable/_show.html.haml @@ -3,6 +3,7 @@ - page_card_attributes issuable.card_attributes - if issuable.relocation_target - page_canonical_link issuable.relocation_target.present(current_user: current_user).web_url +- add_page_specific_style 'page_bundles/issuable' = render "projects/issues/service_desk/alert_moved_from_service_desk", issue: issuable diff --git a/app/views/projects/issues/index.html.haml b/app/views/projects/issues/index.html.haml index b730eb5072e..f8f57934303 100644 --- a/app/views/projects/issues/index.html.haml +++ b/app/views/projects/issues/index.html.haml @@ -1,13 +1,14 @@ - page_title _('Issues') +- add_page_specific_style 'page_bundles/issuable_list' - add_page_specific_style 'page_bundles/issues_list' = content_for :meta_tags do = auto_discovery_link_tag(:atom, safe_params.merge(rss_url_options).to_h, title: "#{@project.name} issues") -.js-jira-issues-import-status{ data: { can_edit: can?(current_user, :admin_project, @project).to_s, +.js-jira-issues-import-status-root{ data: { can_edit: can?(current_user, :admin_project, @project).to_s, is_jira_configured: @project.jira_integration.present?.to_s, issues_path: project_issues_path(@project), project_path: @project.full_path } } -.js-issues-list{ data: project_issues_list_data(@project, current_user) } +.js-issues-list-root{ data: project_issues_list_data(@project, current_user) } - if can?(current_user, :admin_issue, @project) = render 'shared/issuable/bulk_update_sidebar', type: :issues diff --git a/app/views/projects/issues/service_desk.html.haml b/app/views/projects/issues/service_desk.html.haml index 93cb5ddd7e2..3cc419716e5 100644 --- a/app/views/projects/issues/service_desk.html.haml +++ b/app/views/projects/issues/service_desk.html.haml @@ -1,7 +1,7 @@ - @can_bulk_update = false - page_title _("Service Desk") -- add_page_specific_style 'page_bundles/issues_list' +- add_page_specific_style 'page_bundles/issuable_list' - content_for :breadcrumbs_extra do = render "projects/issues/service_desk/nav_btns", show_export_button: false, show_rss_button: false diff --git a/app/views/projects/jobs/_table.html.haml b/app/views/projects/jobs/_table.html.haml index cd59eae1fb7..954c77a21f3 100644 --- a/app/views/projects/jobs/_table.html.haml +++ b/app/views/projects/jobs/_table.html.haml @@ -20,16 +20,16 @@ %table.table.ci-table.builds-page %thead %tr - %th Status - %th Name - %th Job - %th Pipeline + %th= _('Status') + %th= _('Name') + %th= _('Job') + %th= _('Pipeline') - if admin - %th Project - %th Runner - %th Stage - %th Duration - %th Coverage + %th= _('Project') + %th= _('Runner') + %th= _('Stage') + %th= _('Duration') + %th= _('Coverage') %th = render partial: "projects/ci/builds/build", collection: builds, as: :build, locals: { commit_sha: true, ref: true, pipeline_link: true, stage: true, allow_retry: true, admin: admin } diff --git a/app/views/projects/merge_requests/_close_reopen_draft_report_toggle.html.haml b/app/views/projects/merge_requests/_close_reopen_draft_report_toggle.html.haml index 78fce3f7087..fb950611f81 100644 --- a/app/views/projects/merge_requests/_close_reopen_draft_report_toggle.html.haml +++ b/app/views/projects/merge_requests/_close_reopen_draft_report_toggle.html.haml @@ -1,53 +1,53 @@ - display_issuable_type = issuable_display_type(@merge_request) -.btn-group.gl-md-ml-3.gl-display-flex.dropdown.gl-new-dropdown.gl-md-w-auto.gl-w-full +.btn-group.gl-md-ml-3.gl-display-flex.dropdown.gl-dropdown.gl-md-w-auto.gl-w-full = button_tag type: 'button', class: "btn dropdown-toggle btn-default btn-md gl-button gl-dropdown-toggle btn-default-tertiary dropdown-icon-only dropdown-toggle-no-caret has-tooltip gl-display-none! gl-md-display-inline-flex!", data: { toggle: 'dropdown', title: _('Merge request actions'), testid: 'merge-request-actions', 'aria-label': _('Merge request actions') } do = sprite_icon "ellipsis_v", size: 16, css_class: "dropdown-icon gl-icon" = button_tag type: 'button', class: "btn dropdown-toggle btn-default btn-md btn-block gl-button gl-dropdown-toggle gl-md-display-none!", data: { 'toggle' => 'dropdown' } do - %span.gl-new-dropdown-button-text= _('Merge request actions') + %span.gl-dropdown-button-text= _('Merge request actions') = sprite_icon "chevron-down", size: 16, css_class: "dropdown-icon gl-icon" .dropdown-menu.dropdown-menu-right - .gl-new-dropdown-inner - .gl-new-dropdown-contents + .gl-dropdown-inner + .gl-dropdown-contents %ul - if current_user && moved_mr_sidebar_enabled? - %li.gl-new-dropdown-item.js-sidebar-subscriptions-widget-root - %li.gl-new-dropdown-divider + %li.gl-dropdown-item.js-sidebar-subscriptions-widget-root + %li.gl-dropdown-divider %hr.dropdown-divider - if can?(current_user, :update_merge_request, @merge_request) - %li.gl-new-dropdown-item{ class: "gl-md-display-none!" } + %li.gl-dropdown-item{ class: "gl-md-display-none!" } = link_to edit_project_merge_request_path(@project, @merge_request), class: 'dropdown-item' do - .gl-new-dropdown-item-text-wrapper + .gl-dropdown-item-text-wrapper = _('Edit') - if @merge_request.open? - %li.gl-new-dropdown-item + %li.gl-dropdown-item = link_to toggle_draft_merge_request_path(@merge_request), method: :put, class: 'dropdown-item js-draft-toggle-button' do - .gl-new-dropdown-item-text-wrapper + .gl-dropdown-item-text-wrapper = @merge_request.draft? ? _('Mark as ready') : _('Mark as draft') - %li.gl-new-dropdown-item.js-close-item + %li.gl-dropdown-item.js-close-item = link_to close_issuable_path(@merge_request), method: :put, class: 'dropdown-item' do - .gl-new-dropdown-item-text-wrapper + .gl-dropdown-item-text-wrapper = _('Close') = display_issuable_type - elsif !@merge_request.source_project_missing? && @merge_request.closed? - %li.gl-new-dropdown-item + %li.gl-dropdown-item = link_to reopen_issuable_path(@merge_request), method: :put, class: 'dropdown-item' do - .gl-new-dropdown-item-text-wrapper + .gl-dropdown-item-text-wrapper = _('Reopen') = display_issuable_type - if moved_mr_sidebar_enabled? - %li.gl-new-dropdown-item.js-sidebar-lock-root - %li.gl-new-dropdown-item + %li.gl-dropdown-item.js-sidebar-lock-root + %li.gl-dropdown-item %button.dropdown-item.js-copy-reference{ type: "button", data: { 'clipboard-text': @merge_request.to_reference(full: true) } } - .gl-new-dropdown-item-text-wrapper + .gl-dropdown-item-text-wrapper = _('Copy reference') - unless current_controller?('conflicts') - unless issuable_author_is_current_user(@merge_request) - if moved_mr_sidebar_enabled? - %li.gl-new-dropdown-divider + %li.gl-dropdown-divider %hr.dropdown-divider - %li.gl-new-dropdown-item + %li.gl-dropdown-item = link_to new_abuse_report_path(user_id: @merge_request.author.id, ref_url: merge_request_url(@merge_request)), class: 'dropdown-item' do - .gl-new-dropdown-item-text-wrapper - = _('Report abuse') + .gl-dropdown-item-text-wrapper + = _('Report abuse to administrator') diff --git a/app/views/projects/merge_requests/_code_dropdown.html.haml b/app/views/projects/merge_requests/_code_dropdown.html.haml index 5c7fe56095c..2ef89a7bf04 100644 --- a/app/views/projects/merge_requests/_code_dropdown.html.haml +++ b/app/views/projects/merge_requests/_code_dropdown.html.haml @@ -1,39 +1,39 @@ -.gl-md-ml-3.dropdown.gl-new-dropdown{ class: "gl-display-none! gl-md-display-flex!" } +.gl-md-ml-3.dropdown.gl-dropdown{ class: "gl-display-none! gl-md-display-flex!" } #js-check-out-modal{ data: how_merge_modal_data(@merge_request) } = button_tag type: 'button', class: "btn dropdown-toggle btn-confirm gl-button gl-dropdown-toggle", data: { toggle: 'dropdown', qa_selector: 'mr_code_dropdown' } do - %span.gl-new-dropdown-button-text= _('Code') + %span.gl-dropdown-button-text= _('Code') = sprite_icon "chevron-down", size: 16, css_class: "dropdown-icon gl-icon gl-ml-2 gl-mr-0!" .dropdown-menu.dropdown-menu-right - .gl-new-dropdown-inner - .gl-new-dropdown-contents + .gl-dropdown-inner + .gl-dropdown-contents %ul - %li.gl-new-dropdown-section-header + %li.gl-dropdown-section-header %header.dropdown-header = _('Review changes') - %li.gl-new-dropdown-item + %li.gl-dropdown-item %button.dropdown-item.js-check-out-modal-trigger{ type: 'button' } - .gl-new-dropdown-item-text-wrapper + .gl-dropdown-item-text-wrapper = _('Check out branch') - if current_user - %li.gl-new-dropdown-item + %li.gl-dropdown-item = link_to ide_merge_request_path(@merge_request), class: 'dropdown-item', target: '_blank', data: { qa_selector: 'open_in_web_ide_button' } do - .gl-new-dropdown-item-text-wrapper + .gl-dropdown-item-text-wrapper = _('Open in Web IDE') - if Gitlab::CurrentSettings.gitpod_enabled && current_user&.gitpod_enabled - %li.gl-new-dropdown-item + %li.gl-dropdown-item = link_to "#{Gitlab::CurrentSettings.gitpod_url}##{merge_request_url(@merge_request)}", target: '_blank', class: 'dropdown-item' do - .gl-new-dropdown-item-text-wrapper + .gl-dropdown-item-text-wrapper = _('Open in Gitpod') - %li.gl-new-dropdown-divider + %li.gl-dropdown-divider %hr.dropdown-divider - %li.gl-new-dropdown-section-header + %li.gl-dropdown-section-header %header.dropdown-header = _('Download') - %li.gl-new-dropdown-item + %li.gl-dropdown-item = link_to merge_request_path(@merge_request, format: :patch), class: 'dropdown-item', download: '', data: { qa_selector: 'download_email_patches_menu_item' } do - .gl-new-dropdown-item-text-wrapper + .gl-dropdown-item-text-wrapper = _('Email patches') - %li.gl-new-dropdown-item + %li.gl-dropdown-item = link_to merge_request_path(@merge_request, format: :diff), class: 'dropdown-item', download: '', data: { qa_selector: 'download_plain_diff_menu_item' } do - .gl-new-dropdown-item-text-wrapper + .gl-dropdown-item-text-wrapper = _('Plain diff') diff --git a/app/views/projects/merge_requests/_page.html.haml b/app/views/projects/merge_requests/_page.html.haml new file mode 100644 index 00000000000..9d79352659c --- /dev/null +++ b/app/views/projects/merge_requests/_page.html.haml @@ -0,0 +1,114 @@ +- @gfm_form = true +- unless moved_mr_sidebar_enabled? + - @content_class = "merge-request-container#{' limit-container-width' unless fluid_layout}" +- add_to_breadcrumbs _("Merge requests"), project_merge_requests_path(@project) +- breadcrumb_title @merge_request.to_reference +- page_title "#{@merge_request.title} (#{@merge_request.to_reference})", _("Merge requests") +- page_description @merge_request.description_html +- page_card_attributes @merge_request.card_attributes +- suggest_changes_help_path = help_page_path('user/project/merge_requests/reviews/suggestions.md') +- mr_action = j(params[:tab].presence || 'show') +- add_page_specific_style 'page_bundles/issuable' +- add_page_specific_style 'page_bundles/design_management' +- add_page_specific_style 'page_bundles/merge_requests' +- add_page_specific_style 'page_bundles/pipelines' +- add_page_specific_style 'page_bundles/reports' +- add_page_specific_style 'page_bundles/ci_status' + +- add_page_startup_api_call @endpoint_metadata_url +- if mr_action == 'diffs' + - add_page_startup_api_call @endpoint_diff_batch_url + +.merge-request{ data: { mr_action: mr_action, url: merge_request_path(@merge_request, format: :json), project_path: project_path(@merge_request.project), lock_version: @merge_request.lock_version } } + - if moved_mr_sidebar_enabled? + #js-merge-sticky-header{ data: { data: sticky_header_data.to_json } } + = render "projects/merge_requests/mr_title" + + .merge-request-details.issuable-details{ data: { id: @merge_request.project.id } } + = render "projects/merge_requests/mr_box" + .merge-request-tabs-holder{ class: "#{'js-tabs-affix' unless ENV['RAILS_ENV'] == 'test'} #{'gl-static' if moved_mr_sidebar_enabled?}" } + .merge-request-tabs-container.gl-display-flex.gl-justify-content-space-between{ class: "#{'is-merge-request' if Feature.enabled?(:moved_mr_sidebar, @project) && !fluid_layout}" } + %ul.merge-request-tabs.nav-tabs.nav.nav-links.gl-display-flex.gl-flex-nowrap.gl-m-0.gl-p-0{ class: "#{'gl-w-full gl-lg-w-auto!' if Feature.enabled?(:moved_mr_sidebar, @project)}" } + = render "projects/merge_requests/tabs/tab", class: "notes-tab", qa_selector: "notes_tab" do + = tab_link_for @merge_request, :show, force_link: @commit.present? do + = _("Overview") + = gl_badge_tag @merge_request.related_notes.user.count, { size: :sm }, { class: 'js-discussions-count' } + - if @merge_request.source_project + = render "projects/merge_requests/tabs/tab", name: "commits", class: "commits-tab", qa_selector: "commits_tab" do + = tab_link_for @merge_request, :commits do + = _("Commits") + = gl_badge_tag @commits_count, { size: :sm } + - if @project.builds_enabled? + = render "projects/merge_requests/tabs/tab", name: "pipelines", class: "pipelines-tab" do + = tab_link_for @merge_request, :pipelines do + = _("Pipelines") + = gl_badge_tag @number_of_pipelines, { size: :sm }, { class: 'js-pipelines-mr-count' } + = render "projects/merge_requests/tabs/tab", name: "diffs", class: "diffs-tab js-diffs-tab", id: "diffs-tab", qa_selector: "diffs_tab" do + = tab_link_for @merge_request, :diffs do + = _("Changes") + = gl_badge_tag @diffs_count, { size: :sm } + .d-flex.flex-wrap.align-items-center.justify-content-lg-end + #js-vue-discussion-counter{ data: { blocks_merge: @project.only_allow_merge_if_all_discussions_are_resolved?.to_s } } + - if moved_mr_sidebar_enabled? + - if !!@issuable_sidebar.dig(:current_user, :id) + .js-sidebar-todo-widget-root{ data: { project_path: @issuable_sidebar[:project_full_path], iid: @issuable_sidebar[:iid], id: @issuable_sidebar[:id] } } + .gl-ml-auto.gl-align-items-center.gl-display-none.gl-md-display-flex.gl-ml-3.js-expand-sidebar.gl-absolute.gl-right-5{ class: "gl-lg-display-none!" } + = render Pajamas::ButtonComponent.new(icon: 'chevron-double-lg-left', + button_options: { class: 'js-sidebar-toggle' }) do + = _('Expand') + .tab-content#diff-notes-app + #js-diff-file-finder + #js-code-navigation + = render "projects/merge_requests/tabs/pane", id: "notes", class: "notes voting_notes" do + %div{ class: "#{'merge-request-overview' if moved_mr_sidebar_enabled?}" } + %section + .issuable-discussion.js-vue-notes-event + - if @merge_request.description.present? + .detail-page-description.gl-pb-0 + = render "projects/merge_requests/description" + = render "projects/merge_requests/awards_block" + = render "projects/merge_requests/widget" + - if mr_action === "show" + - add_page_startup_api_call Feature.enabled?(:paginated_mr_discussions, @project) ? discussions_path(@merge_request, per_page: 20) : discussions_path(@merge_request) + - add_page_startup_api_call widget_project_json_merge_request_path(@project, @merge_request, format: :json) + - add_page_startup_api_call cached_widget_project_json_merge_request_path(@project, @merge_request, format: :json) + #js-vue-mr-discussions{ data: { notes_data: notes_data(@merge_request).to_json, + endpoint_metadata: @endpoint_metadata_url, + noteable_data: serialize_issuable(@merge_request, serializer: 'noteable'), + noteable_type: 'MergeRequest', + notes_filters: UserPreference.notes_filters.to_json, + notes_filter_value: current_user&.notes_filter_for(@merge_request), + target_type: 'merge_request', + help_page_path: suggest_changes_help_path, + current_user_data: @current_user_data, + is_locked: @merge_request.discussion_locked.to_s } } + - if moved_mr_sidebar_enabled? + = render 'shared/issuable/sidebar', issuable_sidebar: @issuable_sidebar, assignees: @merge_request.assignees, reviewers: @merge_request.reviewers, source_branch: @merge_request.source_branch + + = render "projects/merge_requests/tabs/pane", name: "commits", id: "commits", class: "commits" do + -# This tab is always loaded via AJAX + = render "projects/merge_requests/tabs/pane", name: "pipelines", id: "pipelines", class: "pipelines" do + - if @project.builds_enabled? + = render 'projects/commit/pipelines_list', disable_initialization: true, endpoint: pipelines_project_merge_request_path(@project, @merge_request) + - params = request.query_parameters.merge(diff_head: true) + = render "projects/merge_requests/tabs/pane", name: "diffs", id: "js-diffs-app", class: "diffs", data: diffs_tab_pane_data(@project, @merge_request, params) + + .mr-loading-status + .loading.hide + = gl_loading_icon(size: 'lg') + +- unless moved_mr_sidebar_enabled? + = render 'shared/issuable/sidebar', issuable_sidebar: @issuable_sidebar, assignees: @merge_request.assignees, reviewers: @merge_request.reviewers, source_branch: @merge_request.source_branch + +- if @merge_request.can_be_reverted?(current_user) + = render "projects/commit/change", type: 'revert', commit: @merge_request.merge_commit +- if @merge_request.can_be_cherry_picked? + = render "projects/commit/change", type: 'cherry-pick', commit: @merge_request.merge_commit + +#js-review-bar + +- if current_user && Feature.enabled?(:mr_experience_survey, current_user) + #js-mr-experience-survey{ data: { account_age: current_user.account_age_in_days } } + += render 'projects/invite_members_modal', project: @project += render 'shared/web_ide_path' diff --git a/app/views/projects/merge_requests/creations/_new_compare.html.haml b/app/views/projects/merge_requests/creations/_new_compare.html.haml index 17b1e5a757c..48334023cf0 100644 --- a/app/views/projects/merge_requests/creations/_new_compare.html.haml +++ b/app/views/projects/merge_requests/creations/_new_compare.html.haml @@ -1,7 +1,7 @@ %h1.page-title.gl-font-size-h-display = _('New merge request') -= form_for [@project, @merge_request], url: project_new_merge_request_path(@project), method: :get, html: { class: "merge-request-form js-requires-input" } do |f| += gitlab_ui_form_for [@project, @merge_request], url: project_new_merge_request_path(@project), method: :get, html: { class: "merge-request-form js-requires-input" } do |f| - if params[:nav_source].present? = hidden_field_tag(:nav_source, params[:nav_source]) .js-merge-request-new-compare.row{ 'data-source-branch-url': project_new_merge_request_branch_from_path(@source_project), 'data-target-branch-url': project_new_merge_request_branch_to_path(@source_project) } @@ -40,17 +40,20 @@ %h2.gl-font-size-h2 = _('Target branch') .clearfix - - projects = target_projects(@project) .merge-request-select.dropdown - = f.hidden_field :target_project_id - = dropdown_toggle f.object.target_project.full_path, { toggle: "dropdown", 'field-name': "#{f.object_name}[target_project_id]", disabled: @merge_request.persisted?, default_text: _("Select target project") }, { toggle_class: "js-compare-dropdown js-target-project" } - .dropdown-menu.dropdown-menu-selectable.dropdown-target-project - = dropdown_title(_("Select target project")) - = dropdown_filter(_("Search projects")) - = dropdown_content do - = render 'projects/merge_requests/dropdowns/project', - projects: projects, - selected: f.object.target_project_id + - if Feature.enabled?(:mr_compare_dropdowns, @project) + #js-target-project-dropdown{ data: { target_projects_path: project_new_merge_request_json_target_projects_path(@project), current_project: { value: f.object.target_project_id.to_s, text: f.object.target_project.full_path }.to_json } } + - else + - projects = target_projects(@project) + = f.hidden_field :target_project_id + = dropdown_toggle f.object.target_project.full_path, { toggle: "dropdown", 'field-name': "#{f.object_name}[target_project_id]", disabled: @merge_request.persisted?, default_text: _("Select target project") }, { toggle_class: "js-compare-dropdown js-target-project" } + .dropdown-menu.dropdown-menu-selectable.dropdown-target-project + = dropdown_title(_("Select target project")) + = dropdown_filter(_("Search projects")) + = dropdown_content do + = render 'projects/merge_requests/dropdowns/project', + projects: projects, + selected: f.object.target_project_id .merge-request-select.dropdown = f.hidden_field :target_branch = dropdown_toggle f.object.target_branch.presence || _("Select target branch"), { toggle: "dropdown", 'field-name': "#{f.object_name}[target_branch]", 'refs-url': refs_project_path(f.object.target_project), selected: f.object.target_branch, default_text: _("Select target branch") }, { toggle_class: "js-compare-dropdown js-target-branch monospace" } @@ -68,4 +71,4 @@ - if @merge_request.errors.any? = form_errors(@merge_request) - = f.submit _('Compare branches and continue'), class: "gl-button btn btn-confirm mr-compare-btn gl-mt-4", data: { qa_selector: "compare_branches_button" } + = f.submit _('Compare branches and continue'), data: { qa_selector: 'compare_branches_button' }, pajamas_button: true diff --git a/app/views/projects/merge_requests/diffs.html.haml b/app/views/projects/merge_requests/diffs.html.haml new file mode 100644 index 00000000000..1ef212ee5ce --- /dev/null +++ b/app/views/projects/merge_requests/diffs.html.haml @@ -0,0 +1 @@ += render 'page' diff --git a/app/views/projects/merge_requests/index.html.haml b/app/views/projects/merge_requests/index.html.haml index a3f40207d20..79da09c5205 100644 --- a/app/views/projects/merge_requests/index.html.haml +++ b/app/views/projects/merge_requests/index.html.haml @@ -5,6 +5,7 @@ - page_title _("Merge requests") - new_merge_request_email = @project.new_issuable_address(current_user, 'merge_request') +- add_page_specific_style 'page_bundles/issuable_list' = content_for :meta_tags do = auto_discovery_link_tag(:atom, safe_params.merge(rss_url_options).to_h, title: "#{@project.name} merge requests") diff --git a/app/views/projects/merge_requests/show.html.haml b/app/views/projects/merge_requests/show.html.haml index 203724fc1f1..1ef212ee5ce 100644 --- a/app/views/projects/merge_requests/show.html.haml +++ b/app/views/projects/merge_requests/show.html.haml @@ -1,113 +1 @@ -- @gfm_form = true -- unless moved_mr_sidebar_enabled? - - @content_class = "merge-request-container#{' limit-container-width' unless fluid_layout}" -- add_to_breadcrumbs _("Merge requests"), project_merge_requests_path(@project) -- breadcrumb_title @merge_request.to_reference -- page_title "#{@merge_request.title} (#{@merge_request.to_reference})", _("Merge requests") -- page_description @merge_request.description_html -- page_card_attributes @merge_request.card_attributes -- suggest_changes_help_path = help_page_path('user/project/merge_requests/reviews/suggestions.md') -- mr_action = j(params[:tab].presence || 'show') -- add_page_specific_style 'page_bundles/design_management' -- add_page_specific_style 'page_bundles/merge_requests' -- add_page_specific_style 'page_bundles/pipelines' -- add_page_specific_style 'page_bundles/reports' -- add_page_specific_style 'page_bundles/ci_status' - -- add_page_startup_api_call @endpoint_metadata_url -- if mr_action == 'diffs' - - add_page_startup_api_call @endpoint_diff_batch_url - -.merge-request{ data: { mr_action: mr_action, url: merge_request_path(@merge_request, format: :json), project_path: project_path(@merge_request.project), lock_version: @merge_request.lock_version } } - - if moved_mr_sidebar_enabled? - #js-merge-sticky-header{ data: { data: sticky_header_data.to_json } } - = render "projects/merge_requests/mr_title" - - .merge-request-details.issuable-details{ data: { id: @merge_request.project.id } } - = render "projects/merge_requests/mr_box" - .merge-request-tabs-holder{ class: "#{'js-tabs-affix' unless ENV['RAILS_ENV'] == 'test'} #{'gl-static' if moved_mr_sidebar_enabled?}" } - .merge-request-tabs-container.gl-display-flex.gl-justify-content-space-between{ class: "#{'is-merge-request' if Feature.enabled?(:moved_mr_sidebar, @project) && !fluid_layout}" } - %ul.merge-request-tabs.nav-tabs.nav.nav-links.gl-display-flex.gl-flex-nowrap.gl-m-0.gl-p-0{ class: "#{'gl-w-full gl-lg-w-auto!' if Feature.enabled?(:moved_mr_sidebar, @project)}" } - = render "projects/merge_requests/tabs/tab", class: "notes-tab", qa_selector: "notes_tab" do - = tab_link_for @merge_request, :show, force_link: @commit.present? do - = _("Overview") - = gl_badge_tag @merge_request.related_notes.user.count, { size: :sm } - - if @merge_request.source_project - = render "projects/merge_requests/tabs/tab", name: "commits", class: "commits-tab", qa_selector: "commits_tab" do - = tab_link_for @merge_request, :commits do - = _("Commits") - = gl_badge_tag @commits_count, { size: :sm } - - if @project.builds_enabled? - = render "projects/merge_requests/tabs/tab", name: "pipelines", class: "pipelines-tab" do - = tab_link_for @merge_request, :pipelines do - = _("Pipelines") - = gl_badge_tag @number_of_pipelines, { size: :sm }, { class: 'js-pipelines-mr-count' } - = render "projects/merge_requests/tabs/tab", name: "diffs", class: "diffs-tab js-diffs-tab", id: "diffs-tab", qa_selector: "diffs_tab" do - = tab_link_for @merge_request, :diffs do - = _("Changes") - = gl_badge_tag @diffs_count, { size: :sm } - .d-flex.flex-wrap.align-items-center.justify-content-lg-end - #js-vue-discussion-counter{ data: { blocks_merge: @project.only_allow_merge_if_all_discussions_are_resolved?.to_s } } - - if moved_mr_sidebar_enabled? - - if !!@issuable_sidebar.dig(:current_user, :id) - .js-sidebar-todo-widget-root{ data: { project_path: @issuable_sidebar[:project_full_path], iid: @issuable_sidebar[:iid], id: @issuable_sidebar[:id] } } - .gl-ml-auto.gl-align-items-center.gl-display-none.gl-md-display-flex.gl-ml-3.js-expand-sidebar{ class: "gl-lg-display-none!" } - = render Pajamas::ButtonComponent.new(icon: 'chevron-double-lg-left', - button_options: { class: 'js-sidebar-toggle' }) do - = _('Expand') - .tab-content#diff-notes-app - #js-diff-file-finder - #js-code-navigation - = render "projects/merge_requests/tabs/pane", id: "notes", class: "notes voting_notes" do - %div{ class: "#{'merge-request-overview' if moved_mr_sidebar_enabled?}" } - %section - .issuable-discussion.js-vue-notes-event - - if @merge_request.description.present? - .detail-page-description.gl-pb-0 - = render "projects/merge_requests/description" - = render "projects/merge_requests/awards_block" - = render "projects/merge_requests/widget" - - if mr_action === "show" - - add_page_startup_api_call Feature.enabled?(:paginated_mr_discussions, @project) ? discussions_path(@merge_request, per_page: 20) : discussions_path(@merge_request) - - add_page_startup_api_call widget_project_json_merge_request_path(@project, @merge_request, format: :json) - - add_page_startup_api_call cached_widget_project_json_merge_request_path(@project, @merge_request, format: :json) - #js-vue-mr-discussions{ data: { notes_data: notes_data(@merge_request).to_json, - endpoint_metadata: @endpoint_metadata_url, - noteable_data: serialize_issuable(@merge_request, serializer: 'noteable'), - noteable_type: 'MergeRequest', - notes_filters: UserPreference.notes_filters.to_json, - notes_filter_value: current_user&.notes_filter_for(@merge_request), - target_type: 'merge_request', - help_page_path: suggest_changes_help_path, - current_user_data: @current_user_data, - is_locked: @merge_request.discussion_locked.to_s } } - - if moved_mr_sidebar_enabled? - = render 'shared/issuable/sidebar', issuable_sidebar: @issuable_sidebar, assignees: @merge_request.assignees, reviewers: @merge_request.reviewers, source_branch: @merge_request.source_branch - - = render "projects/merge_requests/tabs/pane", name: "commits", id: "commits", class: "commits" do - -# This tab is always loaded via AJAX - = render "projects/merge_requests/tabs/pane", name: "pipelines", id: "pipelines", class: "pipelines" do - - if @project.builds_enabled? - = render 'projects/commit/pipelines_list', disable_initialization: true, endpoint: pipelines_project_merge_request_path(@project, @merge_request) - - params = request.query_parameters.merge(diff_head: true) - = render "projects/merge_requests/tabs/pane", name: "diffs", id: "js-diffs-app", class: "diffs", data: diffs_tab_pane_data(@project, @merge_request, params) - - .mr-loading-status - .loading.hide - = gl_loading_icon(size: 'lg') - -- unless moved_mr_sidebar_enabled? - = render 'shared/issuable/sidebar', issuable_sidebar: @issuable_sidebar, assignees: @merge_request.assignees, reviewers: @merge_request.reviewers, source_branch: @merge_request.source_branch - -- if @merge_request.can_be_reverted?(current_user) - = render "projects/commit/change", type: 'revert', commit: @merge_request.merge_commit -- if @merge_request.can_be_cherry_picked? - = render "projects/commit/change", type: 'cherry-pick', commit: @merge_request.merge_commit - -#js-review-bar - -- if current_user && Feature.enabled?(:mr_experience_survey, current_user) - #js-mr-experience-survey{ data: { account_age: current_user.account_age_in_days } } - -= render 'projects/invite_members_modal', project: @project -= render 'shared/web_ide_path' += render 'page' diff --git a/app/views/projects/ml/candidates/show.html.haml b/app/views/projects/ml/candidates/show.html.haml new file mode 100644 index 00000000000..7fa98f69edf --- /dev/null +++ b/app/views/projects/ml/candidates/show.html.haml @@ -0,0 +1,7 @@ +- experiment = @candidate.experiment +- add_to_breadcrumbs _("Experiments"), project_ml_experiments_path(@project) +- add_to_breadcrumbs experiment.name, project_ml_experiment_path(@project, experiment.iid) +- breadcrumb_title "Candidate #{@candidate.iid}" +- data = candidate_as_data(@candidate) + +#js-show-ml-candidate{ data: { candidate: data } } diff --git a/app/views/projects/network/show.html.haml b/app/views/projects/network/show.html.haml index 2a3171e9fd8..70bb97b7625 100644 --- a/app/views/projects/network/show.html.haml +++ b/app/views/projects/network/show.html.haml @@ -1,10 +1,11 @@ - breadcrumb_title _("Graph") - page_title _("Graph"), @ref +- network_path = Feature.enabled?(:use_ref_type_parameter) ? project_network_path(@project, @id, ref_type: @ref_type) : project_network_path(@project, @id) = render "head" .gl-mt-5 .project-network.gl-border-1.gl-border-solid.gl-border-gray-300 .controls.gl-bg-gray-50.gl-p-2.gl-font-base.gl-text-gray-400.gl-border-b-1.gl-border-b-solid.gl-border-b-gray-300 - = form_tag project_network_path(@project, @id), method: :get, class: 'form-inline network-form' do |f| + = form_tag network_path, method: :get, class: 'form-inline network-form' do |f| = text_field_tag :extended_sha1, @options[:extended_sha1], placeholder: _("Git revision"), class: 'search-input form-control gl-form-input input-mx-250 search-sha gl-mr-2' = render Pajamas::ButtonComponent.new(type: :submit, variant: :confirm, icon: 'search') .inline.gl-ml-5 diff --git a/app/views/projects/notes/_more_actions_dropdown.html.haml b/app/views/projects/notes/_more_actions_dropdown.html.haml index 5f70e25f802..2351bd209a7 100644 --- a/app/views/projects/notes/_more_actions_dropdown.html.haml +++ b/app/views/projects/notes/_more_actions_dropdown.html.haml @@ -10,7 +10,7 @@ - unless is_current_user %li = link_to new_abuse_report_path(user_id: note.author.id, ref_url: noteable_note_url(note)) do - = _('Report abuse to admin') + = _('Report abuse to administrator') - if note_editable %li = link_to note_url(note), method: :delete, data: { confirm: _('Are you sure you want to delete this comment?'), confirm_btn_variant: 'danger', qa_selector: 'delete_comment_button' }, aria: { label: _('Delete comment') }, remote: true, class: 'js-note-delete' do diff --git a/app/views/projects/pages/_list.html.haml b/app/views/projects/pages/_list.html.haml index 16312da1353..32e67fdadb8 100644 --- a/app/views/projects/pages/_list.html.haml +++ b/app/views/projects/pages/_list.html.haml @@ -12,7 +12,7 @@ - if verification_enabled - tooltip, status = domain.unverified? ? [s_('GitLabPages|Unverified'), 'failed'] : [s_('GitLabPages|Verified'), 'success'] .domain-status.ci-status-icon.has-tooltip{ class: "gl-mr-5 ci-status-icon-#{status}", title: tooltip } - = sprite_icon("status_#{status}" ) + = sprite_icon("status_#{status}") .domain-name = external_link(domain.url, domain.url) - if domain.certificate diff --git a/app/views/projects/pages_domains/new.html.haml b/app/views/projects/pages_domains/new.html.haml index 6de8117df6b..c88255e23f9 100644 --- a/app/views/projects/pages_domains/new.html.haml +++ b/app/views/projects/pages_domains/new.html.haml @@ -4,9 +4,8 @@ = _("New Pages Domain") = render 'projects/pages_domains/helper_text' %div - = form_for [@project, domain_presenter], html: { class: 'fieldset-form' } do |f| + = gitlab_ui_form_for [@project, domain_presenter], html: { class: 'fieldset-form' } do |f| = render 'form', { f: f } - .form-actions - = f.submit _('Create New Domain'), class: "gl-button btn btn-confirm" - .float-right - = link_to _('Cancel'), project_pages_path(@project), class: 'gl-button btn btn-default btn-cancel' + .form-actions.gl-display-flex + = f.submit _('Create New Domain'), class: 'gl-mr-3', pajamas_button: true + = link_to _('Cancel'), project_pages_path(@project), class: 'gl-button btn btn-default btn-cancel' diff --git a/app/views/projects/pages_domains/show.html.haml b/app/views/projects/pages_domains/show.html.haml index 0edf75c9abc..5de5188ae6a 100644 --- a/app/views/projects/pages_domains/show.html.haml +++ b/app/views/projects/pages_domains/show.html.haml @@ -15,8 +15,8 @@ = _('Pages Domain') = render 'projects/pages_domains/helper_text' %div - = form_for [@project, domain_presenter], html: { class: 'fieldset-form' } do |f| + = gitlab_ui_form_for [@project, domain_presenter], html: { class: 'fieldset-form' } do |f| = render 'form', { f: f } - .form-actions.d-flex.justify-content-between - = f.submit _('Save Changes'), class: "gl-button btn btn-confirm" + .form-actions.gl-display-flex + = f.submit _('Save Changes'), class: 'gl-mr-3', pajamas_button: true = link_to _('Cancel'), project_pages_path(@project), class: 'gl-button btn btn-default btn-inverse' diff --git a/app/views/projects/pipeline_schedules/_pipeline_schedule.html.haml b/app/views/projects/pipeline_schedules/_pipeline_schedule.html.haml index 7b16564dfa2..0de31f59033 100644 --- a/app/views/projects/pipeline_schedules/_pipeline_schedule.html.haml +++ b/app/views/projects/pipeline_schedules/_pipeline_schedule.html.haml @@ -1,33 +1,38 @@ - if pipeline_schedule %tr.pipeline-schedule-table-row - %td - = pipeline_schedule.description - %td.branch-name-cell.gl-text-truncate - - if pipeline_schedule.for_tag? - = sprite_icon('tag', size: 12, css_class: 'gl-vertical-align-middle!' ) - - else - = sprite_icon('fork', size: 12, css_class: 'gl-vertical-align-middle!') - - if pipeline_schedule.ref.present? - = link_to pipeline_schedule.ref_for_display, project_ref_path(@project, pipeline_schedule.ref_for_display), class: "ref-name" - %td - - if pipeline_schedule.last_pipeline - .status-icon-container{ class: "ci-status-icon-#{pipeline_schedule.last_pipeline.status}" } - = link_to project_pipeline_path(@project, pipeline_schedule.last_pipeline.id) do - = ci_icon_for_status(pipeline_schedule.last_pipeline.status) - %span ##{pipeline_schedule.last_pipeline.id} - - else - = s_("PipelineSchedules|None") - %td.gl-text-gray-500{ 'data-testid': 'next-run-cell' } - - if pipeline_schedule.active? && pipeline_schedule.next_run_at - = time_ago_with_tooltip(pipeline_schedule.real_next_run) - - else - = s_("PipelineSchedules|Inactive") - %td - - if pipeline_schedule.owner - = render Pajamas::AvatarComponent.new(pipeline_schedule.owner, size: 24, class: "gl-mr-2") - = link_to user_path(pipeline_schedule.owner) do - = pipeline_schedule.owner&.name - %td + %td{ role: 'cell', data: { label: _('Description') } } + %div + = pipeline_schedule.description + %td.branch-name-cell.gl-text-truncate{ role: 'cell', data: { label: s_("PipelineSchedules|Target") } } + %div + - if pipeline_schedule.for_tag? + = sprite_icon('tag', size: 12, css_class: 'gl-vertical-align-middle!') + - else + = sprite_icon('fork', size: 12, css_class: 'gl-vertical-align-middle!') + - if pipeline_schedule.ref.present? + = link_to pipeline_schedule.ref_for_display, project_ref_path(@project, pipeline_schedule.ref_for_display), class: "ref-name" + %td{ role: 'cell', data: { label: _("Last Pipeline") } } + %div + - if pipeline_schedule.last_pipeline + .status-icon-container{ class: "ci-status-icon-#{pipeline_schedule.last_pipeline.status}" } + = link_to project_pipeline_path(@project, pipeline_schedule.last_pipeline.id) do + = ci_icon_for_status(pipeline_schedule.last_pipeline.status) + %span.gl-text-blue-500! ##{pipeline_schedule.last_pipeline.id} + - else + = s_("PipelineSchedules|None") + %td.gl-text-gray-500{ role: 'cell', data: { label: s_("PipelineSchedules|Next Run") }, 'data-testid': 'next-run-cell' } + %div + - if pipeline_schedule.active? && pipeline_schedule.next_run_at + = time_ago_with_tooltip(pipeline_schedule.real_next_run) + - else + = s_("PipelineSchedules|Inactive") + %td{ role: 'cell', data: { label: _("Owner") } } + %div + - if pipeline_schedule.owner + = render Pajamas::AvatarComponent.new(pipeline_schedule.owner, size: 24, class: "gl-mr-2") + = link_to user_path(pipeline_schedule.owner) do + = pipeline_schedule.owner&.name + %td{ role: 'cell', data: { label: _('Actions') } } .float-right.btn-group - if can?(current_user, :play_pipeline_schedule, pipeline_schedule) = link_to play_pipeline_schedule_path(pipeline_schedule), method: :post, title: _('Play'), class: 'btn gl-button btn-default btn-icon' do diff --git a/app/views/projects/pipeline_schedules/_table.html.haml b/app/views/projects/pipeline_schedules/_table.html.haml index d0c7ea77263..2f96ac6a534 100644 --- a/app/views/projects/pipeline_schedules/_table.html.haml +++ b/app/views/projects/pipeline_schedules/_table.html.haml @@ -1,12 +1,12 @@ .table-holder - %table.table.ci-table - %thead - %tr - %th= _("Description") - %th= s_("PipelineSchedules|Target") - %th= _("Last Pipeline") - %th= s_("PipelineSchedules|Next Run") - %th= _("Owner") - %th - + %table.table.ci-table.responsive-table.b-table.gl-table.b-table-stacked-md{ role: 'table' } + %thead{ role: 'rowgroup' } + %tr{ role: 'row' } + %th.table-th-transparent.border-bottom{ role: 'cell', style: 'width: 34%' }= _("Description") + %th.table-th-transparent.border-bottom{ role: 'cell' }= s_("PipelineSchedules|Target") + %th.table-th-transparent.border-bottom{ role: 'cell' }= _("Last Pipeline") + %th.table-th-transparent.border-bottom{ role: 'cell' }= s_("PipelineSchedules|Next Run") + %th.table-th-transparent.border-bottom{ role: 'cell' }= _("Owner") + %th.table-th-transparent.border-bottom{ role: 'cell' } + %tbody{ role: 'rowgroup' } = render partial: "pipeline_schedule", collection: @schedules diff --git a/app/views/projects/pipeline_schedules/index.html.haml b/app/views/projects/pipeline_schedules/index.html.haml index 47ad8cc826d..cb7cd631859 100644 --- a/app/views/projects/pipeline_schedules/index.html.haml +++ b/app/views/projects/pipeline_schedules/index.html.haml @@ -21,8 +21,7 @@ %ul.content-list = render partial: "table" - else - = render Pajamas::CardComponent.new(card_options: { class: 'bg-light gl-mt-3 gl-text-center' }) do |c| - - c.body do - = _("No schedules") + .nothing-here-block + = _("No schedules") #pipeline-take-ownership-modal diff --git a/app/views/projects/pipeline_schedules/new.html.haml b/app/views/projects/pipeline_schedules/new.html.haml index d3757d0e339..2d4ed5a9872 100644 --- a/app/views/projects/pipeline_schedules/new.html.haml +++ b/app/views/projects/pipeline_schedules/new.html.haml @@ -9,6 +9,6 @@ = _("Schedule a new pipeline") - if Feature.enabled?(:pipeline_schedules_vue, @project) - #pipeline-schedules-form-new{ data: { full_path: @project.full_path } } + #pipeline-schedules-form-new{ data: { full_path: @project.full_path, cron: @schedule.cron, daily_limit: @schedule.daily_limit, timezone_data: timezone_data.to_json, cron_timezone: @schedule.cron_timezone, project_id: @project.id, default_branch: @project.default_branch, settings_link: project_settings_ci_cd_path(@project), } } - else = render "form" diff --git a/app/views/projects/pipelines/_info.html.haml b/app/views/projects/pipelines/_info.html.haml index 30cc7f94311..1a079324a0f 100644 --- a/app/views/projects/pipelines/_info.html.haml +++ b/app/views/projects/pipelines/_info.html.haml @@ -1,6 +1,7 @@ - if Feature.enabled?(:pipeline_name, @pipeline.project) && @pipeline.name - %h3 - = @pipeline.name + .gl-border-t.gl-p-5.gl-px-0 + %h3.gl-m-0.gl-text-body + = @pipeline.name - else .commit-box %h3.commit-title @@ -45,7 +46,7 @@ - popover_content_text = _('Learn more about Auto DevOps') = gl_badge_tag s_('Pipelines|Auto DevOps'), { variant: :info, size: :sm }, { class: 'js-pipeline-url-autodevops', href: "#", tabindex: "0", role: "button", data: { container: 'body', toggle: 'popover', placement: 'top', html: 'true', triggers: 'focus', title: "<div class='gl-font-weight-normal gl-line-height-normal'>#{popover_title_text}</div>", content: "<a href='#{popover_content_url}' target='_blank' rel='noopener noreferrer nofollow'>#{popover_content_text}</a>" } } - if @pipeline.detached_merge_request_pipeline? - = gl_badge_tag s_('Pipelines|merge request'), { variant: :info, size: :sm }, { class: 'js-pipeline-url-mergerequest has-tooltip', title: s_("Pipelines|This pipeline ran on the contents of this merge request's source branch, not the target branch.") } + = gl_badge_tag s_('Pipelines|merge request'), { variant: :info, size: :sm }, { class: 'js-pipeline-url-mergerequest has-tooltip', data: { qa_selector: 'merge_request_badge_tag' }, title: s_("Pipelines|This pipeline ran on the contents of this merge request's source branch, not the target branch.") } - if @pipeline.stuck? = gl_badge_tag s_('Pipelines|stuck'), { variant: :warning, size: :sm }, { class: 'js-pipeline-url-stuck has-tooltip' } diff --git a/app/views/projects/pipelines/_with_tabs.html.haml b/app/views/projects/pipelines/_with_tabs.html.haml deleted file mode 100644 index e83547fd8f8..00000000000 --- a/app/views/projects/pipelines/_with_tabs.html.haml +++ /dev/null @@ -1,48 +0,0 @@ -- return if pipeline_has_errors - -.tabs-holder - %ul.pipelines-tabs.nav-links.no-top.no-bottom.mobile-separator.nav.nav-tabs - %li.js-pipeline-tab-link - = link_to project_pipeline_path(@project, @pipeline), data: { target: '#js-tab-pipeline', action: 'pipelines', toggle: 'tab' }, class: 'pipeline-tab' do - = _('Pipeline') - %li.js-dag-tab-link - = link_to dag_project_pipeline_path(@project, @pipeline), data: { target: '#js-tab-dag', action: 'dag', toggle: 'tab' }, class: 'dag-tab' do - = _('Needs') - %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') - = gl_badge_tag @pipeline.total_size, { size: :sm }, { class: 'js-builds-counter' } - - 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') - = gl_badge_tag @pipeline.failed_builds.count, { size: :sm }, { class: 'js-failures-counter' } - %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') - = gl_badge_tag @pipeline.test_report_summary.total[:count], { size: :sm }, { class: 'js-test-report-badge-counter' } - = render_if_exists "projects/pipelines/tabs_holder", pipeline: @pipeline, project: @project - -.tab-content - #js-tab-pipeline.tab-pane.gl-w-full - #js-pipeline-graph-vue - - #js-tab-builds.tab-pane - - if stages.present? - #js-pipeline-jobs-vue{ data: { full_path: @project.full_path, pipeline_iid: @pipeline.iid } } - - - if @pipeline.failed_builds.present? - #js-tab-failures.tab-pane - #js-pipeline-failed-jobs-vue{ data: { full_path: @project.full_path, pipeline_iid: @pipeline.iid, failed_jobs_summary_data: prepare_failed_jobs_summary_data(@pipeline.failed_builds) } } - - #js-tab-dag.tab-pane - #js-pipeline-dag-vue{ data: { pipeline_project_path: @project.full_path, pipeline_iid: @pipeline.iid, empty_svg_path: image_path('illustrations/empty-state/empty-dag-md.svg'), about_dag_doc_path: help_page_path('ci/directed_acyclic_graph/index.md'), dag_doc_path: help_page_path('ci/yaml/index.md', anchor: 'needs')} } - - #js-tab-tests.tab-pane - #js-pipeline-tests-detail{ data: { summary_endpoint: summary_project_pipeline_tests_path(@project, @pipeline, format: :json), - suite_endpoint: project_pipeline_test_path(@project, @pipeline, suite_name: 'suite', format: :json), - blob_path: project_blob_path(@project, @pipeline.sha), - has_test_report: @pipeline.complete_and_has_reports?(Ci::JobArtifact.of_report_type(:test)).to_s, - empty_state_image_path: image_path('illustrations/empty-state/empty-test-cases-lg.svg'), - artifacts_expired_image_path: image_path('illustrations/pipeline.svg') } } - = render_if_exists "projects/pipelines/tabs_content", pipeline: @pipeline, project: @project diff --git a/app/views/projects/pipelines/show.html.haml b/app/views/projects/pipelines/show.html.haml index 4531bb2d0a9..9b0a81a2f60 100644 --- a/app/views/projects/pipelines/show.html.haml +++ b/app/views/projects/pipelines/show.html.haml @@ -9,7 +9,7 @@ - add_page_startup_graphql_call('pipelines/get_pipeline_details', { projectPath: @project.full_path, iid: @pipeline.iid }) .js-pipeline-container{ data: { controller_action: "#{controller.action_name}" } } - #js-pipeline-header-vue.pipeline-header-container{ data: { full_path: @project.full_path, pipeline_iid: @pipeline.iid, pipeline_id: @pipeline.id, pipelines_path: project_pipelines_path(@project) } } + #js-pipeline-header-vue.pipeline-header-container{ data: { full_path: @project.full_path, graphql_resource_etag: graphql_etag_pipeline_path(@pipeline), pipeline_iid: @pipeline.iid, pipeline_id: @pipeline.id, pipelines_path: project_pipelines_path(@project) } } = render_if_exists 'projects/pipelines/cc_validation_required_alert', pipeline: @pipeline @@ -18,16 +18,10 @@ - if pipeline_has_errors .bs-callout.bs-callout-danger - %h4= _('Found errors in your %{gitlab_ci_yml}:') % { gitlab_ci_yml: '.gitlab-ci.yml' } + %h4= _('Unable to create pipeline') %ul - @pipeline.yaml_errors.split("\n").each do |error| %li= error - - lint_link_url = project_ci_pipeline_editor_path(@project, tab: "LINT_TAB") - - lint_link_start = '<a href="%{url}" class="gl-text-blue-500!">'.html_safe % { url: lint_link_url } - = s_('You can also test your %{gitlab_ci_yml} in %{lint_link_start}CI Lint%{lint_link_end}').html_safe % { gitlab_ci_yml: '.gitlab-ci.yml', lint_link_start: lint_link_start, lint_link_end: '</a>'.html_safe } - - if Feature.enabled?(:pipeline_tabs_vue, @project) - #js-pipeline-tabs{ data: js_pipeline_tabs_data(@project, @pipeline, @current_user) } - else - = render "projects/pipelines/with_tabs", pipeline: @pipeline, stages: @stages, pipeline_has_errors: pipeline_has_errors -.js-pipeline-details-vue{ data: { metrics_path: namespace_project_ci_prometheus_metrics_histograms_path(namespace_id: @project.namespace, project_id: @project, format: :json), pipeline_project_path: @project.full_path, pipeline_iid: @pipeline.iid, graphql_resource_etag: graphql_etag_pipeline_path(@pipeline), pipeline_path: pipeline_path(@pipeline) } } + #js-pipeline-tabs{ data: js_pipeline_tabs_data(@project, @pipeline, @current_user) } diff --git a/app/views/projects/project_members/index.html.haml b/app/views/projects/project_members/index.html.haml index c7818602f52..4ac0e28d386 100644 --- a/app/views/projects/project_members/index.html.haml +++ b/app/views/projects/project_members/index.html.haml @@ -15,17 +15,17 @@ - invite_group_top_margin = '' - if can_admin_project_member?(@project) .js-import-project-members-trigger{ data: { classes: 'gl-md-w-auto gl-w-full' } } - .js-import-project-members-modal{ data: { project_id: @project.id, project_name: @project.name } } + .js-import-project-members-modal{ data: { project_id: @project.id, project_name: @project.name, reload_page_on_submit: true.to_s } } - invite_group_top_margin = 'gl-md-mt-0 gl-mt-3' - if @project.allowed_to_share_with_group? .js-invite-group-trigger{ data: { classes: "gl-md-w-auto gl-w-full gl-md-ml-3 #{invite_group_top_margin}", display_text: _('Invite a group') } } - = render 'projects/invite_groups_modal', project: @project + = render 'projects/invite_groups_modal', project: @project, reload_page_on_submit: true - if can_admin_project_member?(@project) .js-invite-members-trigger{ data: { variant: 'confirm', classes: 'gl-md-w-auto gl-w-full gl-md-ml-3 gl-md-mt-0 gl-mt-3', trigger_source: 'project-members-page', display_text: _('Invite members') } } - = render 'projects/invite_members_modal', project: @project + = render 'projects/invite_members_modal', project: @project, reload_page_on_submit: true - else - if project_can_be_shared? %h4 diff --git a/app/views/projects/protected_branches/_branches_list.html.haml b/app/views/projects/protected_branches/_branches_list.html.haml deleted file mode 100644 index 24d2b971472..00000000000 --- a/app/views/projects/protected_branches/_branches_list.html.haml +++ /dev/null @@ -1,4 +0,0 @@ -- can_admin_project = can?(current_user, :admin_project, @project) - -= render layout: 'projects/protected_branches/shared/branches_list', locals: { can_admin_project: can_admin_project } do - = render partial: 'projects/protected_branches/protected_branch', collection: @protected_branches diff --git a/app/views/projects/protected_branches/_create_protected_branch.html.haml b/app/views/projects/protected_branches/_create_protected_branch.html.haml deleted file mode 100644 index 76aadc3be28..00000000000 --- a/app/views/projects/protected_branches/_create_protected_branch.html.haml +++ /dev/null @@ -1,14 +0,0 @@ -- content_for :merge_access_levels do - .merge_access_levels-container - = dropdown_tag(_('Select'), - options: { toggle_class: 'js-allowed-to-merge wide', - dropdown_class: 'dropdown-menu-selectable capitalize-header', dropdown_qa_selector: 'allowed_to_merge_dropdown_content', dropdown_testid: 'allowed-to-merge-dropdown', - data: { field_name: 'protected_branch[merge_access_levels_attributes][0][access_level]', input_id: 'merge_access_levels_attributes', qa_selector: 'allowed_to_merge_dropdown' }}) -- content_for :push_access_levels do - .push_access_levels-container - = dropdown_tag(_('Select'), - options: { toggle_class: "js-allowed-to-push js-multiselect wide", - dropdown_class: 'dropdown-menu-selectable capitalize-header', dropdown_qa_selector: 'allowed_to_push_dropdown_content' , dropdown_testid: 'allowed-to-push-dropdown', - data: { field_name: 'protected_branch[push_access_levels_attributes][0][access_level]', input_id: 'push_access_levels_attributes', qa_selector: 'allowed_to_push_dropdown' }}) - -= render 'projects/protected_branches/shared/create_protected_branch' diff --git a/app/views/projects/protected_branches/_index.html.haml b/app/views/projects/protected_branches/_index.html.haml deleted file mode 100644 index 2b0a502fe4d..00000000000 --- a/app/views/projects/protected_branches/_index.html.haml +++ /dev/null @@ -1,7 +0,0 @@ -- content_for :create_protected_branch do - = render 'projects/protected_branches/create_protected_branch' - -- content_for :branches_list do - = render "projects/protected_branches/branches_list" - -= render 'projects/protected_branches/shared/index' diff --git a/app/views/projects/protected_branches/_protected_branch.html.haml b/app/views/projects/protected_branches/_protected_branch.html.haml deleted file mode 100644 index 366d7a7a2eb..00000000000 --- a/app/views/projects/protected_branches/_protected_branch.html.haml +++ /dev/null @@ -1,2 +0,0 @@ -= render layout: 'projects/protected_branches/shared/protected_branch', locals: { protected_branch: protected_branch } do - = render_if_exists 'projects/protected_branches/update_protected_branch', protected_branch: protected_branch diff --git a/app/views/projects/protected_branches/_update_protected_branch.html.haml b/app/views/projects/protected_branches/_update_protected_branch.html.haml deleted file mode 100644 index b2ec98be056..00000000000 --- a/app/views/projects/protected_branches/_update_protected_branch.html.haml +++ /dev/null @@ -1 +0,0 @@ -= render 'shared/projects/protected_branches/update_protected_branch', protected_branch: protected_branch diff --git a/app/views/projects/protected_branches/shared/_branches_list.html.haml b/app/views/projects/protected_branches/shared/_branches_list.html.haml deleted file mode 100644 index 64db51d5df2..00000000000 --- a/app/views/projects/protected_branches/shared/_branches_list.html.haml +++ /dev/null @@ -1,38 +0,0 @@ -.protected-branches-list.js-protected-branches-list{ data: { testid: 'protected-branches-list' } } - - if @protected_branches.empty? - .card-header.bg-white - = s_("ProtectedBranch|Protected branch (%{protected_branches_count})") % { protected_branches_count: 0 } - %p.settings-message.text-center - = s_("ProtectedBranch|There are currently no protected branches, protect a branch with the form above.") - - else - .flash-container - %table.table.table-bordered - %colgroup - %col{ width: "30%" } - %col{ width: "20%" } - %col{ width: "20%" } - %col{ width: "10%" } - %col{ width: "10%" } - - if can_admin_project - %col - %thead - %tr - %th - = s_("ProtectedBranch|Branch") - %th - = s_("ProtectedBranch|Allowed to merge") - %th - = s_("ProtectedBranch|Allowed to push") - %th - = s_("ProtectedBranch|Allowed to force push") - %span.has-tooltip{ data: { container: 'body' }, title: s_('ProtectedBranch|Allow all users with push access to force push.'), 'aria-hidden': 'true' } - = sprite_icon('question', size: 16, css_class: 'gl-text-gray-500') - - = render_if_exists 'projects/protected_branches/ee/code_owner_approval_table_head' - - - if can_admin_project - %th - %tbody - = yield - - = paginate @protected_branches, theme: 'gitlab' diff --git a/app/views/projects/protected_branches/shared/_create_protected_branch.html.haml b/app/views/projects/protected_branches/shared/_create_protected_branch.html.haml deleted file mode 100644 index 770d79943b3..00000000000 --- a/app/views/projects/protected_branches/shared/_create_protected_branch.html.haml +++ /dev/null @@ -1,35 +0,0 @@ -= gitlab_ui_form_for [@project, @protected_branch], html: { class: 'new-protected-branch js-new-protected-branch' } do |f| - %input{ type: 'hidden', name: 'update_section', value: 'js-protected-branches-settings' } - = render Pajamas::CardComponent.new(card_options: { class: "gl-mb-5" }) do |c| - - c.header do - = s_("ProtectedBranch|Protect a branch") - - c.body do - = form_errors(@protected_branch) - .form-group.row - = f.label :name, s_('ProtectedBranch|Branch:'), class: 'col-sm-12' - .col-sm-12 - = render partial: "projects/protected_branches/shared/dropdown", locals: { f: f, toggle_classes: 'gl-w-full! gl-form-input-lg' } - .form-text.text-muted - - wildcards_url = help_page_url('user/project/protected_branches', anchor: 'configure-multiple-protected-branches-by-using-a-wildcard') - - wildcards_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: wildcards_url } - = (s_("ProtectedBranch|%{wildcards_link_start}Wildcards%{wildcards_link_end} such as %{code_tag_start}*-stable%{code_tag_end} or %{code_tag_start}production/*%{code_tag_end} are supported.") % { wildcards_link_start: wildcards_link_start, wildcards_link_end: '</a>', code_tag_start: '<code>', code_tag_end: '</code>' }).html_safe - .form-group.row - = f.label :merge_access_levels_attributes, s_("ProtectedBranch|Allowed to merge:"), class: 'col-sm-12' - .col-sm-12 - = yield :merge_access_levels - .form-group.row - = f.label :push_access_levels_attributes, s_("ProtectedBranch|Allowed to push:"), class: 'col-sm-12' - .col-sm-12 - = yield :push_access_levels - .form-group.row - = f.label :allow_force_push, s_("ProtectedBranch|Allowed to force push:"), class: 'col-sm-12' - .col-sm-12 - = render Pajamas::ToggleComponent.new(classes: 'js-force-push-toggle', - label: s_("ProtectedBranch|Allowed to force push"), - label_position: :hidden) do - - force_push_docs_url = help_page_url('topics/git/git_rebase', anchor: 'force-push') - - force_push_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: force_push_docs_url } - = (s_("ProtectedBranch|Allow all users with push access to %{tag_start}force push%{tag_end}.") % { tag_start: force_push_link_start, tag_end: '</a>' }).html_safe - = render_if_exists 'projects/protected_branches/ee/code_owner_approval_form', f: f - - c.footer do - = f.submit s_('ProtectedBranch|Protect'), disabled: true, data: { qa_selector: 'protect_button' }, pajamas_button: true diff --git a/app/views/projects/protected_branches/shared/_dropdown.html.haml b/app/views/projects/protected_branches/shared/_dropdown.html.haml deleted file mode 100644 index c5dbf8991cd..00000000000 --- a/app/views/projects/protected_branches/shared/_dropdown.html.haml +++ /dev/null @@ -1,21 +0,0 @@ -- toggle_classes = local_assigns.fetch(:toggle_classes, '') - -= f.hidden_field(:name) - -= dropdown_tag(_('Select branch or create wildcard'), - options: { toggle_class: "js-protected-branch-select js-filter-submit wide monospace #{toggle_classes}", - filter: true, - dropdown_class: "dropdown-menu-selectable git-revision-dropdown", - dropdown_qa_selector: "protected_branch_dropdown_content", - placeholder: _("Search protected branches"), - footer_content: true, - data: { show_no: true, show_any: true, show_upcoming: true, - selected: params[:protected_branch_name], - project_id: @project.try(:id), - qa_selector: "protected_branch_dropdown" } }) do - - %ul.dropdown-footer-list - %li - %button{ class: "dropdown-create-new-item-button js-dropdown-create-new-item", title: _("New Protected Branch") } - = _('Create wildcard') - %code diff --git a/app/views/projects/protected_branches/shared/_index.html.haml b/app/views/projects/protected_branches/shared/_index.html.haml deleted file mode 100644 index c204508d355..00000000000 --- a/app/views/projects/protected_branches/shared/_index.html.haml +++ /dev/null @@ -1,20 +0,0 @@ -- expanded = expanded_by_default? - -%section.settings.no-animate#js-protected-branches-settings{ class: ('expanded' if expanded), data: { qa_selector: 'protected_branches_settings_content' } } - .settings-header - %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only - = s_("ProtectedBranch|Protected branches") - = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do - = expanded ? _('Collapse') : _('Expand') - %p - = s_("ProtectedBranch|Keep stable branches secure and force developers to use merge requests.") - = link_to s_("ProtectedBranch|What are protected branches?"), help_page_path("user/project/protected_branches") - .settings-content - %p - = s_("ProtectedBranch|By default, protected branches restrict who can modify the branch.") - = link_to s_("ProtectedBranch|Learn more."), help_page_path("user/project/protected_branches", anchor: "who-can-modify-a-protected-branch") - - - if can? current_user, :admin_project, @project - = content_for :create_protected_branch - - = content_for :branches_list diff --git a/app/views/projects/protected_branches/shared/_matching_branch.html.haml b/app/views/projects/protected_branches/shared/_matching_branch.html.haml deleted file mode 100644 index 1a2ec38fae9..00000000000 --- a/app/views/projects/protected_branches/shared/_matching_branch.html.haml +++ /dev/null @@ -1,10 +0,0 @@ -%tr - %td - = link_to matching_branch.name, project_ref_path(@project, matching_branch.name), class: 'ref-name' - - - if @project.root_ref?(matching_branch.name) - = gl_badge_tag s_('ProtectedBranch|default'), { variant: :info }, { class: 'gl-ml-2' } - %td - - commit = @project.commit(matching_branch.name) - = link_to(commit.short_id, project_commit_path(@project, commit.id), class: 'commit-sha') - = time_ago_with_tooltip(commit.committed_date) diff --git a/app/views/projects/protected_branches/shared/_protected_branch.html.haml b/app/views/projects/protected_branches/shared/_protected_branch.html.haml deleted file mode 100644 index 098bd4a7eeb..00000000000 --- a/app/views/projects/protected_branches/shared/_protected_branch.html.haml +++ /dev/null @@ -1,23 +0,0 @@ -- can_admin_project = can?(current_user, :admin_project, @project) - -%tr.js-protected-branch-edit-form{ data: { url: namespace_project_protected_branch_path(@project.namespace, @project, protected_branch), testid: 'protected-branch' } } - %td - %span.ref-name= protected_branch.name - - - if @project.root_ref?(protected_branch.name) - = gl_badge_tag s_('ProtectedBranch|default'), variant: :info - - %div - - if protected_branch.wildcard? - - matching_branches = protected_branch.matching(repository.branch_names) - = link_to pluralize(matching_branches.count, "matching branch"), namespace_project_protected_branch_path(@project.namespace, @project, protected_branch) - - elsif !protected_branch.commit - %span.text-muted Branch was deleted. - - = yield - - = render_if_exists 'projects/protected_branches/ee/code_owner_approval_table', protected_branch: protected_branch - - - if can_admin_project - %td - = link_to s_('ProtectedBranch|Unprotect'), [@project, protected_branch, { update_section: 'js-protected-branches-settings' }], disabled: local_assigns[:disabled], aria: { label: s_('ProtectedBranch|Unprotect branch') }, data: { confirm: s_('ProtectedBranch|Branch will be writable for developers. Are you sure?'), confirm_btn_variant: 'danger' }, method: :delete, class: "btn gl-button btn-danger btn-sm" diff --git a/app/views/projects/protected_branches/show.html.haml b/app/views/projects/protected_branches/show.html.haml deleted file mode 100644 index c671757a603..00000000000 --- a/app/views/projects/protected_branches/show.html.haml +++ /dev/null @@ -1,25 +0,0 @@ -- page_title @protected_ref.name, _("Protected Branches") - -.row.gl-mt-3.gl-mb-3 - .col-lg-3 - %h4.gl-mt-0.ref-name - = @protected_ref.name - - .col-lg-9 - %h5 Matching Branches - - if @matching_refs.present? - .table-responsive - %table.table.protected-branches-list - %colgroup - %col{ width: "30%" } - %col{ width: "30%" } - %thead - %tr - %th Branch - %th Last commit - %tbody - - @matching_refs.each do |matching_branch| - = render partial: "projects/protected_branches/shared/matching_branch", object: matching_branch - - else - %p.settings-message.text-center - Couldn't find any matching branches. diff --git a/app/views/projects/protected_tags/shared/_create_protected_tag.html.haml b/app/views/projects/protected_tags/shared/_create_protected_tag.html.haml index 9ea7f397c0a..1db1da5e428 100644 --- a/app/views/projects/protected_tags/shared/_create_protected_tag.html.haml +++ b/app/views/projects/protected_tags/shared/_create_protected_tag.html.haml @@ -1,4 +1,4 @@ -= form_for [@project, @protected_tag], html: { class: 'new-protected-tag js-new-protected-tag' } do |f| += gitlab_ui_form_for [@project, @protected_tag], html: { class: 'new-protected-tag js-new-protected-tag' } do |f| %input{ type: 'hidden', name: 'update_section', value: 'js-protected-tags-settings' } = render Pajamas::CardComponent.new(card_options: { class: 'gl-mb-5' }) do |c| - c.header do @@ -20,4 +20,4 @@ = yield :create_access_levels - c.footer do - = f.submit _('Protect'), class: 'gl-button btn btn-confirm', disabled: true, data: { qa_selector: 'protect_tag_button' } + = f.submit _('Protect'), pajamas_button: true, disabled: true, data: { qa_selector: 'protect_tag_button' } diff --git a/app/views/projects/registry/repositories/index.html.haml b/app/views/projects/registry/repositories/index.html.haml index 51f0b6319a1..910aab6da72 100644 --- a/app/views/projects/registry/repositories/index.html.haml +++ b/app/views/projects/registry/repositories/index.html.haml @@ -1,6 +1,6 @@ - page_title _("Container Registry") - @content_class = "limit-container-width" unless fluid_layout -- add_page_startup_graphql_call('container_registry/get_container_repositories', { fullPath: @project.full_path, first: 10, name: nil, isGroupPage: false, sort: nil} ) +- add_page_startup_graphql_call('container_registry/get_container_repositories', { fullPath: @project.full_path, first: 10, name: nil, isGroupPage: false, sort: nil}) %section #js-container-registry{ data: { endpoint: project_container_registry_index_path(@project), @@ -15,7 +15,6 @@ "expiration_policy_help_page_path" => help_page_path('user/packages/container_registry/reduce_container_registry_storage', anchor: 'cleanup-policy'), "garbage_collection_help_page_path" => help_page_path('administration/packages/container_registry', anchor: 'container-registry-garbage-collection'), "run_cleanup_policies_help_page_path" => help_page_path('administration/packages/container_registry', anchor: 'run-the-cleanup-policy-now'), - "container_registry_importing_help_page_path" => help_page_path('user/packages/container_registry/index', anchor: 'tags-temporarily-cannot-be-marked-for-deletion'), "project_path": @project.full_path, "gid_prefix": container_repository_gid_prefix, "is_admin": current_user&.admin.to_s, diff --git a/app/views/projects/runners/_group_runners.html.haml b/app/views/projects/runners/_group_runners.html.haml index 5acd6f95df4..d71bcd12e64 100644 --- a/app/views/projects/runners/_group_runners.html.haml +++ b/app/views/projects/runners/_group_runners.html.haml @@ -35,7 +35,9 @@ = _('Ask your group owner to set up a group runner.') - else - %h4.underlined-title - = _('Available group runners: %{runners}').html_safe % { runners: @group_runners.count } - %ul.bordered-list - = render partial: 'projects/runners/runner', collection: @group_runners, as: :runner + %div{ data: { testid: 'group-runners' } } + %h5.gl-mt-6.gl-mb-0 + = _('Available group runners: %{runners}') % { runners: @group_runners_count } + %ul.bordered-list + = render partial: 'projects/runners/runner', collection: @group_runners, as: :runner + = paginate @group_runners, theme: "gitlab", param_name: "group_runners_page", params: { expand_runners: true, anchor: 'js-runners-settings' } diff --git a/app/views/projects/runners/_runner.html.haml b/app/views/projects/runners/_runner.html.haml index 18803bdd8f3..e517b37aae9 100644 --- a/app/views/projects/runners/_runner.html.haml +++ b/app/views/projects/runners/_runner.html.haml @@ -7,7 +7,7 @@ - else %span = "##{runner.id} (#{runner.short_sha})" - - if runner.locked? + - if runner.locked? && runner.project_type? %span.has-tooltip{ title: s_('Runners|Runner is locked and available for currently assigned projects only. Only administrators can change the assigned projects.') } = sprite_icon('lock') .gl-ml-2 diff --git a/app/views/projects/runners/_shared_runners.html.haml b/app/views/projects/runners/_shared_runners.html.haml index 4689e70d907..9e7bbd6cefe 100644 --- a/app/views/projects/runners/_shared_runners.html.haml +++ b/app/views/projects/runners/_shared_runners.html.haml @@ -5,6 +5,9 @@ - if @shared_runners_count == 0 = _('This GitLab instance does not provide any shared runners yet. Instance administrators can register shared runners in the admin area.') - else - %h5.gl-mt-6.gl-mb-0 #{_('Available shared runners:')} #{@shared_runners_count} - %ul.bordered-list.available-shared-runners - = render partial: 'projects/runners/runner', collection: @shared_runners, as: :runner + %div{ data: { testid: 'available-shared-runners' } } + %h5.gl-mt-6.gl-mb-0 + = s_('Runners|Available shared runners: %{count}') % {count: @shared_runners_count} + %ul.bordered-list + = render partial: 'projects/runners/runner', collection: @shared_runners, as: :runner + = paginate @shared_runners, theme: "gitlab", param_name: "shared_runners_page", params: { expand_runners: true, anchor: 'js-runners-settings' } diff --git a/app/views/projects/runners/_specific_runners.html.haml b/app/views/projects/runners/_specific_runners.html.haml index 3634bacb6ec..f3a7037bdab 100644 --- a/app/views/projects/runners/_specific_runners.html.haml +++ b/app/views/projects/runners/_specific_runners.html.haml @@ -17,7 +17,7 @@ group_path: '' } - else = _('Please contact an admin to register runners.') - = link_to _('Learn more.'), help_page_path('user/admin_area/settings/continuous_integration', anchor: 'prevent-users-from-registering-runners'), target: '_blank', rel: 'noopener noreferrer' + = link_to _('Learn more.'), help_page_path('user/admin_area/settings/continuous_integration', anchor: 'restrict-runner-registration-by-all-users-in-an-instance'), target: '_blank', rel: 'noopener noreferrer' %hr diff --git a/app/views/projects/settings/_general.html.haml b/app/views/projects/settings/_general.html.haml index 3a62c6f41cc..5f1dee39e25 100644 --- a/app/views/projects/settings/_general.html.haml +++ b/app/views/projects/settings/_general.html.haml @@ -1,5 +1,5 @@ - hidden_topics_field_id = 'project_topic_list_field' -= form_for [@project], html: { multipart: true, class: "edit-project js-general-settings-form" }, authenticity_token: true do |f| += gitlab_ui_form_for [@project], html: { multipart: true, class: "edit-project js-general-settings-form" }, authenticity_token: true do |f| %input{ name: 'update_section', type: 'hidden', value: 'js-general-settings' } %fieldset @@ -39,4 +39,4 @@ %hr = link_to _('Remove avatar'), project_avatar_path(@project), aria: { label: _('Remove avatar') }, data: { confirm: _('Avatar will be removed. Are you sure?'), 'confirm-btn-variant': 'danger' }, method: :delete, class: 'gl-button btn btn-danger-secondary' - = f.submit _('Save changes'), class: "gl-button btn btn-confirm gl-mt-6", data: { qa_selector: 'save_naming_topics_avatar_button' } + = f.submit _('Save changes'), pajamas_button: true, class: "gl-mt-6", data: { qa_selector: 'save_naming_topics_avatar_button' } diff --git a/app/views/projects/settings/branch_rules/index.html.haml b/app/views/projects/settings/branch_rules/index.html.haml index 571a992a552..80a41bb579b 100644 --- a/app/views/projects/settings/branch_rules/index.html.haml +++ b/app/views/projects/settings/branch_rules/index.html.haml @@ -3,4 +3,4 @@ %h3.gl-mb-5= s_('BranchRules|Branch rules details') -#js-branch-rules{ data: { project_path: @project.full_path, protected_branches_path: project_settings_repository_path(@project, anchor: 'js-protected-branches-settings'), approval_rules_path: project_settings_merge_requests_path(@project, anchor: 'js-merge-request-approval-settings'), status_checks_path: project_settings_merge_requests_path(@project, anchor: 'js-merge-request-settings') } } +#js-branch-rules{ data: { project_path: @project.full_path, protected_branches_path: project_settings_repository_path(@project, anchor: 'js-protected-branches-settings'), approval_rules_path: project_settings_merge_requests_path(@project, anchor: 'js-merge-request-approval-settings'), status_checks_path: project_settings_merge_requests_path(@project, anchor: 'js-merge-request-settings'), branches_path: project_branches_path(@project) } } diff --git a/app/views/projects/settings/ci_cd/_autodevops_form.html.haml b/app/views/projects/settings/ci_cd/_autodevops_form.html.haml index 5748b4b0330..86238a41f0b 100644 --- a/app/views/projects/settings/ci_cd/_autodevops_form.html.haml +++ b/app/views/projects/settings/ci_cd/_autodevops_form.html.haml @@ -10,8 +10,8 @@ - base_domain_link_start = link_start % { url: base_domain_path } - help_link_continouos = link_to sprite_icon('question-o'), help_page_path('topics/autodevops/stages.md', anchor: 'auto-deploy'), target: '_blank', rel: 'noopener noreferrer' -- help_link_timed = link_to sprite_icon('question-o'), help_page_path('topics/autodevops/customize.md', anchor: 'timed-incremental-rollout-to-production'), target: '_blank', rel: 'noopener noreferrer' -- help_link_incremental = link_to sprite_icon('question-o'), help_page_path('topics/autodevops/customize.md', anchor: 'incremental-rollout-to-production'), target: '_blank', rel: 'noopener noreferrer' +- help_link_timed = link_to sprite_icon('question-o'), help_page_path('topics/autodevops/cicd_variables.md', anchor: 'timed-incremental-rollout-to-production'), target: '_blank', rel: 'noopener noreferrer' +- help_link_incremental = link_to sprite_icon('question-o'), help_page_path('topics/autodevops/cicd_variables.md', anchor: 'incremental-rollout-to-production'), target: '_blank', rel: 'noopener noreferrer' .row .col-lg-12 diff --git a/app/views/projects/settings/operations/_alert_management.html.haml b/app/views/projects/settings/operations/_alert_management.html.haml index d80f1e4597c..7433e81c11c 100644 --- a/app/views/projects/settings/operations/_alert_management.html.haml +++ b/app/views/projects/settings/operations/_alert_management.html.haml @@ -3,7 +3,7 @@ - add_page_specific_style 'page_bundles/alert_management_settings' - add_page_specific_style 'page_bundles/incident_management_list' -%section.settings.no-animate#js-alert-management-settings{ class: ('expanded' if expanded) } +%section.settings.no-animate#js-alert-management-settings{ class: ('expanded' if expanded), data: { qa_selector: 'alerts_settings_content' } } .settings-header %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _('Alerts') diff --git a/app/views/projects/settings/repository/_protected_branches.html.haml b/app/views/projects/settings/repository/_protected_branches.html.haml index 31630828571..d2356b5df09 100644 --- a/app/views/projects/settings/repository/_protected_branches.html.haml +++ b/app/views/projects/settings/repository/_protected_branches.html.haml @@ -1,2 +1,2 @@ -= render "projects/protected_branches/index" += render "protected_branches/index" = render "projects/protected_tags/index" diff --git a/app/views/projects/show.html.haml b/app/views/projects/show.html.haml index 77c44b792ab..5fa70c3af32 100644 --- a/app/views/projects/show.html.haml +++ b/app/views/projects/show.html.haml @@ -15,7 +15,7 @@ = render "home_panel" -- if can?(current_user, :download_code, @project) && @project.repository_languages.present? +- if can?(current_user, :read_code, @project) && @project.repository_languages.present? - add_page_startup_graphql_call('repository/path_last_commit', { projectPath: @project.full_path, ref: current_ref, path: current_route_path || "" }) = repository_languages_bar(@project.repository_languages) @@ -25,8 +25,5 @@ - view_path = @project.default_view -- if show_auto_devops_callout?(@project) - = render 'shared/auto_devops_callout' - %div{ class: project_child_container_class(view_path) } = render view_path, is_project_overview: true diff --git a/app/views/projects/starrers/index.html.haml b/app/views/projects/starrers/index.html.haml index fe8a6508dd7..23578652862 100644 --- a/app/views/projects/starrers/index.html.haml +++ b/app/views/projects/starrers/index.html.haml @@ -1,4 +1,5 @@ - page_title _("Starrers") +- add_page_specific_style 'page_bundles/users' .top-area.adjust .nav-text diff --git a/app/views/projects/tags/new.html.haml b/app/views/projects/tags/new.html.haml index ed06c90efa8..2f8291d255f 100644 --- a/app/views/projects/tags/new.html.haml +++ b/app/views/projects/tags/new.html.haml @@ -2,7 +2,7 @@ - default_ref = params[:ref] || @project.default_branch - if @error - = render Pajamas::AlertComponent.new(variant: :danger, dismissible: true ) do |c| + = render Pajamas::AlertComponent.new(variant: :danger, dismissible: true) do |c| = c.body do = @error @@ -20,14 +20,9 @@ = label_tag :tag_name, nil = text_field_tag :tag_name, params[:tag_name], required: true, autofocus: true, class: 'form-control', data: { qa_selector: "tag_name_field" } .form-group.row - .col-sm-12.create-from + .col-sm-auto.create-from = label_tag :ref, 'Create from' - .dropdown - = hidden_field_tag :ref, default_ref - = button_tag type: 'button', title: default_ref, class: 'dropdown-menu-toggle wide js-branch-select monospace', required: true, data: { toggle: 'dropdown', selected: default_ref, field_name: 'ref' } do - .text-left.dropdown-toggle-text= default_ref - = sprite_icon('chevron-down', css_class: 'dropdown-menu-toggle-icon gl-top-3') - = render 'shared/ref_dropdown', dropdown_class: 'wide' + .js-new-tag-ref-selector{ data: { project_id: @project.id, default_branch_name: default_ref, hidden_input_name: 'ref' } } .form-text.text-muted = s_('TagsPage|Existing branch name, tag, or commit SHA') .form-group.row @@ -42,5 +37,4 @@ = s_('TagsPage|Create tag') = render Pajamas::ButtonComponent.new(href: project_tags_path(@project)) do = s_('TagsPage|Cancel') --# haml-lint:disable InlineJavaScript -%script#availableRefs{ type: "application/json" }= @project.repository.ref_names.to_json.html_safe + diff --git a/app/views/projects/tree/_tree_header.html.haml b/app/views/projects/tree/_tree_header.html.haml index 29bdca1c876..fd807350245 100644 --- a/app/views/projects/tree/_tree_header.html.haml +++ b/app/views/projects/tree/_tree_header.html.haml @@ -2,7 +2,7 @@ .tree-ref-container.gl-display-flex.mb-2.mb-md-0 .tree-ref-holder - = render 'shared/ref_switcher', destination: 'tree', show_create: true + #js-tree-ref-switcher{ data: { project_id: @project.id, project_root_path: project_path(@project) } } #js-repo-breadcrumb{ data: breadcrumb_data_attributes } diff --git a/app/views/projects/triggers/_form.html.haml b/app/views/projects/triggers/_form.html.haml index b6b24a0c26a..b621f1ab3ed 100644 --- a/app/views/projects/triggers/_form.html.haml +++ b/app/views/projects/triggers/_form.html.haml @@ -6,6 +6,6 @@ %label.label-bold Token %p.form-control-plaintext= @trigger.token .form-group - = f.label :key, "Description", class: "label-bold" - = f.text_field :description, class: 'form-control gl-form-input', required: true, title: 'Trigger description is required.', placeholder: "Trigger description" + = f.label :key, s_("Trigger|Description"), class: "label-bold" + = f.text_field :description, class: 'form-control gl-form-input', required: true, title: 'Trigger description is required.', placeholder: s_("Trigger|Trigger description") = f.submit btn_text, pajamas_button: true |