diff options
Diffstat (limited to 'app/views/projects')
72 files changed, 320 insertions, 629 deletions
diff --git a/app/views/projects/_deletion_failed.html.haml b/app/views/projects/_deletion_failed.html.haml index f9d8a2d2989..85a7b9eb22b 100644 --- a/app/views/projects/_deletion_failed.html.haml +++ b/app/views/projects/_deletion_failed.html.haml @@ -3,7 +3,7 @@ = render Pajamas::AlertComponent.new(variant: :warning, dismissible: false, - alert_class: 'project-deletion-failed-message') do - .gl-alert-body + alert_class: 'project-deletion-failed-message') do |c| + = c.body do This project was scheduled for deletion, but failed with the following message: = project.delete_error diff --git a/app/views/projects/_files.html.haml b/app/views/projects/_files.html.haml index 74ace549bb1..bea5d548e03 100644 --- a/app/views/projects/_files.html.haml +++ b/app/views/projects/_files.html.haml @@ -8,7 +8,7 @@ #tree-holder.tree-holder.clearfix .nav-block.gl-display-flex.gl-xs-flex-direction-column.gl-align-items-stretch - = render 'projects/tree/tree_header', tree: @tree + = 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 diff --git a/app/views/projects/_home_panel.html.haml b/app/views/projects/_home_panel.html.haml index 8e6cc6da65d..eee9cfe0618 100644 --- a/app/views/projects/_home_panel.html.haml +++ b/app/views/projects/_home_panel.html.haml @@ -1,7 +1,7 @@ - empty_repo = @project.empty_repo? - show_auto_devops_callout = show_auto_devops_callout?(@project) - emails_disabled = @project.emails_disabled? -- cache_enabled = Feature.enabled?(:cache_home_panel, @project, type: :development, default_enabled: :yaml) +- 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 @@ -19,8 +19,7 @@ - if can?(current_user, :read_project, @project) %span.gl-display-inline-block.gl-vertical-align-middle = s_('ProjectPage|Project ID: %{project_id}') % { project_id: @project.id } - - button_class = "btn gl-button btn-sm btn-tertiary btn-default-tertiary home-panel-metadata" - = clipboard_button(title: s_('ProjectPage|Copy project ID'), text: @project.id, class: button_class) + = clipboard_button(title: s_('ProjectPage|Copy project ID'), text: @project.id) - if current_user %span.gl-ml-3.gl-mb-3 = render 'shared/members/access_request_links', source: @project diff --git a/app/views/projects/_last_push.html.haml b/app/views/projects/_last_push.html.haml index 66857dadb65..5a2add9de1e 100644 --- a/app/views/projects/_last_push.html.haml +++ b/app/views/projects/_last_push.html.haml @@ -2,8 +2,8 @@ - if event && show_last_push_widget?(event) = render Pajamas::AlertComponent.new(variant: :success, alert_class: 'gl-mt-3', - close_button_class: 'js-close-banner') do - .gl-alert-body + close_button_class: 'js-close-banner') do |c| + = c.body do %span= s_("LastPushEvent|You pushed to") %strong.gl-display-inline-flex.gl-max-w-50p{ data: { toggle: 'tooltip' }, title: event.ref_name } = link_to event.ref_name, project_commits_path(event.project, event.ref_name), class: 'ref-name gl-text-truncate' @@ -15,6 +15,6 @@ #{time_ago_with_tooltip(event.created_at)} - if can?(current_user, :create_merge_request_in, event.project.default_merge_request_target) - .gl-alert-actions + = c.actions do = link_to new_mr_path_from_push_event(event), title: _("New merge request"), class: "btn gl-button btn-confirm qa-create-merge-request" do #{ _('Create merge request') } 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 4f9af40f711..3345b3043b8 100644 --- a/app/views/projects/_merge_request_merge_checks_settings.html.haml +++ b/app/views/projects/_merge_request_merge_checks_settings.html.haml @@ -3,21 +3,16 @@ .form-group %b= s_('ProjectSettings|Merge checks') %p.text-secondary= s_('ProjectSettings|These checks must pass before merge requests can be merged.') - .form-check.mb-2.builds-feature - = form.check_box :only_allow_merge_if_pipeline_succeeds, class: 'form-check-input' - = form.label :only_allow_merge_if_pipeline_succeeds, class: 'form-check-label' do - = s_('ProjectSettings|Pipelines must succeed') - .text-secondary - = s_("ProjectSettings|Merge requests can't be merged if the latest pipeline did not succeed or is still running.") - .form-check.mb-2 - .gl-pl-6 - = form.check_box :allow_merge_on_skipped_pipeline, class: 'form-check-input' - = form.label :allow_merge_on_skipped_pipeline, class: 'form-check-label' do - = s_('ProjectSettings|Skipped pipelines are considered successful') - .text-secondary - = s_('ProjectSettings|Introduces the risk of merging changes that do not pass the pipeline.') - .form-check.mb-2 - = form.check_box :only_allow_merge_if_all_discussions_are_resolved, class: 'form-check-input', data: { qa_selector: 'allow_merge_if_all_discussions_are_resolved_checkbox' } - = form.label :only_allow_merge_if_all_discussions_are_resolved, class: 'form-check-label' do - = s_('ProjectSettings|All discussions must be resolved') + .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' } + = 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_merge_method_settings.html.haml b/app/views/projects/_merge_request_merge_method_settings.html.haml index 250f7e94e84..cb660750632 100644 --- a/app/views/projects/_merge_request_merge_method_settings.html.haml +++ b/app/views/projects/_merge_request_merge_method_settings.html.haml @@ -4,7 +4,7 @@ %b= s_('ProjectSettings|Merge method') %p.text-secondary = s_('ProjectSettings|Determine what happens to the commit history when you merge a merge request.') - = link_to s_('ProjectSettings|Learn about commit history.'), help_page_path('user/project/merge_requests/commits.md'), target: '_blank', rel: 'noopener noreferrer' + = link_to s_('ProjectSettings|How do they differ?'), help_page_path('user/project/merge_requests/methods/index.md'), target: '_blank', rel: 'noopener noreferrer' .form-check.mb-2 = form.radio_button :merge_method, :merge, class: "js-merge-method-radio form-check-input" = label_tag :project_merge_method_merge, class: 'form-check-label' do diff --git a/app/views/projects/_merge_request_merge_options_settings.html.haml b/app/views/projects/_merge_request_merge_options_settings.html.haml index 20f3933d0a8..e91c001ea3d 100644 --- a/app/views/projects/_merge_request_merge_options_settings.html.haml +++ b/app/views/projects/_merge_request_merge_options_settings.html.haml @@ -5,17 +5,10 @@ %p.text-secondary= s_('ProjectSettings|Additional settings that influence how and when merges are done.') = render_if_exists 'projects/merge_pipelines_settings', form: form = render_if_exists 'projects/merge_trains_settings', form: form - .form-check.mb-2 - = form.check_box :resolve_outdated_diff_discussions, class: 'form-check-input' - = form.label :resolve_outdated_diff_discussions, class: 'form-check-label' do - = s_('ProjectSettings|Automatically resolve merge request diff discussions when they become outdated') - .form-check.mb-2 - = form.check_box :printing_merge_request_link_enabled, class: 'form-check-input' - = form.label :printing_merge_request_link_enabled, class: 'form-check-label' do - = s_('ProjectSettings|Show link to create or view a merge request when pushing from the command line') - .form-check.mb-2 - = form.check_box :remove_source_branch_after_merge, class: 'form-check-input' - = form.label :remove_source_branch_after_merge, class: 'form-check-label' do - = s_('ProjectSettings|Enable "Delete source branch" option by default') - .descr.text-secondary - = s_('ProjectSettings|Existing merge requests and protected branches are not affected.') + = form.gitlab_ui_checkbox_component :resolve_outdated_diff_discussions, + s_('ProjectSettings|Automatically resolve merge request diff threads when they become outdated') + = form.gitlab_ui_checkbox_component :printing_merge_request_link_enabled, + s_('ProjectSettings|Show link to create or view a merge request when pushing from the command line') + = form.gitlab_ui_checkbox_component :remove_source_branch_after_merge, + s_('ProjectSettings|Enable "Delete source branch" option by default'), + help_text: s_('ProjectSettings|Existing merge requests and protected branches are not affected.') diff --git a/app/views/projects/_new_project_fields.html.haml b/app/views/projects/_new_project_fields.html.haml index e79825bdfc4..66fa1a69ef9 100644 --- a/app/views/projects/_new_project_fields.html.haml +++ b/app/views/projects/_new_project_fields.html.haml @@ -39,8 +39,8 @@ = project_tip.html_safe = render Pajamas::AlertComponent.new(alert_class: "gl-mb-4 gl-display-none js-user-readme-repo", dismissible: false, - variant: :success) do - .gl-alert-body + variant: :success) do |c| + = c.body do - help_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_path('user/profile/index', anchor: 'add-details-to-your-profile-with-a-readme') } = html_escape(_('%{project_path} is a project that you can use to add a README to your GitLab profile. Create a public project and initialize the repository with a README to get started. %{help_link_start}Learn more.%{help_link_end}')) % { project_path: "<strong>#{current_user.username} / #{current_user.username}</strong>".html_safe, help_link_start: help_link_start, help_link_end: '</a>'.html_safe } diff --git a/app/views/projects/blame/show.html.haml b/app/views/projects/blame/show.html.haml index 7f72438c3f9..bc1e62a8980 100644 --- a/app/views/projects/blame/show.html.haml +++ b/app/views/projects/blame/show.html.haml @@ -58,3 +58,6 @@ #{line} - current_line += line_count + + - if blame_pagination + = paginate(blame_pagination, theme: "gitlab") diff --git a/app/views/projects/blob/_blob.html.haml b/app/views/projects/blob/_blob.html.haml index 85b9a69ab4c..2c3aade1068 100644 --- a/app/views/projects/blob/_blob.html.haml +++ b/app/views/projects/blob/_blob.html.haml @@ -14,7 +14,7 @@ #blob-content-holder.blob-content-holder - if @code_navigation_path #js-code-navigation{ data: { code_navigation_path: @code_navigation_path, blob_path: blob.path, definition_path_prefix: project_blob_path(@project, @ref) } } - - if Feature.enabled?(:refactor_blob_viewer, @project, default_enabled: :yaml) && !expanded + - if Feature.enabled?(:refactor_blob_viewer, @project) && !expanded -# Data info will be removed once we migrate this to use GraphQL -# Follow-up issue: https://gitlab.com/gitlab-org/gitlab/-/issues/330406 #js-view-blob-app{ data: { blob_path: blob.path, diff --git a/app/views/projects/blob/_breadcrumb.html.haml b/app/views/projects/blob/_breadcrumb.html.haml index e666bb237bd..7c2caf34fd1 100644 --- a/app/views/projects/blob/_breadcrumb.html.haml +++ b/app/views/projects/blob/_breadcrumb.html.haml @@ -2,7 +2,7 @@ .nav-block .tree-ref-container .tree-ref-holder - = render 'shared/ref_switcher', destination: 'blob', path: @path + = render 'shared/ref_switcher', destination: 'blob' %ul.breadcrumb.repo-breadcrumb %li.breadcrumb-item diff --git a/app/views/projects/blob/_editor.html.haml b/app/views/projects/blob/_editor.html.haml index c9303e19d5d..09a275c24a1 100644 --- a/app/views/projects/blob/_editor.html.haml +++ b/app/views/projects/blob/_editor.html.haml @@ -40,6 +40,8 @@ Soft wrap .file-editor.code + - if Feature.enabled?(:source_editor_toolbar, current_user) + #editor-toolbar .js-edit-mode-pane.qa-editor#editor{ data: { 'editor-loading': true } }< %pre.editor-loading-content= params[:content] || local_assigns[:blob_data] - if local_assigns[:path] diff --git a/app/views/projects/blob/edit.html.haml b/app/views/projects/blob/edit.html.haml index aefa4a41ab5..f80601ef221 100644 --- a/app/views/projects/blob/edit.html.haml +++ b/app/views/projects/blob/edit.html.haml @@ -6,12 +6,13 @@ - if @conflict = render Pajamas::AlertComponent.new(alert_class: 'gl-mb-5 gl-mt-5', variant: :danger, - dismissible: false) do + dismissible: false) do |c| - blob_url = project_blob_path(@project, @id) - external_link_icon = content_tag 'span', { aria: { label: _('Opens new window') }} do - sprite_icon('external-link', css_class: 'gl-icon').html_safe - blob_link_start = '<a href="%{url}" class="gl-link" target="_blank" rel="noopener noreferrer">'.html_safe % { url: blob_url } - = _('Someone edited the file the same time you did. Please check out %{link_start}the file %{icon}%{link_end} and make sure your changes will not unintentionally remove theirs.').html_safe % { link_start: blob_link_start, link_end: '</a>'.html_safe , icon: external_link_icon } + = c.body do + = _('Someone edited the file the same time you did. Please check out %{link_start}the file %{icon}%{link_end} and make sure your changes will not unintentionally remove theirs.').html_safe % { link_start: blob_link_start, link_end: '</a>'.html_safe , icon: external_link_icon } %h3.page-title.blob-edit-page-title diff --git a/app/views/projects/branches/index.html.haml b/app/views/projects/branches/index.html.haml index 85a0346e691..295b2de9bd2 100644 --- a/app/views/projects/branches/index.html.haml +++ b/app/views/projects/branches/index.html.haml @@ -39,7 +39,7 @@ %ul.content-list.all-branches - @branches.each do |branch| = render "projects/branches/branch", branch: branch, merged: @merged_branch_names.include?(branch.name), commit_status: @branch_pipeline_statuses[branch.name], show_commit_status: @branch_pipeline_statuses.any? - - if Feature.enabled?(:branch_list_keyset_pagination, @project, default_enabled: :yaml) + - if Feature.enabled?(:branch_list_keyset_pagination, @project) = render('kaminari/gitlab/without_count', previous_path: @prev_path, next_path: @next_path) - else = paginate @branches, theme: 'gitlab' diff --git a/app/views/projects/branches/new.html.haml b/app/views/projects/branches/new.html.haml index 07bae7819a4..c06f60bd05d 100644 --- a/app/views/projects/branches/new.html.haml +++ b/app/views/projects/branches/new.html.haml @@ -2,8 +2,8 @@ - default_ref = params[:ref] || @project.default_branch - if @error - = render Pajamas::AlertComponent.new(variant: :danger) do - .gl-alert-body + = render Pajamas::AlertComponent.new(variant: :danger) do |c| + = c.body do = @error %h3.page-title = _('New Branch') diff --git a/app/views/projects/buttons/_clone.html.haml b/app/views/projects/buttons/_clone.html.haml index 74d10f11898..5fd1c5cd403 100644 --- a/app/views/projects/buttons/_clone.html.haml +++ b/app/views/projects/buttons/_clone.html.haml @@ -30,13 +30,23 @@ %label.label-bold{ class: 'gl-px-4!' } = _('Open in your IDE') - if ssh_enabled? - %a.dropdown-item.open-with-link{ href: 'vscode://vscode.git/clone?url=' + CGI.escape(project.ssh_url_to_repo) } + - 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 = _('Visual Studio Code (SSH)') - if http_enabled? - %a.dropdown-item.open-with-link{ href: 'vscode://vscode.git/clone?url=' + CGI.escape(project.http_url_to_repo) } + - 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 = _('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 + = _('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 + = _('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 diff --git a/app/views/projects/ci/pipeline_editor/show.html.haml b/app/views/projects/ci/pipeline_editor/show.html.haml index c4757ea9c26..18eac48d42a 100644 --- a/app/views/projects/ci/pipeline_editor/show.html.haml +++ b/app/views/projects/ci/pipeline_editor/show.html.haml @@ -1,5 +1,6 @@ - @force_fluid_layout = true - add_page_specific_style 'page_bundles/pipelines' +- add_page_specific_style 'page_bundles/pipeline_editor' - page_title s_('Pipelines|Pipeline Editor') - content_for :prefetch_asset_tags do diff --git a/app/views/projects/ci/secure_files/show.html.haml b/app/views/projects/ci/secure_files/show.html.haml index db0734be6bd..1a87ccd753c 100644 --- a/app/views/projects/ci/secure_files/show.html.haml +++ b/app/views/projects/ci/secure_files/show.html.haml @@ -1,5 +1,3 @@ -- @content_class = "limit-container-width" - - page_title s_('Secure Files') -#js-ci-secure-files{ data: { project_id: @project.id } } +#js-ci-secure-files{ data: { project_id: @project.id, admin: can?(current_user, :admin_secure_files, @project).to_s, file_size_limit: Ci::SecureFile::FILE_SIZE_LIMIT.to_mb } } diff --git a/app/views/projects/commits/_commits.html.haml b/app/views/projects/commits/_commits.html.haml index 82d3bfbcfe6..c6fb3bcd559 100644 --- a/app/views/projects/commits/_commits.html.haml +++ b/app/views/projects/commits/_commits.html.haml @@ -14,7 +14,7 @@ %li.commits-row{ data: { day: day } } %ul.content-list.commit-list.flex-list - - if Feature.enabled?(:cached_commits, project, default_enabled: :yaml) + - 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) } - else = render partial: 'projects/commits/commit', collection: daily_commits, locals: { project: project, ref: ref, merge_request: merge_request } @@ -28,7 +28,7 @@ %li.commits-row %ul.content-list.commit-list.flex-list - - if Feature.enabled?(:cached_commits, project, default_enabled: :yaml) + - 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) } - else = render partial: 'projects/commits/commit', collection: context_commits, locals: { project: project, ref: ref, merge_request: merge_request } @@ -36,8 +36,8 @@ - if hidden > 0 %li = render Pajamas::AlertComponent.new(variant: :warning, - dismissible: false) do - .gl-alert-body + dismissible: false) do |c| + = c.body do = n_('%s additional commit has been omitted to prevent performance issues.', '%s additional commits have been omitted to prevent performance issues.', hidden) % number_with_delimiter(hidden) - if can_update_merge_request && context_commits&.empty? diff --git a/app/views/projects/default_branch/_show.html.haml b/app/views/projects/default_branch/_show.html.haml index f9d3af7aa36..2d3d36a9157 100644 --- a/app/views/projects/default_branch/_show.html.haml +++ b/app/views/projects/default_branch/_show.html.haml @@ -9,7 +9,7 @@ = _('Set the default branch for this project. All merge requests and commits are made against this branch unless you specify a different one.') .settings-content - = form_for @project, remote: true, html: { multipart: true, anchor: 'default-branch-settings' }, authenticity_token: true do |f| + = gitlab_ui_form_for @project, remote: true, html: { multipart: true, anchor: 'default-branch-settings' }, authenticity_token: true do |f| %fieldset - if @project.empty_repo? .text-secondary @@ -20,12 +20,10 @@ = f.select(:default_branch, @project.repository.branch_names, {}, {class: 'select2 select-wide', data: { qa_selector: 'default_branch_dropdown' }}) .form-group - .form-check - = f.check_box :autoclose_referenced_issues, class: 'form-check-input' - = f.label :autoclose_referenced_issues, class: 'form-check-label' do - %strong= _("Auto-close referenced issues on default branch") - .form-text.text-muted - = _("When merge requests and commits in the default branch close, any issues they reference also close.") - = link_to sprite_icon('question-o'), help_page_path('user/project/issues/managing_issues.md', anchor: 'closing-issues-automatically'), target: '_blank', rel: 'noopener noreferrer' + - help_text = _("When merge requests and commits in the default branch close, any issues they reference also close.") + - help_icon = link_to sprite_icon('question-o'), help_page_path('user/project/issues/managing_issues.md', anchor: 'closing-issues-automatically'), target: '_blank', rel: 'noopener noreferrer' + = f.gitlab_ui_checkbox_component :autoclose_referenced_issues, + _("Auto-close referenced issues on default branch"), + help_text: (help_text + " " + help_icon).html_safe = f.submit _('Save changes'), class: "gl-button btn btn-confirm", data: { qa_selector: 'save_changes_button' } diff --git a/app/views/projects/deployments/_deployment.html.haml b/app/views/projects/deployments/_deployment.html.haml index 504bbf3a304..e92297a5a6a 100644 --- a/app/views/projects/deployments/_deployment.html.haml +++ b/app/views/projects/deployments/_deployment.html.haml @@ -46,3 +46,4 @@ .btn-group.table-action-buttons = render 'projects/deployments/actions', deployment: deployment = render 'projects/deployments/rollback', deployment: deployment + = render_if_exists 'projects/deployments/approvals', deployment: deployment diff --git a/app/views/projects/diffs/_diffs.html.haml b/app/views/projects/diffs/_diffs.html.haml index 6f4ffecd5e0..d596199f816 100644 --- a/app/views/projects/diffs/_diffs.html.haml +++ b/app/views/projects/diffs/_diffs.html.haml @@ -34,8 +34,7 @@ - if load_diff_files_async - url = url_for(safe_params.merge(action: 'diff_files')) .js-diffs-batch{ data: { diff_files_path: url } } - .text-center - %span.gl-spinner.gl-spinner-md + = 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/diffs/_text_file.html.haml b/app/views/projects/diffs/_text_file.html.haml index 2cd215c5518..9b64afa8c60 100644 --- a/app/views/projects/diffs/_text_file.html.haml +++ b/app/views/projects/diffs/_text_file.html.haml @@ -4,7 +4,7 @@ %a.show-suppressed-diff.cursor-pointer.js-show-suppressed-diff= _("Changes suppressed. Click to show.") %table.text-file.diff-wrap-lines.code.code-commit.js-syntax-highlight.commit-diff{ data: diff_view_data, class: too_big ? 'hide' : '' } - - if Feature.enabled?(:inline_haml_diff_line_rendering, @project, default_enabled: :yaml) + - if Feature.enabled?(:inline_haml_diff_line_rendering, @project) - diff_file.highlighted_diff_lines.each do |line| - line_code = diff_file.line_code(line) diff --git a/app/views/projects/feature_flags/edit.html.haml b/app/views/projects/feature_flags/edit.html.haml index ac8c0575077..121dcd31a13 100644 --- a/app/views/projects/feature_flags/edit.html.haml +++ b/app/views/projects/feature_flags/edit.html.haml @@ -2,6 +2,6 @@ - add_to_breadcrumbs s_('FeatureFlags|Feature Flags'), project_feature_flags_path(@project) - breadcrumb_title @feature_flag.name -- page_title s_('FeatureFlags|Edit Feature Flag') +- page_title s_('FeatureFlags|Edit Feature Flag'), @feature_flag.name #js-edit-feature-flag{ data: edit_feature_flag_data } diff --git a/app/views/projects/forks/error.html.haml b/app/views/projects/forks/error.html.haml index 9b64f158a1b..13fd4cee0cc 100644 --- a/app/views/projects/forks/error.html.haml +++ b/app/views/projects/forks/error.html.haml @@ -3,8 +3,8 @@ = render Pajamas::AlertComponent.new(title: _('Fork Error!'), variant: :danger, alert_class: 'gl-mt-5', - dismissible: false) do - .gl-alert-body + dismissible: false) do |c| + = c.body do %p = _("You tried to fork %{link_to_the_project} but it failed for the following reason:").html_safe % { link_to_the_project: link_to_project(@project) } @@ -17,5 +17,5 @@ - else = error - .gl-alert-actions - = link_to _('Try to fork again'), new_project_fork_path(@project), title: _("Fork"), class: "btn gl-alert-action btn-info btn-md gl-button" + = c.actions do + = link_to _('Try to fork again'), new_project_fork_path(@project), title: _("Fork"), class: "btn gl-alert-action btn-info btn-md gl-button" diff --git a/app/views/projects/generic_commit_statuses/_generic_commit_status.html.haml b/app/views/projects/generic_commit_statuses/_generic_commit_status.html.haml index 9e3d9b4258a..a3569d41714 100644 --- a/app/views/projects/generic_commit_statuses/_generic_commit_status.html.haml +++ b/app/views/projects/generic_commit_statuses/_generic_commit_status.html.haml @@ -39,10 +39,9 @@ .label-container - if generic_commit_status.tags.any? - generic_commit_status.tags.each do |tag| - %span.badge.badge-primary - = tag + = gl_badge_tag tag, variant: :info, size: :sm - if retried - %span.badge.badge-warning retried + = gl_badge_tag retried, variant: :warning, size: :sm - if pipeline_link %td diff --git a/app/views/projects/graphs/charts.html.haml b/app/views/projects/graphs/charts.html.haml index 40280e0787f..ca0307aed60 100644 --- a/app/views/projects/graphs/charts.html.haml +++ b/app/views/projects/graphs/charts.html.haml @@ -46,7 +46,7 @@ .col-md-6 .tree-ref-container .tree-ref-holder - = render 'shared/ref_switcher', destination: 'graphs_commits' + = render 'shared/ref_switcher', destination: 'graphs_commits', path: @path %ul.breadcrumb.repo-breadcrumb = commits_breadcrumbs diff --git a/app/views/projects/issues/_alert_moved_from_service_desk.html.haml b/app/views/projects/issues/_alert_moved_from_service_desk.html.haml index f28b951ad62..291edf014c3 100644 --- a/app/views/projects/issues/_alert_moved_from_service_desk.html.haml +++ b/app/views/projects/issues/_alert_moved_from_service_desk.html.haml @@ -3,6 +3,6 @@ - service_desk_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: service_desk_link_url } = render Pajamas::AlertComponent.new(variant: :warning, - alert_class: 'hide js-alert-moved-from-service-desk-warning gl-mt-5') do - .gl-alert-body.gl-mr-3 + alert_class: 'hide js-alert-moved-from-service-desk-warning gl-mt-5') do |c| + = c.body do = s_('This project does not have %{service_desk_link_start}Service Desk%{service_desk_link_end} enabled, so the user who created the issue will no longer receive email notifications about new activity.').html_safe % { service_desk_link_start: service_desk_link_start, service_desk_link_end: '</a>'.html_safe } diff --git a/app/views/projects/issues/_discussion.html.haml b/app/views/projects/issues/_discussion.html.haml index f1c19756474..a904b53515c 100644 --- a/app/views/projects/issues/_discussion.html.haml +++ b/app/views/projects/issues/_discussion.html.haml @@ -1,4 +1,4 @@ -- add_page_startup_api_call Feature.enabled?(:paginated_issue_discussions, @project, default_enabled: :yaml) ? discussions_path(@issue, per_page: 20) : discussions_path(@issue) +- add_page_startup_api_call Feature.enabled?(:paginated_issue_discussions, @project) ? discussions_path(@issue, per_page: 20) : discussions_path(@issue) - @gfm_form = true diff --git a/app/views/projects/issues/index.html.haml b/app/views/projects/issues/index.html.haml index d74b6c0639c..fe2be0f73c9 100644 --- a/app/views/projects/issues/index.html.haml +++ b/app/views/projects/issues/index.html.haml @@ -13,7 +13,7 @@ issues_path: project_issues_path(@project), project_path: @project.full_path } } -- if Feature.enabled?(:vue_issues_list, @project&.group, default_enabled: :yaml) +- if Feature.enabled?(:vue_issues_list, @project&.group) .js-issues-list{ data: project_issues_list_data(@project, current_user) } - if @can_bulk_update = render 'shared/issuable/bulk_update_sidebar', type: :issues diff --git a/app/views/projects/issues/show.html.haml b/app/views/projects/issues/show.html.haml index 6c6f98e0b20..3572d1d6556 100644 --- a/app/views/projects/issues/show.html.haml +++ b/app/views/projects/issues/show.html.haml @@ -2,6 +2,7 @@ - add_to_breadcrumbs _("Issues"), project_issues_path(@project) - breadcrumb_title @issue.to_reference - page_title "#{@issue.title} (#{@issue.to_reference})", _("Issues") +- add_page_specific_style 'page_bundles/issues_show' = render 'projects/issuable/show', issuable: @issue, api_awards_path: award_emoji_issue_api_path(@issue) = render 'projects/invite_members_modal', project: @project diff --git a/app/views/projects/jobs/index.html.haml b/app/views/projects/jobs/index.html.haml index 9a2a1e57165..e725e8e6889 100644 --- a/app/views/projects/jobs/index.html.haml +++ b/app/views/projects/jobs/index.html.haml @@ -4,7 +4,7 @@ - add_page_specific_style 'page_bundles/ci_status' - admin = local_assigns.fetch(:admin, false) -- if Feature.enabled?(:jobs_table_vue, @project, default_enabled: :yaml) +- if Feature.enabled?(:jobs_table_vue, @project) #js-jobs-table{ data: { admin: admin, full_path: @project.full_path, job_statuses: job_statuses.to_json, pipeline_editor_path: project_ci_pipeline_editor_path(@project), empty_state_svg_path: image_path('jobs-empty-state.svg') } } - else .top-area diff --git a/app/views/projects/mattermosts/_no_teams.html.haml b/app/views/projects/mattermosts/_no_teams.html.haml index 3d901c6f59b..1f008496a34 100644 --- a/app/views/projects/mattermosts/_no_teams.html.haml +++ b/app/views/projects/mattermosts/_no_teams.html.haml @@ -1,9 +1,3 @@ -- if @teams_error_message - = content_for :flash_message do - = render Pajamas::AlertComponent.new(variant: :danger) do - .gl-alert-body - = @teams_error_message - %p You aren’t a member of any team on the Mattermost instance at %strong= Gitlab.config.mattermost.host diff --git a/app/views/projects/mattermosts/new.html.haml b/app/views/projects/mattermosts/new.html.haml index 9e293d07cb7..8254198bd41 100644 --- a/app/views/projects/mattermosts/new.html.haml +++ b/app/views/projects/mattermosts/new.html.haml @@ -1,10 +1,20 @@ -- @body_class = 'card-content' +- add_to_breadcrumbs _('Integrations'), scoped_integrations_path(project: @project, group: @group) +- add_to_breadcrumbs @integration.title, scoped_edit_integration_path(@integration, project: @project, group: @group) +- breadcrumb_title _('New') +- page_title @integration.title, _('Integrations') +- @content_class = 'limit-container-width' unless fluid_layout -.service-installation - .inline.float-right +- if @teams_error_message + = render Pajamas::AlertComponent.new(variant: :danger) do |c| + = c.body do + = @teams_error_message + +%h3 + Install Mattermost Command + .gl-float-right = custom_icon('mattermost_logo', size: 48) - %h3 Install Mattermost Command - - if @teams.empty? - = render 'no_teams' - - else - = render 'team_selection' + +- if @teams.empty? + = render 'no_teams' +- else + = render 'team_selection' 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 f6afac493d5..282faf7714e 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,36 +1,46 @@ - display_issuable_type = issuable_display_type(@merge_request) -- button_class = "btn gl-button #{!@merge_request.closed? && 'js-draft-toggle-button'}" -- toggle_class = "btn gl-button dropdown-toggle" -.float-left.btn-group.gl-ml-3.gl-display-none.gl-md-display-flex - = link_to @merge_request.closed? ? reopen_issuable_path(@merge_request) : toggle_draft_merge_request_path(@merge_request), method: :put, class: "#{button_class} btn-confirm-secondary" do - - if @merge_request.closed? - = _('Reopen') - = display_issuable_type - - else - = @merge_request.work_in_progress? ? _('Mark as ready') : _('Mark as draft') +.float-left.btn-group.gl-md-ml-3.gl-display-flex.dropdown.gl-new-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 gl-display-none! gl-md-display-inline-flex!", data: { 'toggle' => 'dropdown' } do + %span.gl-sr-only= _('Toggle dropdown') + = 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') + = 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 + %ul + - if can?(current_user, :update_merge_request, @merge_request) + %li.gl-new-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 + = _('Edit') + - if @merge_request.open? + %li.gl-new-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 + = @merge_request.work_in_progress? ? _('Mark as ready') : _('Mark as draft') + %li.gl-new-dropdown-item.js-close-item + = link_to close_issuable_path(@merge_request), method: :put, class: 'dropdown-item' do + .gl-new-dropdown-item-text-wrapper + = _('Close') + = display_issuable_type + - elsif !@merge_request.source_project_missing? + %li.gl-new-dropdown-item + = link_to reopen_issuable_path(@merge_request), method: :put, class: 'dropdown-item' do + .gl-new-dropdown-item-text-wrapper + = _('Reopen') + = display_issuable_type - - if !@merge_request.closed? || !issuable_author_is_current_user(@merge_request) - = button_tag type: 'button', class: "#{toggle_class} btn-confirm-secondary btn-icon", data: { 'toggle' => 'dropdown' } do - %span.gl-sr-only= _('Toggle dropdown') - = sprite_icon "chevron-down", size: 12, css_class: "gl-button-icon" - - %ul.dropdown-menu.dropdown-menu-right - - if @merge_request.open? - %li - = link_to close_issuable_path(@merge_request), method: :put do - .description - %strong.title - = _('Close') - = display_issuable_type - - - unless issuable_author_is_current_user(@merge_request) - - unless @merge_request.closed? - %li.divider.droplab-item-ignore - - %li - %a{ href: new_abuse_report_path(user_id: @merge_request.author.id, ref_url: merge_request_url(@merge_request)) } - .description - %strong.title= _('Report abuse') - %p.text.gl-mb-0 - = _('Report %{display_issuable_type} that are abusive, inappropriate or spam.') % { display_issuable_type: display_issuable_type.pluralize } + - if current_user && moved_mr_sidebar_enabled? + %li.gl-new-dropdown-divider + %hr.dropdown-divider + %li.gl-new-dropdown-item.js-sidebar-subscriptions-entry-point + - unless issuable_author_is_current_user(@merge_request) + %li.gl-new-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') + - if moved_mr_sidebar_enabled? + %li.gl-new-dropdown-item#js-lock-entry-point diff --git a/app/views/projects/merge_requests/_code_dropdown.html.haml b/app/views/projects/merge_requests/_code_dropdown.html.haml new file mode 100644 index 00000000000..0bd28e315d9 --- /dev/null +++ b/app/views/projects/merge_requests/_code_dropdown.html.haml @@ -0,0 +1,39 @@ +.float-left.gl-md-ml-3.dropdown.gl-new-dropdown{ class: "gl-display-none! gl-md-display-flex!" } + #js-check-out-modal{ data: how_merge_modal_data(@merge_request) } + = button_tag type: 'button', class: "btn dropdown-toggle btn-confirm gl-button gl-dropdown-toggle", data: { toggle: 'dropdown', qa_selector: 'mr_code_dropdown' } do + %span.gl-new-dropdown-button-text= _('Code') + = sprite_icon "chevron-down", size: 16, css_class: "dropdown-icon gl-icon gl-ml-2 gl-mr-0!" + .dropdown-menu.dropdown-menu-right + .gl-new-dropdown-inner + .gl-new-dropdown-contents + %ul + %li.gl-new-dropdown-section-header + %header.dropdown-header + = _('Review changes') + %li.gl-new-dropdown-item + %button.dropdown-item.js-check-out-modal-trigger{ type: 'button' } + .gl-new-dropdown-item-text-wrapper + = _('Check out branch') + - if current_user + %li.gl-new-dropdown-item + = link_to ide_merge_request_path(@merge_request), class: 'dropdown-item', data: { qa_selector: 'open_in_web_ide_button' } do + .gl-new-dropdown-item-text-wrapper + = _('Open in Web IDE') + - if Gitlab::CurrentSettings.gitpod_enabled && current_user&.gitpod_enabled + %li.gl-new-dropdown-item + = link_to "#{Gitlab::CurrentSettings.gitpod_url}##{merge_request_url(@merge_request)}", class: 'dropdown-item' do + .gl-new-dropdown-item-text-wrapper + = _('Open in Gitpod') + %li.gl-new-dropdown-divider + %hr.dropdown-divider + %li.gl-new-dropdown-section-header + %header.dropdown-header + = _('Download') + %li.gl-new-dropdown-item + = 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 + = _('Email patches') + %li.gl-new-dropdown-item + = link_to merge_request_path(@merge_request, format: :diff), class: 'dropdown-item', data: { qa_selector: 'download_plain_diff_menu_item' } do + .gl-new-dropdown-item-text-wrapper + = _('Plain diff') diff --git a/app/views/projects/merge_requests/_mr_box.html.haml b/app/views/projects/merge_requests/_mr_box.html.haml index 916b841e350..e16631b4943 100644 --- a/app/views/projects/merge_requests/_mr_box.html.haml +++ b/app/views/projects/merge_requests/_mr_box.html.haml @@ -1,3 +1,7 @@ .detail-page-description.py-2 - %h2.title.mb-0{ data: { qa_selector: 'title_content' } } - = markdown_field(@merge_request, :title) + - if Feature.enabled?(:updated_mr_header, @project) + = render 'shared/issuable/status_box', issuable: @merge_request + = merge_request_header(@project, @merge_request) + - else + %h2.title.mb-0{ data: { qa_selector: 'title_content' } } + = markdown_field(@merge_request, :title) diff --git a/app/views/projects/merge_requests/_mr_title.html.haml b/app/views/projects/merge_requests/_mr_title.html.haml index 49b7320d630..638c520e210 100644 --- a/app/views/projects/merge_requests/_mr_title.html.haml +++ b/app/views/projects/merge_requests/_mr_title.html.haml @@ -2,51 +2,40 @@ - can_update_merge_request = can?(current_user, :update_merge_request, @merge_request) - can_reopen_merge_request = can?(current_user, :reopen_merge_request, @merge_request) - are_close_and_open_buttons_hidden = merge_request_button_hidden?(@merge_request, true) && merge_request_button_hidden?(@merge_request, false) -- cache_key = [@project, @merge_request, can_update_merge_request, can_reopen_merge_request, are_close_and_open_buttons_hidden, current_user&.preferred_language] +- updated_mr_header_enabled = Feature.enabled?(:updated_mr_header, @project) +- cache_key = [@project, @merge_request, can_update_merge_request, can_reopen_merge_request, are_close_and_open_buttons_hidden, current_user&.preferred_language, updated_mr_header_enabled] = cache(cache_key, expires_in: 1.day) do - if @merge_request.closed_or_merged_without_fork? = render Pajamas::AlertComponent.new(alert_class: 'gl-mb-5', variant: :danger, - dismissible: false) do - .gl-alert-body + dismissible: false) do |c| + = c.body do = _('The source project of this merge request has been removed.') - .detail-page-header.border-bottom-0.pt-0.pb-0 + .detail-page-header.border-bottom-0.pt-0.pb-0{ class: "#{'gl-display-block gl-md-display-flex!' if updated_mr_header_enabled}" } .detail-page-header-body - = render "shared/issuable/status_box", issuable: @merge_request + - unless updated_mr_header_enabled + = render "shared/issuable/status_box", issuable: @merge_request + .issuable-meta{ class: "#{'gl-display-flex' if updated_mr_header_enabled}" } + - if updated_mr_header_enabled + #js-issuable-header-warnings + %h2.title.gl-my-0.gl-display-inline-block{ data: { qa_selector: 'title_content' } } + = markdown_field(@merge_request, :title) + - else + #js-issuable-header-warnings + = issuable_meta(@merge_request, @project) - .issuable-meta - #js-issuable-header-warnings - = issuable_meta(@merge_request, @project) + %div + %button.gl-button.btn.btn-default.btn-icon.float-right.gl-display-block.gutter-toggle.issuable-gutter-toggle.js-sidebar-toggle{ type: 'button', class: "#{'gl-md-display-none!' if moved_mr_sidebar_enabled? } #{'gl-sm-display-none!' unless moved_mr_sidebar_enabled?}" } + = sprite_icon('chevron-double-lg-left') - %a.gl-button.btn.btn-default.btn-icon.float-right.d-block.d-sm-none.gutter-toggle.issuable-gutter-toggle.js-sidebar-toggle{ href: "#" } - = sprite_icon('chevron-double-lg-left') + .detail-page-header-actions.js-issuable-actions{ class: "#{'gl-align-self-start is-merge-request' if updated_mr_header_enabled}" } + - if can_update_merge_request + = link_to _('Edit'), edit_project_merge_request_path(@project, @merge_request), class: "gl-display-none gl-md-display-block btn gl-button btn-default btn-grouped js-issuable-edit", data: { qa_selector: "edit_button" } - .detail-page-header-actions.js-issuable-actions - .clearfix.dropdown - %button.gl-button.btn.btn-default.float-left.gl-md-display-none.gl-w-full{ type: "button", data: { toggle: "dropdown" } } - Options - = sprite_icon('chevron-down', css_class: 'gl-text-gray-500') - .dropdown-menu.dropdown-menu-right - %ul - - if can_update_merge_request - %li= link_to _('Edit'), edit_namespace_project_merge_request_path(@project.namespace, @project, @merge_request) - - if @merge_request.opened? - %li - = link_to @merge_request.work_in_progress? ? _('Mark as ready') : _('Mark as draft'), toggle_draft_merge_request_path(@merge_request), method: :put, class: "js-draft-toggle-button" - %li{ class: [merge_request_button_visibility(@merge_request, true), 'js-close-item'] } - = link_to _('Close'), merge_request_path(@merge_request, merge_request: { state_event: :close }), method: :put, title: 'Close merge request' - - if can_reopen_merge_request - %li{ class: merge_request_button_visibility(@merge_request, false) } - = link_to _('Reopen'), merge_request_path(@merge_request, merge_request: { state_event: :reopen }), method: :put, title: 'Reopen merge request' - - unless @merge_request.merged? || current_user == @merge_request.author - %li= link_to _('Report abuse'), new_abuse_report_path(user_id: @merge_request.author.id, ref_url: merge_request_url(@merge_request)) + - if @merge_request.source_project + = render 'projects/merge_requests/code_dropdown' - - if can_update_merge_request - = link_to _('Edit'), edit_project_merge_request_path(@project, @merge_request), class: "gl-display-none gl-md-display-block btn gl-button btn-default btn-grouped js-issuable-edit", data: { qa_selector: "edit_button" } - - - if can_update_merge_request && !are_close_and_open_buttons_hidden - = render 'projects/merge_requests/close_reopen_draft_report_toggle' - - elsif !@merge_request.merged? - = link_to _('Report abuse'), new_abuse_report_path(user_id: @merge_request.author.id, ref_url: merge_request_url(@merge_request)), class: 'gl-display-none gl-md-display-block gl-button btn btn-default gl-float-right gl-ml-3', title: _('Report abuse') + - if current_user + = render 'projects/merge_requests/close_reopen_draft_report_toggle' 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 e2ac8ef5abc..811b45ef8af 100644 --- a/app/views/projects/merge_requests/creations/_new_compare.html.haml +++ b/app/views/projects/merge_requests/creations/_new_compare.html.haml @@ -22,7 +22,7 @@ selected: f.object.source_project_id .merge-request-select.dropdown = f.hidden_field :source_branch - = dropdown_toggle f.object.source_branch.presence || _("Select source branch"), { toggle: "dropdown", 'field-name': "#{f.object_name}[source_branch]", 'refs-url': refs_project_path(@source_project), selected: f.object.source_branch }, { toggle_class: "js-compare-dropdown js-source-branch monospace" } + = dropdown_toggle f.object.source_branch.presence || _("Select source branch"), { toggle: "dropdown", 'field-name': "#{f.object_name}[source_branch]", 'refs-url': refs_project_path(@source_project), selected: f.object.source_branch, qa_selector: "source_branch_dropdown" }, { toggle_class: "js-compare-dropdown js-source-branch monospace" } .dropdown-menu.dropdown-menu-selectable.js-source-branch-dropdown.git-revision-dropdown = dropdown_title(_("Select source branch")) = dropdown_filter(_("Search branches")) @@ -62,4 +62,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" + = f.submit 'Compare branches and continue', class: "gl-button btn btn-confirm mr-compare-btn", data: { qa_selector: "compare_branches_button" } diff --git a/app/views/projects/merge_requests/invalid.html.haml b/app/views/projects/merge_requests/invalid.html.haml index ce5a042fbf8..4596fcd280d 100644 --- a/app/views/projects/merge_requests/invalid.html.haml +++ b/app/views/projects/merge_requests/invalid.html.haml @@ -10,8 +10,8 @@ = render "projects/merge_requests/mr_box" = render Pajamas::AlertComponent.new(variant: :danger, - dismissible: false) do - .gl-alert-body + dismissible: false) do |c| + = c.body do - if @merge_request.for_fork? && !@merge_request.source_project = err_fork_project_removed - elsif !@merge_request.source_branch_exists? diff --git a/app/views/projects/merge_requests/show.html.haml b/app/views/projects/merge_requests/show.html.haml index 008f2588dbd..13e5451df98 100644 --- a/app/views/projects/merge_requests/show.html.haml +++ b/app/views/projects/merge_requests/show.html.haml @@ -1,5 +1,6 @@ - @gfm_form = true -- @content_class = "merge-request-container#{' limit-container-width' unless fluid_layout}" +- 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") @@ -41,14 +42,14 @@ = _("Changes") = gl_badge_tag @diffs_count, { size: :sm } .d-flex.flex-wrap.align-items-center.justify-content-lg-end - #js-vue-discussion-counter + #js-vue-discussion-counter{ data: { blocks_merge: @project.only_allow_merge_if_all_discussions_are_resolved?.to_s } } .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 - .row - %section.col-md-12 + %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 @@ -70,6 +71,8 @@ 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 @@ -83,7 +86,8 @@ .loading.hide = gl_loading_icon(size: 'lg') -= render 'shared/issuable/sidebar', issuable_sidebar: @issuable_sidebar, assignees: @merge_request.assignees, reviewers: @merge_request.reviewers, source_branch: @merge_request.source_branch +- 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 @@ -92,7 +96,7 @@ #js-review-bar -- if Feature.enabled?(:mr_attention_requests, default_enabled: :yaml) +- if current_user&.mr_attention_requests_enabled? #js-need-attention-sidebar-onboarding = render 'projects/invite_members_modal', project: @project diff --git a/app/views/projects/milestones/index.html.haml b/app/views/projects/milestones/index.html.haml index 154a92e6ec8..326a7c4027f 100644 --- a/app/views/projects/milestones/index.html.haml +++ b/app/views/projects/milestones/index.html.haml @@ -9,7 +9,7 @@ = render 'shared/milestones/search_form' = render 'shared/milestones_sort_dropdown' - if can?(current_user, :admin_milestone, @project) - = link_to new_project_milestone_path(@project), class: 'gl-button btn btn-confirm', data: { qa_selector: "new_project_milestone_link" }, title: _('New milestone') do + = link_to new_project_milestone_path(@project), class: 'gl-button btn btn-confirm gl-ml-3', data: { qa_selector: "new_project_milestone_link" }, title: _('New milestone') do = _('New milestone') - if @milestones.blank? diff --git a/app/views/projects/milestones/show.html.haml b/app/views/projects/milestones/show.html.haml index 13aa8f56d20..4ec72176202 100644 --- a/app/views/projects/milestones/show.html.haml +++ b/app/views/projects/milestones/show.html.haml @@ -14,8 +14,8 @@ - if can?(current_user, :read_issue, @project) && @milestone.total_issues_count == 0 = render Pajamas::AlertComponent.new(dismissible: false, alert_data: { testid: 'no-issues-alert' }, - alert_class: 'gl-mt-3 gl-mb-5') do - .gl-alert-body + alert_class: 'gl-mt-3 gl-mb-5') do |c| + = c.body do = _('Assign some issues to this milestone.') - else = render 'shared/milestones/milestone_complete_alert', milestone: @milestone do diff --git a/app/views/projects/mirrors/_mirror_repos.html.haml b/app/views/projects/mirrors/_mirror_repos.html.haml index bc8400a63f9..d689b54678e 100644 --- a/app/views/projects/mirrors/_mirror_repos.html.haml +++ b/app/views/projects/mirrors/_mirror_repos.html.haml @@ -37,8 +37,8 @@ .panel-footer = f.submit _('Mirror repository'), class: 'gl-button btn btn-confirm js-mirror-submit qa-mirror-repository-button', name: :update_remote_mirror - else - = render Pajamas::AlertComponent.new(dismissible: false) do - .gl-alert-body + = render Pajamas::AlertComponent.new(dismissible: false) do |c| + = c.body do = _('Mirror settings are only available to GitLab administrators.') .panel.panel-default diff --git a/app/views/projects/pages/_access.html.haml b/app/views/projects/pages/_access.html.haml index 67a2eeb7e7b..c5efacb21af 100644 --- a/app/views/projects/pages/_access.html.haml +++ b/app/views/projects/pages/_access.html.haml @@ -15,7 +15,7 @@ = external_link(domain.url, domain.url) - unless @project.public_pages? .card-footer.gl-alert-warning - - help_page = help_page_path('/user/project/pages/pages_access_control') + - help_page = help_page_path('user/project/pages/pages_access_control') - link_start = '<a href="%{url}" target="_blank" class="gl-alert-link" rel="noopener noreferrer">'.html_safe % { url: help_page } - link_end = '</a>'.html_safe = html_escape_once(s_('GitLabPages|Access Control is enabled for this Pages website; only authorized users will be able to access it. To make your website publicly available, navigate to your project\'s %{strong_start}Settings > General > Visibility%{strong_end} and select %{strong_start}Everyone%{strong_end} in pages section. Read the %{link_start}documentation%{link_end} for more information.')).html_safe % { link_start: link_start, link_end: link_end, strong_start: '<strong>'.html_safe, strong_end: '</strong>'.html_safe } diff --git a/app/views/projects/pages/_destroy.haml b/app/views/projects/pages/_destroy.haml index 99efb0b98c6..993026d2884 100644 --- a/app/views/projects/pages/_destroy.haml +++ b/app/views/projects/pages/_destroy.haml @@ -8,7 +8,7 @@ %p.gl-mb-0 = s_('GitLabPages|Removing pages will prevent them from being exposed to the outside world.') .card-footer - = link_to s_('GitLabPages|Remove pages'), project_pages_path(@project), data: { confirm: s_('GitLabPages|Are you sure?')}, method: :delete, class: "btn gl-button btn-danger" + = link_to s_('GitLabPages|Remove pages'), project_pages_path(@project), data: { confirm: s_('GitLabPages|Are you sure?'), 'confirm-btn-variant': 'danger'}, method: :delete, class: "btn gl-button btn-danger", "aria-label": s_('GitLabPages|Remove pages') - else .nothing-here-block = s_('GitLabPages|Only project maintainers can remove pages') diff --git a/app/views/projects/pages/_list.html.haml b/app/views/projects/pages/_list.html.haml index 4e9c77564da..04178804de4 100644 --- a/app/views/projects/pages/_list.html.haml +++ b/app/views/projects/pages/_list.html.haml @@ -20,7 +20,7 @@ = gl_badge_tag s_('GitLabPages|Expired'), variant: :danger %div = link_to s_('GitLabPages|Edit'), project_pages_domain_path(@project, domain), class: "btn gl-button btn-sm btn-grouped btn-confirm btn-inverted" - = link_to s_('GitLabPages|Remove'), project_pages_domain_path(@project, domain), data: { confirm: s_('GitLabPages|Are you sure?')}, method: :delete, class: "btn gl-button btn-danger btn-sm btn-grouped" + = link_to s_('GitLabPages|Remove'), project_pages_domain_path(@project, domain), data: { confirm: s_('GitLabPages|Are you sure?'), 'confirm-btn-variant': 'danger'}, "aria-label": s_("GitLabPages|Remove domain"), method: :delete, class: "btn gl-button btn-danger btn-sm btn-grouped" - if domain.needs_verification? %li.list-group-item.bs-callout-warning - details_link_start = "<a href='#{project_pages_domain_path(@project, domain)}'>".html_safe diff --git a/app/views/projects/pages_domains/_certificate.html.haml b/app/views/projects/pages_domains/_certificate.html.haml index 861305dc93b..4ba3e084dc4 100644 --- a/app/views/projects/pages_domains/_certificate.html.haml +++ b/app/views/projects/pages_domains/_certificate.html.haml @@ -38,7 +38,8 @@ = domain_presenter.pages_domain.subject || _('missing') = link_to _('Remove'), clean_certificate_project_pages_domain_path(@project, domain_presenter), - data: { confirm: _('Are you sure?') }, + data: { confirm: _('Are you sure?'), 'confirm-btn-variant': 'danger' }, + 'aria-label': s_("GitLabPages|Remove certificate"), class: 'gl-button btn btn-danger btn-sm', method: :delete - else diff --git a/app/views/projects/pages_domains/_form.html.haml b/app/views/projects/pages_domains/_form.html.haml index d3e2854ff19..9d9603b0947 100644 --- a/app/views/projects/pages_domains/_form.html.haml +++ b/app/views/projects/pages_domains/_form.html.haml @@ -1,7 +1,8 @@ - if domain_presenter.errors.any? - = render Pajamas::AlertComponent.new(variant: :danger, dismissible: false) do - - domain_presenter.errors.full_messages.each do |msg| - = msg + = render Pajamas::AlertComponent.new(variant: :danger, dismissible: false) do |c| + = c.body do + - domain_presenter.errors.full_messages.each do |msg| + = msg .form-group.border-section .row diff --git a/app/views/projects/pipelines/_with_tabs.html.haml b/app/views/projects/pipelines/_with_tabs.html.haml index 88e6b98b115..6b26c9f3f00 100644 --- a/app/views/projects/pipelines/_with_tabs.html.haml +++ b/app/views/projects/pipelines/_with_tabs.html.haml @@ -32,40 +32,45 @@ #js-pipeline-jobs-vue{ data: { full_path: @project.full_path, pipeline_iid: @pipeline.iid } } - if @pipeline.failed_builds.present? - #js-tab-failures.build-failures.tab-pane.build-page - %table.table.responsive-table.ci-table.responsive-table-sm-rounded - %thead - %th.table-th-transparent - %th.table-th-transparent= _('Name') - %th.table-th-transparent= _('Stage') - %th.table-th-transparent= _('Failure') + #js-tab-failures.tab-pane + - if Feature.enabled?(:failed_jobs_tab_vue, @project) + #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) } } + - else + .build-failures.build-page + %table.table.gl-table.responsive-table.ci-table.responsive-table-sm-rounded + %thead + %th + %th= _('Name') + %th= _('Stage') + %th= _('Failure') + %th - %tbody - - @pipeline.failed_builds.each_with_index do |build, index| - - job = build.present(current_user: current_user) - %tr.build-state.responsive-table-border-start - %td.responsive-table-cell.ci-status-icon-failed{ data: { column: _('Status')} } - .d-none.d-md-block.build-icon - = sprite_icon("status_#{build.status}") - .d-md-none.build-badge - = render "ci/status/badge", link: false, status: job.detailed_status(current_user) - %td.responsive-table-cell.build-name{ data: { column: _('Name')} } - = link_to build.name, pipeline_job_url(pipeline, build) - %td.responsive-table-cell.build-stage{ data: { column: _('Stage')} } - = build.stage.titleize - %td.responsive-table-cell.build-failure{ data: { column: _('Failure')} } - = build.present.callout_failure_message - %td.responsive-table-cell.build-actions - - if can?(current_user, :update_build, job) && job.retryable? - = link_to retry_project_job_path(build.project, build, return_to: request.original_url), method: :post, title: _('Retry'), class: 'gl-button btn btn-default btn-icon' do - = sprite_icon('repeat', css_class: 'gl-icon') - - if can?(current_user, :read_build, job) - %tr.build-log-row.responsive-table-border-end - %td - %td.responsive-table-cell.build-log-container{ colspan: 4 } - %pre.build-log.build-log-rounded - %code.bash.js-build-output - = build_summary(build) + %tbody + - @pipeline.failed_builds.each_with_index do |build, index| + - job = build.present(current_user: current_user) + %tr.build-state.responsive-table-border-start + %td.responsive-table-cell.ci-status-icon-failed{ data: { column: _('Status')} } + .d-none.d-md-block.build-icon + = sprite_icon("status_#{build.status}") + .d-md-none.build-badge + = render "ci/status/badge", link: false, status: job.detailed_status(current_user) + %td.responsive-table-cell.build-name{ data: { column: _('Name')} } + = link_to build.name, pipeline_job_url(pipeline, build) + %td.responsive-table-cell.build-stage{ data: { column: _('Stage')} } + = build.stage.titleize + %td.responsive-table-cell.build-failure{ data: { column: _('Failure')} } + = build.present.callout_failure_message + %td.responsive-table-cell.build-actions + - if can?(current_user, :update_build, job) && job.retryable? + = link_to retry_project_job_path(build.project, build, return_to: request.original_url), method: :post, title: _('Retry'), class: 'gl-button btn btn-default btn-icon' do + = sprite_icon('repeat', css_class: 'gl-icon') + - if can?(current_user, :read_build, job) + %tr.build-log-row.responsive-table-border-end + %td + %td.responsive-table-cell.build-log-container{ colspan: 4 } + %pre.build-log.build-log-rounded + %code.bash.js-build-output + = build_summary(build) #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')} } diff --git a/app/views/projects/pipelines/show.html.haml b/app/views/projects/pipelines/show.html.haml index 2b0a0fc1253..30b224a60da 100644 --- a/app/views/projects/pipelines/show.html.haml +++ b/app/views/projects/pipelines/show.html.haml @@ -27,7 +27,7 @@ = s_('You can also test your %{gitlab_ci_yml} in %{lint_link_start}CI Lint%{lint_link_end}').html_safe % { gitlab_ci_yml: '.gitlab-ci.yml', lint_link_start: lint_link_start, lint_link_end: '</a>'.html_safe } #js-pipeline-notification{ data: { deprecated_keywords_doc_path: help_page_path('ci/yaml/index.md', anchor: 'deprecated-keywords'), full_path: @project.full_path, pipeline_iid: @pipeline.iid } } - - if Feature.enabled?(:pipeline_tabs_vue, @project, default_enabled: :yaml) + - if Feature.enabled?(:pipeline_tabs_vue, @project) #js-pipeline-tabs{ data: js_pipeline_tabs_data(@project, @pipeline) } - else = render "projects/pipelines/with_tabs", pipeline: @pipeline, stages: @stages, pipeline_has_errors: pipeline_has_errors diff --git a/app/views/projects/runners/_group_runners.html.haml b/app/views/projects/runners/_group_runners.html.haml index 8134ee8f417..449b6c25f50 100644 --- a/app/views/projects/runners/_group_runners.html.haml +++ b/app/views/projects/runners/_group_runners.html.haml @@ -28,10 +28,7 @@ = _('This group does not have any group runners yet.') - if can?(current_user, :admin_group_runners, @project.group) - - if Feature.enabled?(:runner_list_group_view_vue_ui, @group, default_enabled: :yaml) - - register_runners_path = group_runners_path(@project.group) - - else - - register_runners_path = group_settings_ci_cd_path(@project.group) + - register_runners_path = group_runners_path(@project.group) - group_link = link_to _("group's CI/CD settings."), register_runners_path = _('Group owners can register group runners in the %{link}').html_safe % { link: group_link } - else diff --git a/app/views/projects/serverless/functions/index.html.haml b/app/views/projects/serverless/functions/index.html.haml deleted file mode 100644 index 03a1b0ee7bb..00000000000 --- a/app/views/projects/serverless/functions/index.html.haml +++ /dev/null @@ -1,17 +0,0 @@ -- @content_class = "limit-container-width" unless fluid_layout -- breadcrumb_title _('Serverless') -- page_title _('Serverless') -- status_path = project_serverless_functions_path(@project, format: :json) -- clusters_path = project_clusters_path(@project) - -.serverless-functions-page.js-serverless-functions-page{ data: { status_path: status_path, - installed: @installed, - clusters_path: clusters_path, - help_path: help_page_path('user/project/clusters/serverless/index'), - empty_image_path: image_path('illustrations/empty-state/empty-serverless-lg.svg') } } - -.js-serverless-functions-notice - .flash-container - -.top-area.adjust.d-flex.justify-content-center.gl-border-none - .serverless-functions-table#js-serverless-functions diff --git a/app/views/projects/serverless/functions/show.html.haml b/app/views/projects/serverless/functions/show.html.haml deleted file mode 100644 index dd81d957e51..00000000000 --- a/app/views/projects/serverless/functions/show.html.haml +++ /dev/null @@ -1,19 +0,0 @@ -- @content_class = "limit-container-width" unless fluid_layout -- clusters_path = project_clusters_path(@project) -- help_path = help_page_path('user/project/clusters/serverless/index') - -- add_to_breadcrumbs('Serverless', project_serverless_functions_path(@project)) - -- page_title @service[:name] - -.serverless-function-details-page.js-serverless-function-details-page{ data: { service: @service.as_json, - prometheus: @prometheus, - clusters_path: clusters_path, - help_path: help_path } } - -.serverless-function-details#js-serverless-function-details - -.js-serverless-function-notice - .flash-container - -.function-holder.js-function-holder.input-group diff --git a/app/views/projects/services/_form.html.haml b/app/views/projects/services/_form.html.haml index d1d9a220068..9d74f99bb19 100644 --- a/app/views/projects/services/_form.html.haml +++ b/app/views/projects/services/_form.html.haml @@ -1,5 +1,5 @@ -- if lookup_context.template_exists?('top', "projects/services/#{integration.to_param}", true) - = render "projects/services/#{integration.to_param}/top", integration: integration +- if lookup_context.template_exists?('top', "shared/integrations/#{integration.to_param}", true) + = render "shared/integrations/#{integration.to_param}/top", integration: integration - if integration.activate_disabled_reason.present? && integration.activate_disabled_reason[:trackers].any? -# When using integration.activate_disabled_reason[:trackers], it's potentially insecure to use the raw records @@ -7,8 +7,8 @@ -# For example, we can get the link to each tracker with scoped_edit_integration_path(tracker, tracker.project) = render Pajamas::AlertComponent.new(title: s_('ExternalIssueIntegration|Another issue tracker is already in use'), variant: :warning, - dismissible: false) do - .gl-alert-body + dismissible: false) do |c| + = c.body do = s_('ExternalIssueIntegration|Only one issue tracker integration can be active at a time. Please disable the active tracker first and try again.') %h2.gl-mb-4 @@ -17,6 +17,6 @@ = sprite_icon('check', css_class: 'gl-text-green-500') = render 'shared/integration_settings', integration: integration -- if lookup_context.template_exists?('show', "projects/services/#{integration.to_param}", true) +- if lookup_context.template_exists?('show', "shared/integrations/#{integration.to_param}", true) %hr - = render "projects/services/#{integration.to_param}/show", integration: integration + = render "shared/integrations/#{integration.to_param}/show", integration: integration diff --git a/app/views/projects/services/mattermost_slash_commands/_detailed_help.html.haml b/app/views/projects/services/mattermost_slash_commands/_detailed_help.html.haml deleted file mode 100644 index 9d8ce186232..00000000000 --- a/app/views/projects/services/mattermost_slash_commands/_detailed_help.html.haml +++ /dev/null @@ -1,98 +0,0 @@ -- pretty_name = @project&.full_name ? html_escape(@project&.full_name) : '<' + _('project name') + '>' -- run_actions_text = html_escape(s_("ProjectService|Perform common operations on GitLab project: %{project_name}")) % { project_name: pretty_name } - -%p= s_("ProjectService|To configure this integration, you should:") -%ul.list-unstyled.indent-list - %li - 1. - = link_to 'https://docs.gitlab.com/ee/user/project/integrations/mattermost_slash_commands.html#enable-custom-slash-commands', target: '_blank', rel: 'noopener noreferrer nofollow' do - Enable custom slash commands - = sprite_icon('external-link') - on your Mattermost installation. - %li - 2. - = link_to 'https://docs.gitlab.com/ee/user/project/integrations/mattermost_slash_commands.html#create-a-slash-command', target: '_blank', rel: 'noopener noreferrer nofollow' do - Add a slash command - = sprite_icon('external-link') - in your Mattermost team with the options listed below. - %li - 3. Paste the token into the - %strong Token - field. - %li - 4. Select the - %strong Active - check box, then select - %strong Save changes - to start using GitLab inside Mattermost! - -%hr - -.help-form - .form-group - = label_tag :display_name, _('Display name'), class: 'col-12 col-form-label label-bold' - .col-12.input-group - = text_field_tag :display_name, "GitLab / #{pretty_name}".html_safe, class: 'form-control form-control-sm', readonly: 'readonly' - .input-group-append - = clipboard_button(target: '#display_name', class: 'input-group-text') - - .form-group - = label_tag :description, _('Description'), class: 'col-12 col-form-label label-bold' - .col-12.input-group - = text_field_tag :description, run_actions_text, class: 'form-control form-control-sm', readonly: 'readonly' - .input-group-append - = clipboard_button(target: '#description', class: 'input-group-text') - - .form-group - = label_tag nil, s_('MattermostService|Command trigger word'), class: 'col-12 col-form-label label-bold' - .col-12 - %p= s_('MattermostService|Fill in the word that works best for your team.') - %p - = s_('MattermostService|Suggestions:') - %code= 'gitlab' - - if @project - %code= @project.path # Path contains no spaces, but dashes - %code= @project.full_path - - .form-group - = label_tag :request_url, s_('MattermostService|Request URL'), class: 'col-12 col-form-label label-bold' - .col-12.input-group - = text_field_tag :request_url, service_trigger_url(integration), class: 'form-control form-control-sm', readonly: 'readonly' - .input-group-append - = clipboard_button(target: '#request_url', class: 'input-group-text') - - .form-group - = label_tag nil, s_('MattermostService|Request method'), class: 'col-12 col-form-label label-bold' - .col-12 POST - - .form-group - = label_tag :response_username, s_('MattermostService|Response username'), class: 'col-12 col-form-label label-bold' - .col-12.input-group - = text_field_tag :response_username, 'GitLab', class: 'form-control form-control-sm', readonly: 'readonly' - .input-group-append - = clipboard_button(target: '#response_username', class: 'input-group-text') - - .form-group - = label_tag :response_icon, s_('MattermostService|Response icon'), class: 'col-12 col-form-label label-bold' - .col-12.input-group - = text_field_tag :response_icon, asset_url('gitlab_logo.png'), class: 'form-control form-control-sm', readonly: 'readonly' - .input-group-append - = clipboard_button(target: '#response_icon', class: 'input-group-text') - - .form-group - = label_tag nil, _('Autocomplete'), class: 'col-12 col-form-label label-bold' - .col-12 Yes - - .form-group - = label_tag :autocomplete_hint, _('Autocomplete hint'), class: 'col-12 col-12 col-form-label label-bold' - .col-12.input-group - = text_field_tag :autocomplete_hint, '[help]', class: 'form-control form-control-sm', readonly: 'readonly' - .input-group-append - = clipboard_button(target: '#autocomplete_hint', class: 'input-group-text') - - .form-group - = label_tag :autocomplete_description, _('Autocomplete description'), class: 'col-12 col-form-label label-bold' - .col-12.input-group - = text_field_tag :autocomplete_description, run_actions_text, class: 'form-control form-control-sm', readonly: 'readonly' - .input-group-append - = clipboard_button(target: '#autocomplete_description', class: 'input-group-text') diff --git a/app/views/projects/services/mattermost_slash_commands/_help.html.haml b/app/views/projects/services/mattermost_slash_commands/_help.html.haml deleted file mode 100644 index 993df389fb0..00000000000 --- a/app/views/projects/services/mattermost_slash_commands/_help.html.haml +++ /dev/null @@ -1,17 +0,0 @@ -- enabled = Gitlab.config.mattermost.enabled - -.info-well - .well-segment - %p - = s_("MattermostService|Use this service to perform common tasks in your project by entering slash commands in Mattermost.") - = link_to help_page_path('user/project/integrations/mattermost_slash_commands.md'), target: '_blank' do - = _("How do I configure this integration?") - = sprite_icon('external-link') - %p.inline - = s_("MattermostService|After you configure the integration, view your new Mattermost commands by entering") - %kbd.inline /<trigger> help - - if !enabled && integration.project_level? - = render 'projects/services/mattermost_slash_commands/detailed_help', integration: integration - -- if enabled && integration.project_level? - = render 'projects/services/mattermost_slash_commands/installation_info', integration: integration diff --git a/app/views/projects/services/mattermost_slash_commands/_installation_info.html.haml b/app/views/projects/services/mattermost_slash_commands/_installation_info.html.haml deleted file mode 100644 index 38adc69dd5e..00000000000 --- a/app/views/projects/services/mattermost_slash_commands/_installation_info.html.haml +++ /dev/null @@ -1,7 +0,0 @@ -.services-installation-info - - unless integration.activated? - .row - .col-sm-9.offset-sm-3 - = link_to new_project_mattermost_path(@project), class: 'btn gl-button btn-lg' do - = custom_icon('mattermost_logo', size: 15) - = s_("MattermostService|Add to Mattermost") diff --git a/app/views/projects/services/prometheus/_custom_metrics.html.haml b/app/views/projects/services/prometheus/_custom_metrics.html.haml deleted file mode 100644 index 896249c6163..00000000000 --- a/app/views/projects/services/prometheus/_custom_metrics.html.haml +++ /dev/null @@ -1,28 +0,0 @@ -- project = local_assigns.fetch(:project) - -.col-lg-3 - %p - = s_('PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope "*" OR a manually configured Prometheus to be available.') - = link_to s_('PrometheusService|More information'), help_page_path('operations/metrics/index.md', anchor: 'adding-custom-metrics'), target: '_blank', rel: "noopener noreferrer" - -.col-lg-9 - .card.custom-monitored-metrics.js-panel-custom-monitored-metrics{ data: { qa_selector: 'custom_metrics_container', active_custom_metrics: project_prometheus_metrics_path(project), environments_data: environments_list_data, service_active: "#{integration.active}" } } - .card-header - %strong - = s_('PrometheusService|Custom metrics') - = gl_badge_tag 0, nil, class: 'js-custom-monitored-count' - = link_to s_('PrometheusService|New metric'), new_project_prometheus_metric_path(project), class: 'btn gl-button btn-confirm gl-ml-auto js-new-metric-button hidden', data: { qa_selector: 'new_metric_button' } - .card-body - .flash-container.hidden - .flash-warning - .flash-text - .loading-metrics.js-loading-custom-metrics - %p.m-3 - = gl_loading_icon(inline: true, css_class: 'metrics-load-spinner') - = s_('PrometheusService|Finding custom metrics...') - .empty-metrics.hidden.js-empty-custom-metrics - %p.text-tertiary.m-3.js-no-active-integration-text.hidden - = s_('PrometheusService|Enable Prometheus to define custom metrics, using either option above') - %p.text-tertiary.m-3.js-new-metric-text.hidden - = s_('PrometheusService|No custom metrics have been created. Create one using the button above') - %ul.list-unstyled.metrics-list.hidden.js-custom-metrics-list diff --git a/app/views/projects/services/prometheus/_external_alerts.html.haml b/app/views/projects/services/prometheus/_external_alerts.html.haml deleted file mode 100644 index 168b4853a9a..00000000000 --- a/app/views/projects/services/prometheus/_external_alerts.html.haml +++ /dev/null @@ -1,8 +0,0 @@ -- return unless can?(current_user, :read_prometheus_alerts, @project) -- return unless integration.manual_configuration? - -- notify_url = notify_project_prometheus_alerts_url(@project, format: :json) -- authorization_key = @project.alerting_setting.try(:token) -- learn_more_url = help_page_path('operations/metrics/alerts.md', anchor: 'external-prometheus-instances') - -#js-settings-prometheus-alerts{ data: { notify_url: notify_url, authorization_key: authorization_key, change_key_url: reset_alerting_token_project_settings_operations_path(@project), learn_more_url: learn_more_url, disabled: true } } diff --git a/app/views/projects/services/prometheus/_help.html.haml b/app/views/projects/services/prometheus/_help.html.haml deleted file mode 100644 index f40d8638845..00000000000 --- a/app/views/projects/services/prometheus/_help.html.haml +++ /dev/null @@ -1,8 +0,0 @@ -- if @project - = render 'shared/prometheus_configuration_banner', project: @project, integration: integration, header_tag: :h4 - %hr - -%h4.gl-mb-3 - = s_('PrometheusService|Manual configuration') -%p - = s_('PrometheusService|Auto configuration settings are used unless you override their values here.') diff --git a/app/views/projects/services/prometheus/_metrics.html.haml b/app/views/projects/services/prometheus/_metrics.html.haml deleted file mode 100644 index 8794f3e24da..00000000000 --- a/app/views/projects/services/prometheus/_metrics.html.haml +++ /dev/null @@ -1,38 +0,0 @@ -- project = local_assigns.fetch(:project) - -= render 'projects/services/prometheus/custom_metrics', project: project, integration: integration - -.col-lg-3 - %p - = s_('PrometheusService|Common metrics are automatically monitored based on a library of metrics from popular exporters.') - = link_to s_('PrometheusService|More information'), help_page_path('user/project/integrations/prometheus'), target: '_blank', rel: "noopener noreferrer" - -.col-lg-9 - .card.js-panel-monitored-metrics{ data: { active_metrics: active_common_project_prometheus_metrics_path(project, :json), metrics_help_path: help_page_path('user/project/integrations/prometheus_library/index') } } - .card-header - %strong - = s_('PrometheusService|Common metrics') - = gl_badge_tag 0, nil, class: 'js-monitored-count' - .card-body - .loading-metrics.js-loading-metrics - %p.m-3 - = gl_loading_icon(inline: true, css_class: 'metrics-load-spinner') - = s_('PrometheusService|Finding and configuring metrics...') - .empty-metrics.hidden.js-empty-metrics - %p.text-tertiary.m-3 - = s_('PrometheusService|Waiting for your first deployment to an environment to find common metrics') - %ul.list-unstyled.metrics-list.hidden.js-metrics-list - - .card.hidden.js-panel-missing-env-vars - .card-header - = sprite_icon('chevron-lg-right', css_class: 'panel-toggle js-panel-toggle-right' ) - = sprite_icon('chevron-lg-down', css_class: 'panel-toggle js-panel-toggle-down hidden' ) - = s_('PrometheusService|Missing environment variable') - = gl_badge_tag 0, nil, class: 'js-env-var-count' - .card-body.hidden - .flash-container - .flash-notice - .flash-text - = s_("PrometheusService|To set up automatic monitoring, add the environment variable %{variable} to exporter's queries." % { variable: "<code>$CI_ENVIRONMENT_SLUG</code>" }).html_safe - = link_to s_('PrometheusService|More information'), help_page_path('operations/metrics/dashboards/variables.md', anchor: 'query-variables') - %ul.list-unstyled.metrics-list.js-missing-var-metrics-list diff --git a/app/views/projects/services/prometheus/_show.html.haml b/app/views/projects/services/prometheus/_show.html.haml deleted file mode 100644 index 3350ac8a6c5..00000000000 --- a/app/views/projects/services/prometheus/_show.html.haml +++ /dev/null @@ -1,9 +0,0 @@ -.row - .col-lg-3 - %h4.gl-mt-0 - = s_('PrometheusService|Metrics') - -.row.gl-mb-3.prometheus-metrics-monitoring.js-prometheus-metrics-monitoring - = render 'projects/services/prometheus/metrics', project: @project, integration: integration - -= render 'projects/services/prometheus/external_alerts', project: @project, integration: integration diff --git a/app/views/projects/services/prometheus/_top.html.haml b/app/views/projects/services/prometheus/_top.html.haml deleted file mode 100644 index 52b29ea2e8f..00000000000 --- a/app/views/projects/services/prometheus/_top.html.haml +++ /dev/null @@ -1,9 +0,0 @@ -- return unless integration.manual_configuration? - -.row - .col-lg-12 - = render Pajamas::AlertComponent.new(dismissible: false) do - .gl-alert-body - = s_('AlertSettings|You can now set up alert endpoints for manually configured Prometheus instances in the Alerts section on the Operations settings page. Alert endpoint fields on this page have been deprecated.') - .gl-alert-actions - = link_to _('Visit settings page'), project_settings_operations_path(@project, anchor: 'js-alert-management-settings'), class: 'gl-button btn gl-alert-action btn-info' diff --git a/app/views/projects/services/slack/_help.haml b/app/views/projects/services/slack/_help.haml deleted file mode 100644 index c5fcd5ca5fe..00000000000 --- a/app/views/projects/services/slack/_help.haml +++ /dev/null @@ -1,4 +0,0 @@ -.info-well - .well-segment - %p= s_('SlackIntegration|Sends notifications about project events to Slack channels.') - = link_to _('How do I set up this service?'), help_page_path('user/project/integrations/slack') diff --git a/app/views/projects/services/slack_slash_commands/_help.html.haml b/app/views/projects/services/slack_slash_commands/_help.html.haml deleted file mode 100644 index fee0ca15808..00000000000 --- a/app/views/projects/services/slack_slash_commands/_help.html.haml +++ /dev/null @@ -1,93 +0,0 @@ -- pretty_name = @project&.full_name ? html_escape(@project&.full_name) : '<' + _('project name') + '>' -- run_actions_text = html_escape_once(s_("ProjectService|Perform common operations on GitLab project: %{project_name}") % { project_name: pretty_name }) - -.info-well - .well-segment - %p - = s_("SlackService|Perform common operations in this project by entering slash commands in Slack.") - = link_to help_page_path('user/project/integrations/slack_slash_commands.md'), target: '_blank' do - = _("Learn more.") - = sprite_icon('external-link') - %p.inline - = s_("SlackService|After setup, get a list of available Slack slash commands by entering") - %kbd.inline /<command> help - - if integration.project_level? - %p= _("To set up this integration:") - %ul.list-unstyled.indent-list - %li - - slash_command_link_url = 'https://my.slack.com/services/new/slash-commands' - - slash_command_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: slash_command_link_url } - - slash_command_link_end = ' %{external_link_icon}</a>'.html_safe % { external_link_icon: sprite_icon('external-link') } - = html_escape(s_('SlackService|1. %{slash_command_link_start}Add a slash command%{slash_command_link_end} in your Slack team using this information:')) % { slash_command_link_start: slash_command_link_start, slash_command_link_end: slash_command_link_end } - - %hr - - .help-form - .form-group - = label_tag nil, _('Command'), class: 'col-12 col-form-label label-bold' - .col-12 - %p= s_('SlackService|Fill in the word that works best for your team.') - %p - = _("Suggestions:") - %code= 'gitlab' - %code= 'project' - - if @project - %code= @project.path # Path contains no spaces, but dashes - %code= @project.full_path - - .form-group - = label_tag :url, 'URL', class: 'col-12 col-form-label label-bold' - .col-12.input-group - = text_field_tag :url, service_trigger_url(integration), class: 'form-control form-control-sm', readonly: 'readonly' - .input-group-append - = clipboard_button(target: '#url', class: 'input-group-text') - - .form-group - = label_tag nil, _('Method'), class: 'col-12 col-form-label label-bold' - .col-12 POST - - .form-group - = label_tag :customize_name, _('Customize name'), class: 'col-12 col-form-label label-bold' - .col-12.input-group - = text_field_tag :customize_name, 'GitLab', class: 'form-control form-control-sm', readonly: 'readonly' - .input-group-append - = clipboard_button(target: '#customize_name', class: 'input-group-text') - - .form-group - = label_tag nil, _('Customize icon'), class: 'col-12 col-form-label label-bold' - .col-12 - = image_tag(asset_url('slash-command-logo.png', skip_pipeline: true), width: 36, height: 36, class: 'mr-3') - = link_to(_('Download image'), asset_url('gitlab_logo.png'), class: 'gl-button btn btn-default btn-sm', target: '_blank', rel: 'noopener noreferrer') - - .form-group - = label_tag nil, _('Autocomplete'), class: 'col-12 col-form-label label-bold' - .col-12 Show this command in the autocomplete list - - .form-group - = label_tag :autocomplete_description, _('Autocomplete description'), class: 'col-12 col-form-label label-bold' - .col-12.input-group - = text_field_tag :autocomplete_description, run_actions_text.html_safe, class: 'form-control form-control-sm', readonly: 'readonly' - .input-group-append - = clipboard_button(target: '#autocomplete_description', class: 'input-group-text') - - .form-group - = label_tag :autocomplete_usage_hint, _('Autocomplete usage hint'), class: 'col-12 col-form-label label-bold' - .col-12.input-group - = text_field_tag :autocomplete_usage_hint, '[help]', class: 'form-control form-control-sm', readonly: 'readonly' - .input-group-append - = clipboard_button(target: '#autocomplete_usage_hint', class: 'input-group-text') - - .form-group - = label_tag :descriptive_label, _('Descriptive label'), class: 'col-12 col-form-label label-bold' - .col-12.input-group - = text_field_tag :descriptive_label, _('Perform common operations on GitLab project'), class: 'form-control form-control-sm', readonly: 'readonly' - .input-group-append - = clipboard_button(target: '#descriptive_label', class: 'input-group-text') - - %hr - - %ul.list-unstyled.indent-list - %li - = html_escape(s_("SlackService|2. Paste the token from Slack in the %{strong_open}Token%{strong_close} field below.")) % { strong_open: '<strong>'.html_safe, strong_close: '</strong>'.html_safe } - %li - = html_escape(s_("SlackService|3. Select the %{strong_open}Active%{strong_close} checkbox, select %{strong_open}Save changes%{strong_close}, and start using slash commands in Slack!")) % { strong_open: '<strong>'.html_safe, strong_close: '</strong>'.html_safe } diff --git a/app/views/projects/settings/ci_cd/_form.html.haml b/app/views/projects/settings/ci_cd/_form.html.haml index 5ef56cda6d2..508e63f77d8 100644 --- a/app/views/projects/settings/ci_cd/_form.html.haml +++ b/app/views/projects/settings/ci_cd/_form.html.haml @@ -1,6 +1,7 @@ - help_link_public_pipelines = link_to sprite_icon('question-o'), help_page_path('ci/pipelines/settings', anchor: 'change-which-users-can-view-your-pipelines'), target: '_blank', rel: 'noopener noreferrer' - help_link_auto_canceling = link_to sprite_icon('question-o'), help_page_path('ci/pipelines/settings', anchor: 'auto-cancel-redundant-pipelines'), target: '_blank', rel: 'noopener noreferrer' -- help_link_skip_outdated =link_to sprite_icon('question-o'), help_page_path('ci/pipelines/settings', anchor: 'skip-outdated-deployment-jobs'), target: '_blank', rel: 'noopener noreferrer' +- help_link_skip_outdated = link_to sprite_icon('question-o'), help_page_path('ci/pipelines/settings', anchor: 'skip-outdated-deployment-jobs'), target: '_blank', rel: 'noopener noreferrer' +- help_link_separated_caches = link_to sprite_icon('question-o'), help_page_path('ci/caching/index', anchor: 'cache-key-names'), target: '_blank', rel: 'noopener noreferrer' .row.gl-mt-3 .col-lg-12 @@ -25,6 +26,11 @@ help_text: (_('When a deployment job is successful, skip older deployment jobs that are still pending.') + ' ' + help_link_skip_outdated).html_safe .form-group + = f.gitlab_ui_checkbox_component :ci_separated_caches, + s_("CICD|Use separate caches for protected branches"), + help_text: (s_('CICD|Unprotected branches will not have access to the cache from protected branches.') + ' ' + help_link_separated_caches).html_safe + + .form-group = f.label :ci_config_path, _('CI/CD configuration file'), class: 'label-bold' = f.text_field :ci_config_path, class: 'form-control', placeholder: '.gitlab-ci.yml' %p.form-text.text-muted @@ -77,19 +83,7 @@ = _("The maximum file size in megabytes for individual job artifacts.") = link_to sprite_icon('question-o'), help_page_path('user/admin_area/settings/continuous_integration', anchor: 'maximum-artifacts-size'), target: '_blank', rel: 'noopener noreferrer' - .form-group - = f.label :build_coverage_regex, _("Test coverage parsing"), class: 'label-bold' - .input-group - %span.input-group-prepend - .input-group-text / - = f.text_field :build_coverage_regex, class: 'form-control gl-form-input', placeholder: 'Regular expression', data: { qa_selector: 'build_coverage_regex_field' } - %span.input-group-append - .input-group-text / - %p.form-text.text-muted - = html_escape(_('The regular expression used to find test coverage output in the job log. For example, use %{regex} for Simplecov (Ruby). Leave blank to disable.')) % { regex: '<code>\(\d+.\d+%\)</code>'.html_safe } - = link_to sprite_icon('question-o'), help_page_path('ci/pipelines/settings', anchor: 'add-test-coverage-results-using-project-settings-deprecated'), target: '_blank', rel: 'noopener noreferrer' - - = f.submit _('Save changes'), class: "btn gl-button btn-confirm", data: { qa_selector: 'save_general_pipelines_changes_button' } + = f.submit _('Save changes'), class: "btn gl-button btn-confirm" %hr diff --git a/app/views/projects/settings/ci_cd/show.html.haml b/app/views/projects/settings/ci_cd/show.html.haml index 28cde994d00..87ca13a7bd6 100644 --- a/app/views/projects/settings/ci_cd/show.html.haml +++ b/app/views/projects/settings/ci_cd/show.html.haml @@ -7,14 +7,14 @@ - expanded = expanded_by_default? - general_expanded = @project.errors.empty? ? expanded : true -%section.settings#js-general-pipeline-settings.no-animate{ class: ('expanded' if general_expanded), data: { qa_selector: 'general_pipelines_settings_content' } } +%section.settings#js-general-pipeline-settings.no-animate{ class: ('expanded' if general_expanded) } .settings-header %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only = _("General pipelines") %button.btn.gl-button.btn-default.js-settings-toggle{ type: 'button' } = expanded ? _('Collapse') : _('Expand') %p - = _("Customize your pipeline configuration and coverage report.") + = _("Customize your pipeline configuration.") .settings-content = render 'form' @@ -109,3 +109,15 @@ = link_to _('Learn more'), help_page_path('ci/jobs/ci_job_token'), target: '_blank', rel: 'noopener noreferrer' .settings-content = render 'ci/token_access/index' + +- if show_secure_files_setting(@project, current_user) + %section.settings + .settings-header + %h4.settings-title + = _("Secure Files") + = button_to project_ci_secure_files_path(@project), method: :get, class: 'btn gl-button btn-default' do + = _('Manage') + %p + = _("Use Secure Files to store files used by your pipelines such as Android keystores, or Apple provisioning profiles and signing certificates.") + = link_to _('Learn more'), help_page_path('ci/secure_files/index'), target: '_blank', rel: 'noopener noreferrer' + diff --git a/app/views/projects/settings/operations/_prometheus.html.haml b/app/views/projects/settings/operations/_prometheus.html.haml deleted file mode 100644 index 93281cc225b..00000000000 --- a/app/views/projects/settings/operations/_prometheus.html.haml +++ /dev/null @@ -1,17 +0,0 @@ -%section.settings.no-animate.js-prometheus-settings - .settings-header - %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only - = _('Prometheus') - %button.gl-button.btn.btn-default.js-settings-toggle{ type: 'button' } - = _('Expand') - %p - = _('Link Prometheus monitoring to GitLab.') - = link_to _('More information'), help_page_path('user/project/integrations/prometheus'), target: '_blank', rel: 'noopener noreferrer' - .settings-content - - if @project - = render 'shared/prometheus_configuration_banner', project: @project, integration: service, header_tag: :b, info_well_classes: 'gl-p-3 gl-mt-3' - - %b.gl-mb-3 - = s_('PrometheusService|Manual configuration') - %p - = s_('PrometheusService|Auto configuration settings are used unless you override their values here.') diff --git a/app/views/projects/settings/operations/show.html.haml b/app/views/projects/settings/operations/show.html.haml index 9a31666c316..80c22604e49 100644 --- a/app/views/projects/settings/operations/show.html.haml +++ b/app/views/projects/settings/operations/show.html.haml @@ -15,13 +15,14 @@ = s_('Deprecations|Feature deprecation and removal') .gl-alert-body %p - = html_escape(s_('Deprecations|The metrics feature was deprecated in GitLab 14.7. The logs and tracing features were also deprecated in GitLab 14.7, and are %{removal_link_start} scheduled for removal %{link_end} in GitLab 15.0. For information on a possible replacement, %{opstrace_link_start} learn more about Opstrace %{link_end}.')) % {removal_link_start: removal_epic_link_start, opstrace_link_start: opstrace_link_start, link_end: link_end } + = html_escape(s_('Deprecations|The metrics feature was deprecated in GitLab 14.7.')) + = html_escape(s_('Deprecations|The logs and tracing features were also deprecated in GitLab 14.7, and are %{removal_link_start} scheduled for removal %{link_end} in GitLab 15.0.')) % {removal_link_start: removal_epic_link_start, link_end: link_end } if Feature.enabled?(:monitor_tracing, @project) + = html_escape(s_('Deprecations|For information on a possible replacement, %{opstrace_link_start} learn more about Opstrace %{link_end}.')) % {opstrace_link_start: opstrace_link_start, link_end: link_end } = render 'projects/settings/operations/metrics_dashboard' -= render 'projects/settings/operations/tracing' += render 'projects/settings/operations/tracing' if Feature.enabled?(:monitor_tracing, @project) = render 'projects/settings/operations/error_tracking' = render 'projects/settings/operations/alert_management' = render 'projects/settings/operations/incidents' = render 'projects/settings/operations/grafana_integration' = render_if_exists 'projects/settings/operations/status_page' -= render 'projects/settings/operations/prometheus', service: prometheus_integration if Feature.enabled?(:settings_operations_prometheus_service) diff --git a/app/views/projects/tree/_tree_header.html.haml b/app/views/projects/tree/_tree_header.html.haml index 202c0f22420..29bdca1c876 100644 --- a/app/views/projects/tree/_tree_header.html.haml +++ b/app/views/projects/tree/_tree_header.html.haml @@ -1,6 +1,8 @@ +- is_project_overview = local_assigns.fetch(:is_project_overview, false) + .tree-ref-container.gl-display-flex.mb-2.mb-md-0 .tree-ref-holder - = render 'shared/ref_switcher', destination: 'tree', path: @path, show_create: true + = render 'shared/ref_switcher', destination: 'tree', show_create: true #js-repo-breadcrumb{ data: breadcrumb_data_attributes } @@ -8,7 +10,7 @@ .tree-controls .d-block.d-sm-flex.flex-wrap.align-items-start.gl-children-ml-sm-3.gl-first-child-ml-sm-0< = render_if_exists 'projects/tree/lock_link' - #js-tree-history-link{ data: { history_link: project_commits_path(@project, @ref) } } + #js-tree-history-link{ data: { history_link: project_commits_path(@project, @ref), is_project_overview: is_project_overview.to_s } } = render 'projects/find_file_link' = render 'shared/web_ide_button', blob: nil diff --git a/app/views/projects/work_items/index.html.haml b/app/views/projects/work_items/index.html.haml index 0efd7a740d3..356f93c6ed5 100644 --- a/app/views/projects/work_items/index.html.haml +++ b/app/views/projects/work_items/index.html.haml @@ -1,3 +1,3 @@ - page_title s_('WorkItem|Work Items') -#js-work-items{ data: { full_path: @project.full_path } } +#js-work-items{ data: { full_path: @project.full_path, issues_list_path: project_issues_path(@project) } } |