diff options
Diffstat (limited to 'app/views/projects')
123 files changed, 294 insertions, 429 deletions
diff --git a/app/views/projects/_find_file_link.html.haml b/app/views/projects/_find_file_link.html.haml index 74cdb0f7409..c3b4a61c28a 100644 --- a/app/views/projects/_find_file_link.html.haml +++ b/app/views/projects/_find_file_link.html.haml @@ -1,2 +1,2 @@ -= link_to project_find_file_path(@project, @ref), class: 'btn shortcuts-find-file', rel: 'nofollow' do += link_to project_find_file_path(@project, @ref), class: 'gl-button btn shortcuts-find-file', rel: 'nofollow' do = _('Find file') diff --git a/app/views/projects/_home_panel.html.haml b/app/views/projects/_home_panel.html.haml index 9f4496e7a13..569255ec2e5 100644 --- a/app/views/projects/_home_panel.html.haml +++ b/app/views/projects/_home_panel.html.haml @@ -3,21 +3,23 @@ - max_project_topic_length = 15 - emails_disabled = @project.emails_disabled? += render_if_exists 'projects/invite_members_modal', project: @project + .project-home-panel.js-show-on-project-root.gl-my-5{ class: [("empty-project" if empty_repo)] } .row.gl-mb-3 .home-panel-title-row.col-md-12.col-lg-6.d-flex .avatar-container.rect-avatar.s64.home-panel-avatar.gl-flex-shrink-0.gl-w-11.gl-h-11.gl-mr-3.float-none - = project_icon(@project, alt: @project.name, class: 'avatar avatar-tile s64', width: 64, height: 64) + = project_icon(@project, alt: @project.name, class: 'avatar avatar-tile s64', width: 64, height: 64, itemprop: 'image') .d-flex.flex-column.flex-wrap.align-items-baseline .d-inline-flex.align-items-baseline - %h1.home-panel-title.gl-mt-3.gl-mb-2.gl-font-size-h1.gl-line-height-24.gl-font-weight-bold{ data: { qa_selector: 'project_name_content' } } + %h1.home-panel-title.gl-mt-3.gl-mb-2.gl-font-size-h1.gl-line-height-24.gl-font-weight-bold{ data: { qa_selector: 'project_name_content' }, itemprop: 'name' } = @project.name %span.visibility-icon.text-secondary.gl-ml-2.has-tooltip{ data: { container: 'body' }, title: visibility_icon_description(@project) } = visibility_level_icon(@project.visibility_level, options: { class: 'icon' }) = render_if_exists 'compliance_management/compliance_framework/compliance_framework_badge', project: @project .home-panel-metadata.d-flex.flex-wrap.text-secondary.gl-font-base.gl-font-weight-normal.gl-line-height-normal - if can?(current_user, :read_project, @project) - %span.text-secondary + %span.text-secondary{ itemprop: 'identifier' } = s_('ProjectPage|Project ID: %{project_id}') % { project_id: @project.id } - if current_user %span.access-request-links.gl-ml-3 @@ -30,10 +32,10 @@ - project_topics_classes = "badge badge-pill badge-secondary gl-mr-2" - explore_project_topic_path = explore_projects_path(tag: topic) - if topic.length > max_project_topic_length - %a{ class: "#{ project_topics_classes } str-truncated-30 has-tooltip", data: { container: "body" }, title: topic, href: explore_project_topic_path } + %a{ class: "#{ project_topics_classes } str-truncated-30 has-tooltip", data: { container: "body" }, title: topic, href: explore_project_topic_path, itemprop: 'keywords' } = topic.titleize - else - %a{ class: project_topics_classes, href: explore_project_topic_path } + %a{ class: project_topics_classes, href: explore_project_topic_path, itemprop: 'keywords' } = topic.titleize - if @project.has_extra_topics? @@ -44,7 +46,7 @@ .project-repo-buttons.col-md-12.col-lg-6.d-inline-flex.flex-wrap.justify-content-lg-end - if current_user .d-inline-flex - = render 'shared/notifications/new_button', notification_setting: @notification_setting, btn_class: 'btn-xs', emails_disabled: emails_disabled + = render 'shared/notifications/new_button', notification_setting: @notification_setting, btn_class: 'btn-xs', dropdown_container_class: 'gl-mr-3', emails_disabled: emails_disabled .count-buttons.d-inline-flex = render 'projects/buttons/star' @@ -61,7 +63,7 @@ .home-panel-home-desc.mt-1 - if @project.description.present? .home-panel-description.text-break - .home-panel-description-markdown.read-more-container + .home-panel-description-markdown.read-more-container{ itemprop: 'abstract' } = markdown_field(@project, :description) %button.btn.btn-blank.btn-link.js-read-more-trigger.d-lg-none{ type: "button" } = _("Read more") diff --git a/app/views/projects/_invite_members_modal.html.haml b/app/views/projects/_invite_members_modal.html.haml new file mode 100644 index 00000000000..ad95f39bbfa --- /dev/null +++ b/app/views/projects/_invite_members_modal.html.haml @@ -0,0 +1,7 @@ +- if invite_members_allowed?(project.group) + .js-invite-members-modal{ data: { id: project.id, + name: project.name, + is_project: true, + access_levels: GroupMember.access_level_roles.to_json, + default_access_level: Gitlab::Access::GUEST, + help_link: help_page_url('user/permissions') } } diff --git a/app/views/projects/_invite_members_side_nav_link.html.haml b/app/views/projects/_invite_members_side_nav_link.html.haml new file mode 100644 index 00000000000..15e0b75cf57 --- /dev/null +++ b/app/views/projects/_invite_members_side_nav_link.html.haml @@ -0,0 +1,3 @@ +- if invite_members_allowed?(project.group) && body_data_page == 'projects:show' + %li + .js-invite-members-trigger{ data: { icon: 'plus', display_text: _('Invite team members') } } 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 047b4dafbfc..8951f2ed22f 100644 --- a/app/views/projects/_merge_request_merge_options_settings.html.haml +++ b/app/views/projects/_merge_request_merge_options_settings.html.haml @@ -4,6 +4,7 @@ %b= s_('ProjectSettings|Merge options') %p.text-secondary= s_('ProjectSettings|Additional merge request capabilities that influence how and when merges will be performed') = 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 diff --git a/app/views/projects/_remove.html.haml b/app/views/projects/_remove.html.haml index 05eab3b3245..c246c45d0f7 100644 --- a/app/views/projects/_remove.html.haml +++ b/app/views/projects/_remove.html.haml @@ -1,5 +1,4 @@ - return unless can?(current_user, :remove_project, project) -- confirm_phrase = s_('DeleteProject|Delete %{name}') % { name: project.full_name } .sub-section %h4.danger-title= _('Delete project') @@ -7,4 +6,4 @@ %strong= _('Deleting the project will delete its repository and all related resources including issues, merge requests etc.') %p %strong= _('Deleted projects cannot be restored!') - #js-project-delete-button{ data: { form_path: project_path(project), confirm_phrase: confirm_phrase } } + #js-project-delete-button{ data: { form_path: project_path(project), confirm_phrase: project.path } } diff --git a/app/views/projects/_remove_fork.html.haml b/app/views/projects/_remove_fork.html.haml new file mode 100644 index 00000000000..2a7453902a8 --- /dev/null +++ b/app/views/projects/_remove_fork.html.haml @@ -0,0 +1,10 @@ +- return unless @project.forked? && can?(current_user, :remove_fork_project, @project) + +.sub-section + %h4.danger-title= _('Remove fork relationship') + %p= remove_fork_project_description_message(@project) + + = form_for @project, url: remove_fork_project_path(@project), method: :delete, remote: true, html: { class: 'transfer-project' } do |f| + %p + %strong= _('Once removed, the fork relationship cannot be restored. This project will no longer be able to receive or send merge requests to the source project or other forks.') + = button_to _('Remove fork relationship'), '#', class: "gl-button btn btn-danger js-confirm-danger", data: { "confirm-danger-message" => remove_fork_project_warning_message(@project) } diff --git a/app/views/projects/_service_desk_settings.html.haml b/app/views/projects/_service_desk_settings.html.haml index fceef0624d7..7c08955983a 100644 --- a/app/views/projects/_service_desk_settings.html.haml +++ b/app/views/projects/_service_desk_settings.html.haml @@ -10,7 +10,7 @@ - if ::Gitlab::ServiceDesk.supported? .js-service-desk-setting-root{ data: { endpoint: project_service_desk_path(@project), enabled: "#{@project.service_desk_enabled}", - incoming_email: (@project.service_desk_address if @project.service_desk_enabled), + incoming_email: (@project.service_desk_incoming_address if @project.service_desk_enabled), custom_email: (@project.service_desk_custom_address if @project.service_desk_enabled), selected_template: "#{@project.service_desk_setting&.issue_template_key}", outgoing_name: "#{@project.service_desk_setting&.outgoing_name}", diff --git a/app/views/projects/_stat_anchor_list.html.haml b/app/views/projects/_stat_anchor_list.html.haml index 516790fb6d9..8a93d93a538 100644 --- a/app/views/projects/_stat_anchor_list.html.haml +++ b/app/views/projects/_stat_anchor_list.html.haml @@ -5,5 +5,5 @@ %ul.nav - anchors.each do |anchor| %li.nav-item - = link_to_if anchor.link, anchor.label, anchor.link, class: anchor.is_link ? 'nav-link stat-link d-flex align-items-center' : "nav-link btn btn-#{anchor.class_modifier || 'missing'} d-flex align-items-center" do + = link_to_if(anchor.link, anchor.label, anchor.link, stat_anchor_attrs(anchor)) do .stat-text.d-flex.align-items-center{ class: ('btn btn-default disabled' if project_buttons) }= anchor.label diff --git a/app/views/projects/_transfer.html.haml b/app/views/projects/_transfer.html.haml new file mode 100644 index 00000000000..eb7feb7bd3b --- /dev/null +++ b/app/views/projects/_transfer.html.haml @@ -0,0 +1,16 @@ +- return unless can?(current_user, :change_namespace, @project) + +.sub-section + %h4.danger-title= _('Transfer project') + = form_for @project, url: transfer_project_path(@project), method: :put, remote: true, html: { class: 'js-project-transfer-form' } do |f| + .form-group + = label_tag :new_namespace_id, nil, class: 'label-bold' do + %span= _('Select a new namespace') + .form-group + = select_tag :new_namespace_id, namespaces_options(nil), include_blank: true, class: 'select2' + %ul + %li= _("Be careful. Changing the project's namespace can have unintended side effects.") + %li= _('You can only transfer the project to namespaces you manage.') + %li= _('You will need to update your local repositories to point to the new location.') + %li= _('Project visibility level will be changed to match namespace rules when transferring to a group.') + = f.submit 'Transfer project', class: "gl-button btn btn-danger js-confirm-danger qa-transfer-button", data: { "confirm-danger-message" => transfer_project_message(@project) } diff --git a/app/views/projects/alert_management/details.html.haml b/app/views/projects/alert_management/details.html.haml index 5230d5e3476..b1d680e4f3d 100644 --- a/app/views/projects/alert_management/details.html.haml +++ b/app/views/projects/alert_management/details.html.haml @@ -1,4 +1,5 @@ - add_to_breadcrumbs s_('AlertManagement|Alerts'), project_alert_management_index_path(@project) - page_title s_('AlertManagement|Alert detail') +- add_page_specific_style 'page_bundles/alert_management_details' #js-alert_details{ data: alert_management_detail_data(@project, @alert_id) } diff --git a/app/views/projects/artifacts/_artifact.html.haml b/app/views/projects/artifacts/_artifact.html.haml index 30f30fe922f..233a41a37b5 100644 --- a/app/views/projects/artifacts/_artifact.html.haml +++ b/app/views/projects/artifacts/_artifact.html.haml @@ -50,10 +50,10 @@ .table-action-buttons .btn-group - if can?(current_user, :read_build, @project) - = link_to download_project_job_artifacts_path(@project, artifact.job), rel: 'nofollow', download: '', title: _('Download artifacts'), data: { placement: 'top', container: 'body' }, ref: 'tooltip', aria: { label: _('Download artifacts') }, class: 'btn btn-build has-tooltip ml-0' do + = link_to download_project_job_artifacts_path(@project, artifact.job), rel: 'nofollow', download: '', title: _('Download artifacts'), data: { placement: 'top', container: 'body' }, ref: 'tooltip', aria: { label: _('Download artifacts') }, class: 'gl-button btn btn-build has-tooltip ml-0' do = sprite_icon('download') - = link_to browse_project_job_artifacts_path(@project, artifact.job), rel: 'nofollow', title: _('Browse artifacts'), data: { placement: 'top', container: 'body' }, ref: 'tooltip', aria: { label: _('Browse artifacts') }, class: 'btn btn-build has-tooltip' do + = link_to browse_project_job_artifacts_path(@project, artifact.job), rel: 'nofollow', title: _('Browse artifacts'), data: { placement: 'top', container: 'body' }, ref: 'tooltip', aria: { label: _('Browse artifacts') }, class: 'gl-button btn btn-build has-tooltip' do = sprite_icon('folder-open') - if can?(current_user, :destroy_artifacts, @project) diff --git a/app/views/projects/artifacts/_tree_file.html.haml b/app/views/projects/artifacts/_tree_file.html.haml index f42d5128715..03d35c1c989 100644 --- a/app/views/projects/artifacts/_tree_file.html.haml +++ b/app/views/projects/artifacts/_tree_file.html.haml @@ -9,7 +9,7 @@ = link_to path_to_file, class: 'tree-item-file-external-link js-artifact-tree-tooltip str-truncated', target: '_blank', rel: 'noopener noreferrer', title: _('Opens in a new window') do %span>= blob.name - = icon('external-link', class: 'js-artifact-tree-external-icon') + = sprite_icon('external-link', css_class: 'js-artifact-tree-external-icon') - else = link_to path_to_file, class: 'str-truncated' do %span= blob.name diff --git a/app/views/projects/artifacts/browse.html.haml b/app/views/projects/artifacts/browse.html.haml index ff56cb53720..b363f0d4325 100644 --- a/app/views/projects/artifacts/browse.html.haml +++ b/app/views/projects/artifacts/browse.html.haml @@ -17,7 +17,7 @@ .tree-controls< = link_to download_project_job_artifacts_path(@project, @build), - rel: 'nofollow', download: '', class: 'btn btn-default download' do + rel: 'nofollow', download: '', class: 'gl-button btn btn-default download' do = sprite_icon('download') Download artifacts archive diff --git a/app/views/projects/blob/_breadcrumb.html.haml b/app/views/projects/blob/_breadcrumb.html.haml index 810c8b9082f..710417f90e3 100644 --- a/app/views/projects/blob/_breadcrumb.html.haml +++ b/app/views/projects/blob/_breadcrumb.html.haml @@ -23,13 +23,13 @@ - if blob.readable_text? - if blame = link_to 'Normal view', project_blob_path(@project, @id), - class: 'btn' + class: 'gl-button btn' - else = link_to 'Blame', project_blame_path(@project, @id), - class: 'btn js-blob-blame-link' unless blob.empty? + class: 'gl-button btn js-blob-blame-link' unless blob.empty? = link_to 'History', project_commits_path(@project, @id), - class: 'btn' + class: 'gl-button btn' = link_to 'Permalink', project_blob_path(@project, - tree_join(@commit.sha, @path)), class: 'btn js-data-file-blob-permalink-url' + tree_join(@commit.sha, @path)), class: 'gl-button btn js-data-file-blob-permalink-url' diff --git a/app/views/projects/blob/_header.html.haml b/app/views/projects/blob/_header.html.haml index 55ae9cded1c..6d01206a128 100644 --- a/app/views/projects/blob/_header.html.haml +++ b/app/views/projects/blob/_header.html.haml @@ -2,9 +2,9 @@ .js-file-title.file-title-flex-parent = render 'projects/blob/header_content', blob: blob - .file-actions< + .file-actions.gl-display-flex.gl-flex-fill-1.gl-align-self-start.gl-md-justify-content-end< = render 'projects/blob/viewer_switcher', blob: blob unless blame - - if Feature.enabled?(:consolidated_edit_button) + - if Feature.enabled?(:consolidated_edit_button, @project) = render 'shared/web_ide_button', blob: blob - else = edit_blob_button(@project, @ref, @path, blob: blob) diff --git a/app/views/projects/blob/_header_content.html.haml b/app/views/projects/blob/_header_content.html.haml index 30356348941..b310939c5a3 100644 --- a/app/views/projects/blob/_header_content.html.haml +++ b/app/views/projects/blob/_header_content.html.haml @@ -1,7 +1,7 @@ .file-header-content = blob_icon blob.mode, blob.name - %strong.file-title-name + %strong.file-title-name.gl-word-break-all{ data: { qa_selector: 'file_name_content' } } = blob.name = copy_file_path_button(blob.path) diff --git a/app/views/projects/blob/_pipeline_tour_success.html.haml b/app/views/projects/blob/_pipeline_tour_success.html.haml index 3ea2defb2b3..ef1fe25ba1b 100644 --- a/app/views/projects/blob/_pipeline_tour_success.html.haml +++ b/app/views/projects/blob/_pipeline_tour_success.html.haml @@ -1,4 +1,6 @@ .js-success-pipeline-modal{ data: { 'commit-cookie': suggest_pipeline_commit_cookie_name, 'go-to-pipelines-path': project_pipelines_path(@project), 'project-merge-requests-path': project_merge_requests_path(@project), + 'example-link': help_page_path('ci/examples/README.md', anchor: 'gitlab-cicd-examples'), + 'code-quality-link': help_page_path('user/project/merge_requests/code_quality'), 'human-access': @project.team.human_max_access(current_user&.id) } } diff --git a/app/views/projects/blob/_upload.html.haml b/app/views/projects/blob/_upload.html.haml index 4dbfa2b1e3c..f400c7de5eb 100644 --- a/app/views/projects/blob/_upload.html.haml +++ b/app/views/projects/blob/_upload.html.haml @@ -21,7 +21,7 @@ .form-actions = button_tag class: 'btn gl-button btn-success btn-upload-file', id: 'submit-all', type: 'button' do - = icon('spin spinner', class: 'js-loading-icon hidden' ) + .spinner.spinner-sm.gl-mr-2.js-loading-icon.hidden = button_title = link_to _("Cancel"), '#', class: "btn gl-button btn-cancel", "data-dismiss" => "modal" diff --git a/app/views/projects/blob/viewers/_gitlab_ci_yml.html.haml b/app/views/projects/blob/viewers/_gitlab_ci_yml.html.haml index 61d67a88a5a..3326cded42a 100644 --- a/app/views/projects/blob/viewers/_gitlab_ci_yml.html.haml +++ b/app/views/projects/blob/viewers/_gitlab_ci_yml.html.haml @@ -1,8 +1,8 @@ - if viewer.valid?(project: @project, sha: @commit.sha, user: @current_user) - = icon('check fw') + = sprite_icon('check') This GitLab CI configuration is valid. - else - = icon('warning fw') + = sprite_icon('warning-solid') This GitLab CI configuration is invalid: = viewer.validation_message(project: @project, sha: @commit.sha, user: @current_user) diff --git a/app/views/projects/blob/viewers/_metrics_dashboard_yml.html.haml b/app/views/projects/blob/viewers/_metrics_dashboard_yml.html.haml index de9c6c5320f..9c3f9b6c9fd 100644 --- a/app/views/projects/blob/viewers/_metrics_dashboard_yml.html.haml +++ b/app/views/projects/blob/viewers/_metrics_dashboard_yml.html.haml @@ -1,8 +1,8 @@ - if viewer.valid? - = icon('check fw') + = sprite_icon('check') = _('Metrics Dashboard YAML definition is valid.') - else - = icon('warning fw') + = sprite_icon('warning-solid') = _('Metrics Dashboard YAML definition is invalid:') %ul - viewer.errors.each do |error| diff --git a/app/views/projects/blob/viewers/_route_map.html.haml b/app/views/projects/blob/viewers/_route_map.html.haml index 024e9b4ddb2..068cf400cd5 100644 --- a/app/views/projects/blob/viewers/_route_map.html.haml +++ b/app/views/projects/blob/viewers/_route_map.html.haml @@ -1,8 +1,8 @@ - if viewer.valid? - = icon('check fw') + = sprite_icon('check') This Route Map is valid. - else - = icon('warning fw') + = sprite_icon('warning-solid') This Route Map is invalid: = viewer.validation_message diff --git a/app/views/projects/branches/_branch.html.haml b/app/views/projects/branches/_branch.html.haml index 30e710ead7f..8f5fac1a40b 100644 --- a/app/views/projects/branches/_branch.html.haml +++ b/app/views/projects/branches/_branch.html.haml @@ -36,12 +36,12 @@ %svg.s24 - if merge_project && create_mr_button?(@repository.root_ref, branch.name) - = link_to create_mr_path(@repository.root_ref, branch.name), class: 'btn btn-default' do + = link_to create_mr_path(@repository.root_ref, branch.name), class: 'gl-button btn btn-default' do = _('Merge request') - if branch.name != @repository.root_ref = link_to project_compare_index_path(@project, from: @repository.root_ref, to: branch.name), - class: "btn btn-default js-onboarding-compare-branches #{'gl-ml-3' unless merge_project}", + class: "gl-button btn btn-default js-onboarding-compare-branches #{'gl-ml-3' unless merge_project}", method: :post, title: s_('Branches|Compare') do = s_('Branches|Compare') diff --git a/app/views/projects/branches/_delete_protected_modal.html.haml b/app/views/projects/branches/_delete_protected_modal.html.haml index 8aa79d2d464..24beeeb0ae1 100644 --- a/app/views/projects/branches/_delete_protected_modal.html.haml +++ b/app/views/projects/branches/_delete_protected_modal.html.haml @@ -36,7 +36,7 @@ .modal-footer %button.btn{ data: { dismiss: 'modal' } } Cancel = link_to s_('Branches|Delete protected branch'), '', - class: "btn btn-danger js-delete-branch", + class: "gl-button btn btn-danger js-delete-branch", title: s_('Branches|Delete branch'), method: :delete, 'aria-label' => s_('Branches|Delete branch') diff --git a/app/views/projects/branches/index.html.haml b/app/views/projects/branches/index.html.haml index f3561ed5078..46cce59f67a 100644 --- a/app/views/projects/branches/index.html.haml +++ b/app/views/projects/branches/index.html.haml @@ -24,7 +24,7 @@ %button.dropdown-menu-toggle{ type: 'button', 'data-toggle' => 'dropdown' } %span.light = branches_sort_options_hash[@sort] - = icon('chevron-down') + = sprite_icon('chevron-down', css_class: "dropdown-menu-toggle-icon gl-top-3") %ul.dropdown-menu.dropdown-menu-right.dropdown-menu-selectable %li.dropdown-header = s_('Branches|Sort by') @@ -40,7 +40,7 @@ data: { confirm: s_('Branches|Deleting the merged branches cannot be undone. Are you sure?'), container: 'body' } do = s_('Branches|Delete merged branches') - = link_to new_project_branch_path(@project), class: 'btn btn-success' do + = link_to new_project_branch_path(@project), class: 'gl-button btn btn-success' do = s_('Branches|New branch') = render_if_exists 'projects/commits/mirror_status' diff --git a/app/views/projects/branches/new.html.haml b/app/views/projects/branches/new.html.haml index 7a8bc45a272..24dfb59dc85 100644 --- a/app/views/projects/branches/new.html.haml +++ b/app/views/projects/branches/new.html.haml @@ -22,10 +22,10 @@ = hidden_field_tag :ref, default_ref = button_tag type: 'button', title: default_ref, class: 'dropdown-menu-toggle wide js-branch-select monospace', required: true, data: { toggle: 'dropdown', selected: default_ref, field_name: 'ref' } do .text-left.dropdown-toggle-text= default_ref - = icon('chevron-down') + = sprite_icon('chevron-down', css_class: "dropdown-menu-toggle-icon gl-top-3") = render 'shared/ref_dropdown', dropdown_class: 'wide' .form-text.text-muted Existing branch name, tag, or commit SHA .form-actions - = button_tag 'Create branch', class: 'btn btn-success', tabindex: 3 - = link_to 'Cancel', project_branches_path(@project), class: 'btn btn-cancel' + = button_tag 'Create branch', class: 'gl-button btn btn-success' + = link_to 'Cancel', project_branches_path(@project), class: 'gl-button btn btn-cancel' %script#availableRefs{ type: "application/json" }= @project.repository.ref_names.to_json.html_safe diff --git a/app/views/projects/buttons/_clone.html.haml b/app/views/projects/buttons/_clone.html.haml index 7ce143a86b3..cf58cff7445 100644 --- a/app/views/projects/buttons/_clone.html.haml +++ b/app/views/projects/buttons/_clone.html.haml @@ -2,7 +2,7 @@ - dropdown_class = local_assigns.fetch(:dropdown_class, '') .git-clone-holder.js-git-clone-holder - %a#clone-dropdown.btn.btn-primary.clone-dropdown-btn.qa-clone-dropdown{ href: '#', data: { toggle: 'dropdown' } } + %a#clone-dropdown.gl-button.btn.btn-primary.clone-dropdown-btn.qa-clone-dropdown{ href: '#', data: { toggle: 'dropdown' } } %span.gl-mr-2.js-clone-dropdown-label = _('Clone') = sprite_icon("chevron-down", css_class: "icon") diff --git a/app/views/projects/buttons/_download.html.haml b/app/views/projects/buttons/_download.html.haml index c04687bd846..0fcbf2ca1eb 100644 --- a/app/views/projects/buttons/_download.html.haml +++ b/app/views/projects/buttons/_download.html.haml @@ -3,7 +3,7 @@ - if !project.empty_repo? && can?(current_user, :download_code, project) - archive_prefix = "#{project.path}-#{ref.tr('/', '-')}" .project-action-button.dropdown.inline> - %button.btn.has-tooltip{ title: s_('DownloadSource|Download'), 'data-toggle' => 'dropdown', 'aria-label' => s_('DownloadSource|Download'), 'data-display' => 'static', data: { qa_selector: 'download_source_code_button' } } + %button.gl-button.btn.has-tooltip{ title: s_('DownloadSource|Download'), 'data-toggle' => 'dropdown', 'aria-label' => s_('DownloadSource|Download'), 'data-display' => 'static', data: { qa_selector: 'download_source_code_button' } } = sprite_icon('download') %span.sr-only= _('Select Archive Format') = sprite_icon("chevron-down") diff --git a/app/views/projects/buttons/_download_links.html.haml b/app/views/projects/buttons/_download_links.html.haml index 990f3ff526b..c997df578c0 100644 --- a/app/views/projects/buttons/_download_links.html.haml +++ b/app/views/projects/buttons/_download_links.html.haml @@ -1,4 +1,4 @@ .btn-group.ml-0.w-100 - Gitlab::Workhorse::ARCHIVE_FORMATS.each_with_index do |fmt, index| - archive_path = project_archive_path(project, id: tree_join(ref, archive_prefix), path: path, format: fmt) - = link_to fmt, external_storage_url_or_path(archive_path), rel: 'nofollow', download: '', class: "btn btn-xs #{"btn-primary" if index == 0}" + = link_to fmt, external_storage_url_or_path(archive_path), rel: 'nofollow', download: '', class: "gl-button btn btn-xs #{"btn-primary" if index == 0}" diff --git a/app/views/projects/buttons/_xcode_link.html.haml b/app/views/projects/buttons/_xcode_link.html.haml index a8b32fb0ef5..e0f47f1ca3d 100644 --- a/app/views/projects/buttons/_xcode_link.html.haml +++ b/app/views/projects/buttons/_xcode_link.html.haml @@ -1,2 +1,2 @@ -%a.btn.btn-default{ href: xcode_uri_to_repo(@project) } +%a.gl-button.btn.btn-default{ href: xcode_uri_to_repo(@project) } = _("Open in Xcode") diff --git a/app/views/projects/ci/lints/_create.html.haml b/app/views/projects/ci/lints/_create.html.haml deleted file mode 100644 index 4b7cda0ef57..00000000000 --- a/app/views/projects/ci/lints/_create.html.haml +++ /dev/null @@ -1,51 +0,0 @@ -- if @result.valid? - .bs-callout.bs-callout-success - %p - %b= _("Status:") - = _("syntax is correct") - - = render "projects/ci/lints/lint_warnings", warnings: @result.warnings - - .table-holder - %table.table.table-bordered - %thead - %tr - %th= _("Parameter") - %th= _("Value") - %tbody - - @result.jobs.each do |job| - %tr - %td #{job[:stage].capitalize} Job - #{job[:name]} - %td - %pre= job[:before_script].to_a.join('\n') - %pre= job[:script].to_a.join('\n') - %pre= job[:after_script].to_a.join('\n') - %br - %b= _("Tag list:") - = job[:tag_list].to_a.join(", ") - - unless @dry_run - %br - %b= _("Only policy:") - = job[:only].to_a.join(", ") - %br - %b= _("Except policy:") - = job[:except].to_a.join(", ") - %br - %b= _("Environment:") - = job[:environment] - %br - %b= _("When:") - = job[:when] - - if job[:allow_failure] - %b= _("Allowed to fail") - -- else - .bs-callout.bs-callout-danger - %p - %b= _("Status:") - = _("syntax is incorrect") - %pre - - @result.errors.each do |message| - %p= message - - = render "projects/ci/lints/lint_warnings", warnings: @result.warnings diff --git a/app/views/projects/ci/lints/_lint_warnings.html.haml b/app/views/projects/ci/lints/_lint_warnings.html.haml deleted file mode 100644 index 90db65e6c27..00000000000 --- a/app/views/projects/ci/lints/_lint_warnings.html.haml +++ /dev/null @@ -1,10 +0,0 @@ -- if warnings - - total_warnings = warnings.length - - message = warning_header(total_warnings) - - - if warnings.any? - .bs-callout.bs-callout-warning - %details - %summary.gl-mb-2= message - - warnings.each do |warning| - = markdown(warning) diff --git a/app/views/projects/ci/lints/show.html.haml b/app/views/projects/ci/lints/show.html.haml index 64f250bd607..feccea6cfc0 100644 --- a/app/views/projects/ci/lints/show.html.haml +++ b/app/views/projects/ci/lints/show.html.haml @@ -3,32 +3,4 @@ %h2.pt-3.pb-3= _("Validate your GitLab CI configuration") -- if Feature.enabled?(:ci_lint_vue, @project) - #js-ci-lint{ data: { endpoint: project_ci_lint_path(@project), help_page_path: help_page_path('ci/lint', anchor: 'pipeline-simulation') } } - -- else - .project-ci-linter - = form_tag project_ci_lint_path(@project), method: :post, class: 'js-ci-lint-form' do - .row - .col-sm-12 - .file-holder - .js-file-title.file-title.clearfix - = _("Contents of .gitlab-ci.yml") - .file-editor.code - .js-edit-mode-pane.qa-editor#editor{ data: { 'editor-loading': true } }< - %pre.editor-loading-content= params[:content] - = text_area_tag(:content, @content, class: 'hidden form-control span1', rows: 7, require: true) - .col-sm-12 - .float-left.gl-mt-3 - = submit_tag(_('Validate'), class: 'btn btn-success submit-yml') - - if Gitlab::Ci::Features.lint_creates_pipeline_with_dry_run?(@project) - = check_box_tag(:dry_run, 'true', params[:dry_run]) - = label_tag(:dry_run, _('Simulate a pipeline created for the default branch')) - = link_to sprite_icon('question-o'), help_page_path('ci/lint', anchor: 'pipeline-simulation'), target: '_blank', rel: 'noopener noreferrer' - .float-right.prepend-top-10 - = button_tag(_('Clear'), type: 'button', class: 'btn btn-default clear-yml') - - .row.prepend-top-20 - .col-sm-12 - .results.project-ci-template - = render partial: 'create' if defined?(@result) +#js-ci-lint{ data: { endpoint: project_ci_lint_path(@project), pipeline_simulation_help_page_path: help_page_path('ci/lint', anchor: 'pipeline-simulation') , lint_help_page_path: help_page_path('ci/lint', anchor: 'validate-basic-logic-and-syntax') } } diff --git a/app/views/projects/ci/pipeline_editor/show.html.haml b/app/views/projects/ci/pipeline_editor/show.html.haml new file mode 100644 index 00000000000..0e032f2575e --- /dev/null +++ b/app/views/projects/ci/pipeline_editor/show.html.haml @@ -0,0 +1,6 @@ +- page_title s_('Pipelines|Pipeline Editor') + +#js-pipeline-editor{ data: { "ci-config-path": @project.ci_config_path_or_default, + "project-path" => @project.full_path, + "default-branch" => @project.default_branch, +} } diff --git a/app/views/projects/cleanup/_show.html.haml b/app/views/projects/cleanup/_show.html.haml index 02d35e690ca..37ec63cc871 100644 --- a/app/views/projects/cleanup/_show.html.haml +++ b/app/views/projects/cleanup/_show.html.haml @@ -26,4 +26,4 @@ .form-text.text-muted = _("The maximum file size allowed is %{size}.") % { size: number_to_human_size(Gitlab::CurrentSettings.max_attachment_size.megabytes) } - = f.submit _('Start cleanup'), class: 'btn btn-success' + = f.submit _('Start cleanup'), class: 'gl-button btn btn-success' diff --git a/app/views/projects/commit/_change.html.haml b/app/views/projects/commit/_change.html.haml index 4f5d69c614c..11adc7fd64a 100644 --- a/app/views/projects/commit/_change.html.haml +++ b/app/views/projects/commit/_change.html.haml @@ -33,7 +33,7 @@ - else = hidden_field_tag 'create_merge_request', 1, id: nil .form-actions - = submit_tag label, class: 'btn btn-success' - = link_to _("Cancel"), '#', class: "btn btn-cancel", "data-dismiss" => "modal" + = submit_tag label, class: 'gl-button btn btn-success' + = link_to _("Cancel"), '#', class: "gl-button btn btn-cancel", "data-dismiss" => "modal" = render 'shared/projects/edit_information' diff --git a/app/views/projects/commit/diff_files.html.haml b/app/views/projects/commit/diff_files.html.haml index 3a473be3840..0c52c1a15a4 100644 --- a/app/views/projects/commit/diff_files.html.haml +++ b/app/views/projects/commit/diff_files.html.haml @@ -1,3 +1 @@ -- diff_files = diffs.diff_files - -= render partial: 'projects/diffs/file', collection: diff_files, as: :diff_file, locals: { project: diffs.project, environment: environment, diff_page_context: 'is-commit' } += render partial: 'projects/diffs/file', collection: diffs.diff_files, as: :diff_file, locals: { project: diffs.project, environment: environment, diff_page_context: 'is-commit' } diff --git a/app/views/projects/commits/_commit.html.haml b/app/views/projects/commits/_commit.html.haml index cd61576a96a..179b0c5efbd 100644 --- a/app/views/projects/commits/_commit.html.haml +++ b/app/views/projects/commits/_commit.html.haml @@ -23,7 +23,7 @@ = author_avatar(commit, size: 40, has_tooltip: false) .commit-detail.flex-list - .commit-content.qa-commit-content + .commit-content{ data: { qa_selector: 'commit_content' } } - if view_details && merge_request = link_to commit.title, project_commit_path(project, commit.id, merge_request_iid: merge_request.iid), class: ["commit-row-message item-title js-onboarding-commit-item", ("font-italic" if commit.message.empty?)] - else @@ -57,8 +57,8 @@ .js-commit-pipeline-status{ data: { endpoint: pipelines_project_commit_path(project, commit.id, ref: ref) } } - .commit-sha-group.d-none.d-sm-flex + .commit-sha-group.btn-group.d-none.d-sm-flex .label.label-monospace.monospace = commit.short_id - = clipboard_button(text: commit.id, title: _("Copy commit SHA"), class: "btn btn-default", container: "body") + = clipboard_button(text: commit.id, title: _("Copy commit SHA"), class: "gl-button btn btn-default", container: "body") = link_to_browse_code(project, commit) diff --git a/app/views/projects/commits/show.html.haml b/app/views/projects/commits/show.html.haml index 40dd3a685d4..94bdab53cd0 100644 --- a/app/views/projects/commits/show.html.haml +++ b/app/views/projects/commits/show.html.haml @@ -34,4 +34,5 @@ %div{ id: dom_id(@project) } %ol#commits-list.list-unstyled.content_list = render 'commits', project: @project, ref: @ref - = spinner + .loading.hide + = loading_icon(size: "lg") diff --git a/app/views/projects/confluences/show.html.haml b/app/views/projects/confluences/show.html.haml index 5814b7a00f5..1eeafac5f1e 100644 --- a/app/views/projects/confluences/show.html.haml +++ b/app/views/projects/confluences/show.html.haml @@ -8,7 +8,7 @@ - wiki_confluence_epic_link_url = 'https://gitlab.com/groups/gitlab-org/-/epics/3629' - wiki_confluence_epic_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: wiki_confluence_epic_link_url } = s_("WikiEmpty|You've enabled the Confluence Workspace integration. Your wiki will be viewable directly within Confluence. We are hard at work integrating Confluence more seamlessly into GitLab. If you'd like to stay up to date, follow our %{wiki_confluence_epic_link_start}Confluence epic%{wiki_confluence_epic_link_end}.").html_safe % { wiki_confluence_epic_link_start: wiki_confluence_epic_link_start, wiki_confluence_epic_link_end: '</a>'.html_safe } - = link_to @project.confluence_service.confluence_url, target: '_blank', rel: 'noopener noreferrer', class: 'btn btn-success external-url', title: s_('WikiEmpty|Go to Confluence') do + = link_to @project.confluence_service.confluence_url, target: '_blank', rel: 'noopener noreferrer', class: 'gl-button btn btn-success external-url', title: s_('WikiEmpty|Go to Confluence') do = sprite_icon('external-link') = s_('WikiEmpty|Go to Confluence') diff --git a/app/views/projects/cycle_analytics/show.html.haml b/app/views/projects/cycle_analytics/show.html.haml index d99579c25c0..b98ab9757fa 100644 --- a/app/views/projects/cycle_analytics/show.html.haml +++ b/app/views/projects/cycle_analytics/show.html.haml @@ -22,7 +22,7 @@ .dropdown.inline.js-ca-dropdown %button.dropdown-menu-toggle{ "data-toggle" => "dropdown", :type => "button" } %span.dropdown-label {{ n__('Last %d day', 'Last %d days', 30) }} - %i.fa.fa-chevron-down + = sprite_icon("chevron-down", css_class: "dropdown-menu-toggle-icon gl-top-3") %ul.dropdown-menu.dropdown-menu-right %li %a{ "href" => "#", "data-value" => "7" } diff --git a/app/views/projects/default_branch/_show.html.haml b/app/views/projects/default_branch/_show.html.haml index 2ba12601c79..a1c7f5027c5 100644 --- a/app/views/projects/default_branch/_show.html.haml +++ b/app/views/projects/default_branch/_show.html.haml @@ -28,4 +28,4 @@ = _("Issues referenced by merge requests and commits within the default branch will be closed automatically") = link_to sprite_icon('question-o'), help_page_path('user/project/issues/managing_issues.md', anchor: 'disabling-automatic-issue-closing'), target: '_blank' - = f.submit _('Save changes'), class: "btn btn-success" + = f.submit _('Save changes'), class: "gl-button btn btn-success" diff --git a/app/views/projects/deploy_keys/edit.html.haml b/app/views/projects/deploy_keys/edit.html.haml index 805d4983002..780ec128d63 100644 --- a/app/views/projects/deploy_keys/edit.html.haml +++ b/app/views/projects/deploy_keys/edit.html.haml @@ -7,4 +7,4 @@ = render partial: 'shared/deploy_keys/form', locals: { form: f, deploy_key: @deploy_key } .form-actions = f.submit 'Save changes', class: 'btn-success btn' - = link_to 'Cancel', project_settings_repository_path(@project), class: 'btn btn-cancel' + = link_to 'Cancel', project_settings_repository_path(@project), class: 'gl-button btn btn-cancel' diff --git a/app/views/projects/diffs/_diffs.html.haml b/app/views/projects/diffs/_diffs.html.haml index 43aaa7cb405..8364311796f 100644 --- a/app/views/projects/diffs/_diffs.html.haml +++ b/app/views/projects/diffs/_diffs.html.haml @@ -9,7 +9,7 @@ .files-changed-inner .inline-parallel-buttons.d-none.d-md-block - if !diffs_expanded? && diff_files.any? { |diff_file| diff_file.collapsed? } - = link_to _('Expand all'), url_for(safe_params.merge(expanded: 1, format: nil)), class: 'btn btn-default' + = link_to _('Expand all'), url_for(safe_params.merge(expanded: 1, format: nil)), class: 'gl-button btn btn-default' - if show_whitespace_toggle - if current_controller?(:commit) = commit_diff_whitespace_link(diffs.project, @commit, class: 'd-none d-sm-inline-block') diff --git a/app/views/projects/diffs/_file.html.haml b/app/views/projects/diffs/_file.html.haml index 187ebcb739c..18da238d445 100644 --- a/app/views/projects/diffs/_file.html.haml +++ b/app/views/projects/diffs/_file.html.haml @@ -14,16 +14,15 @@ = submodule_diff_compare_link(diff_file) - unless diff_file.submodule? - - blob = diff_file.blob .file-actions.d-none.d-sm-block - - if blob&.readable_text? - = link_to '#', class: 'js-toggle-diff-comments btn active has-tooltip', title: _("Toggle comments for this file"), disabled: @diff_notes_disabled do + - if diff_file.blob&.readable_text? + = link_to '#', class: 'js-toggle-diff-comments gl-button btn active has-tooltip', title: _("Toggle comments for this file"), disabled: @diff_notes_disabled do = sprite_icon('comment') \ - if editable_diff?(diff_file) - link_opts = @merge_request.persisted? ? { from_merge_request_iid: @merge_request.iid } : {} = edit_blob_button(@merge_request.source_project, @merge_request.source_branch, diff_file.new_path, - blob: blob, link_opts: link_opts) + blob: diff_file.blob, link_opts: link_opts) - if image_diff && image_replaced = view_file_button(diff_file.old_content_sha, diff_file.old_path, project, replaced: true) diff --git a/app/views/projects/diffs/_file_header.html.haml b/app/views/projects/diffs/_file_header.html.haml index e9dfda4e927..cb43527def1 100644 --- a/app/views/projects/diffs/_file_header.html.haml +++ b/app/views/projects/diffs/_file_header.html.haml @@ -1,30 +1,27 @@ -- show_toggle = local_assigns.fetch(:show_toggle, true) - -- if show_toggle +- if local_assigns.fetch(:show_toggle, true) %i.fa.diff-toggle-caret.fa-fw - if diff_file.submodule? - - blob = diff_file.blob %span = sprite_icon('archive') %strong.file-title-name - = submodule_link(blob, diff_file.content_sha, diff_file.repository) + = submodule_link(diff_file.blob, diff_file.content_sha, diff_file.repository) - = copy_file_path_button(blob.path) + = copy_file_path_button(diff_file.blob.path) - else = conditional_link_to url.present?, url do = blob_icon diff_file.b_mode, diff_file.file_path - if diff_file.renamed_file? - old_path, new_path = mark_inline_diffs(diff_file.old_path, diff_file.new_path) - %strong.file-title-name.has-tooltip{ data: { title: diff_file.old_path, container: 'body' } } + %strong.file-title-name.has-tooltip.gl-word-break-all{ data: { title: diff_file.old_path, container: 'body' } } = old_path → - %strong.file-title-name.has-tooltip{ data: { title: diff_file.new_path, container: 'body' } } + %strong.file-title-name.has-tooltip.gl-word-break-all{ data: { title: diff_file.new_path, container: 'body' } } = new_path - else - %strong.file-title-name.has-tooltip{ data: { title: diff_file.file_path, container: 'body' } } + %strong.file-title-name.has-tooltip.gl-word-break-all{ data: { title: diff_file.file_path, container: 'body' } } = diff_file.file_path - if diff_file.deleted_file? @@ -33,7 +30,7 @@ = copy_file_path_button(diff_file.file_path) - if diff_file.mode_changed? - %small + %small.gl-mr-2 #{diff_file.a_mode} → #{diff_file.b_mode} - if diff_file.stored_externally? && diff_file.external_storage == :lfs diff --git a/app/views/projects/diffs/_line.html.haml b/app/views/projects/diffs/_line.html.haml index 4d40071e07c..de7f9eba158 100644 --- a/app/views/projects/diffs/_line.html.haml +++ b/app/views/projects/diffs/_line.html.haml @@ -1,12 +1,11 @@ -- email = local_assigns.fetch(:email, false) - plain = local_assigns.fetch(:plain, false) - discussions = local_assigns.fetch(:discussions, nil) -- type = line.type - line_code = diff_file.line_code(line) - if discussions && line.discussable? - line_discussions = discussions[line_code] -%tr.line_holder{ class: type, id: (line_code unless plain) } - - case type + +%tr.line_holder{ class: line.type, id: (line_code unless plain) } + - case line.type - when 'match' = diff_match_line line.old_pos, line.new_pos, text: line.text - when 'old-nonewline', 'new-nonewline' @@ -14,21 +13,21 @@ %td.new_line.diff-line-num %td.line_content.match= line.text - else - %td.old_line.diff-line-num{ class: [type, ("js-avatar-container" if !plain)], data: { linenumber: line.old_pos } } - - link_text = type == "new" ? " " : line.old_pos + %td.old_line.diff-line-num{ class: [line.type, ("js-avatar-container" if !plain)], data: { linenumber: line.old_pos } } - if plain - = link_text + = diff_link_number(line.type, "new", line.old_pos) - else - = add_diff_note_button(line_code, diff_file.position(line), type) - %a{ href: "##{line_code}", data: { linenumber: link_text } } - %td.new_line.diff-line-num{ class: type, data: { linenumber: line.new_pos } } - - link_text = type == "old" ? " " : line.new_pos + = add_diff_note_button(line_code, diff_file.position(line), line.type) + %a{ href: "##{line_code}", data: { linenumber: diff_link_number(line.type, "new", line.old_pos) } } + + %td.new_line.diff-line-num{ class: line.type, data: { linenumber: line.new_pos } } - if plain - = link_text + = diff_link_number(line.type, "old", line.new_pos) - else - %a{ href: "##{line_code}", data: { linenumber: link_text } } - %td.line_content{ class: type }< - - if email + %a{ href: "##{line_code}", data: { linenumber: diff_link_number(line.type, "old", line.new_pos) } } + + %td.line_content{ class: line.type }< + - if local_assigns.fetch(:email, false) %pre= line.rich_text - else = diff_line_content(line.rich_text) diff --git a/app/views/projects/diffs/_stats.html.haml b/app/views/projects/diffs/_stats.html.haml index cee479aab0a..6429cf31bc3 100644 --- a/app/views/projects/diffs/_stats.html.haml +++ b/app/views/projects/diffs/_stats.html.haml @@ -10,7 +10,7 @@ %strong.cgreen= pluralize(sum_added_lines, 'addition') and %strong.cred= pluralize(sum_removed_lines, 'deletion') - .diff-stats-additions-deletions-collapsed.float-right.d-none.d-sm-none{ "aria-hidden": "true", "aria-describedby": "diff-stats" } + .diff-stats-additions-deletions-collapsed.float-right.d-none{ "aria-hidden": "true", "aria-describedby": "diff-stats" } %strong.cgreen< +#{sum_added_lines} %strong.cred< diff --git a/app/views/projects/edit.html.haml b/app/views/projects/edit.html.haml index 63d571e718e..10dd80501e0 100644 --- a/app/views/projects/edit.html.haml +++ b/app/views/projects/edit.html.haml @@ -93,31 +93,9 @@ %li= _('Your deployment services will be broken, you will need to manually fix the services after renaming.') = f.submit _('Change path'), class: "btn btn-warning qa-change-path-button" - - if can?(current_user, :change_namespace, @project) - .sub-section - %h4.danger-title= _('Transfer project') - = form_for @project, url: transfer_project_path(@project), method: :put, remote: true, html: { class: 'js-project-transfer-form' } do |f| - .form-group - = label_tag :new_namespace_id, nil, class: 'label-bold' do - %span= _('Select a new namespace') - .form-group - = select_tag :new_namespace_id, namespaces_options(nil), include_blank: true, class: 'select2' - %ul - %li= _("Be careful. Changing the project's namespace can have unintended side effects.") - %li= _('You can only transfer the project to namespaces you manage.') - %li= _('You will need to update your local repositories to point to the new location.') - %li= _('Project visibility level will be changed to match namespace rules when transferring to a group.') - = f.submit 'Transfer project', class: "gl-button btn btn-danger js-confirm-danger qa-transfer-button", data: { "confirm-danger-message" => transfer_project_message(@project) } - - - if @project.forked? && can?(current_user, :remove_fork_project, @project) - .sub-section - %h4.danger-title= _('Remove fork relationship') - %p= remove_fork_project_description_message(@project) - - = form_for @project, url: remove_fork_project_path(@project), method: :delete, remote: true, html: { class: 'transfer-project' } do |f| - %p - %strong= _('Once removed, the fork relationship cannot be restored and you will no longer be able to send merge requests to the source.') - = button_to _('Remove fork relationship'), '#', class: "gl-button btn btn-danger js-confirm-danger", data: { "confirm-danger-message" => remove_fork_project_warning_message(@project) } + = render 'transfer', project: @project + + = render 'remove_fork', project: @project = render 'remove', project: @project diff --git a/app/views/projects/environments/_external_url.html.haml b/app/views/projects/environments/_external_url.html.haml index 82567f88ccc..b9208969fb3 100644 --- a/app/views/projects/environments/_external_url.html.haml +++ b/app/views/projects/environments/_external_url.html.haml @@ -1,4 +1,4 @@ - if environment.external_url && can?(current_user, :read_environment, environment) - = link_to environment.external_url, target: '_blank', rel: 'noopener noreferrer', class: 'btn external-url has-tooltip qa-view-deployment', title: s_('Environments|Open live environment') do + = link_to environment.external_url, target: '_blank', rel: 'noopener noreferrer', class: 'gl-button btn external-url has-tooltip qa-view-deployment', title: s_('Environments|Open live environment') do = sprite_icon('external-link') = _("View deployment") diff --git a/app/views/projects/environments/_form.html.haml b/app/views/projects/environments/_form.html.haml index 0b8f9fe220d..10890bf1921 100644 --- a/app/views/projects/environments/_form.html.haml +++ b/app/views/projects/environments/_form.html.haml @@ -17,5 +17,5 @@ = f.url_field :external_url, class: 'form-control' .form-actions - = f.submit _('Save'), class: 'btn btn-success' - = link_to _('Cancel'), project_environments_path(@project), class: 'btn btn-cancel' + = f.submit _('Save'), class: 'gl-button btn btn-success' + = link_to _('Cancel'), project_environments_path(@project), class: 'gl-button btn btn-cancel' diff --git a/app/views/projects/environments/_metrics_button.html.haml b/app/views/projects/environments/_metrics_button.html.haml index c4f19ea79e7..5a691676a68 100644 --- a/app/views/projects/environments/_metrics_button.html.haml +++ b/app/views/projects/environments/_metrics_button.html.haml @@ -2,6 +2,6 @@ - return unless can?(current_user, :read_environment, environment) -= link_to environment_metrics_path(environment), title: _('See metrics'), class: 'btn metrics-button' do += link_to environment_metrics_path(environment), title: _('See metrics'), class: 'gl-button btn metrics-button' do = sprite_icon('chart') = _("Monitoring") diff --git a/app/views/projects/environments/_pin_button.html.haml b/app/views/projects/environments/_pin_button.html.haml index 5c7bfc2b17b..ec3e7e20365 100644 --- a/app/views/projects/environments/_pin_button.html.haml +++ b/app/views/projects/environments/_pin_button.html.haml @@ -1,3 +1,3 @@ - if environment.auto_stop_at? && environment.available? - = button_to cancel_auto_stop_project_environment_path(environment.project, environment), class: 'btn btn-secondary has-tooltip', title: _('Prevent environment from auto-stopping') do + = button_to cancel_auto_stop_project_environment_path(environment.project, environment), class: 'gl-button btn btn-secondary has-tooltip', title: _('Prevent environment from auto-stopping') do = sprite_icon('thumbtack') diff --git a/app/views/projects/environments/_terminal_button.html.haml b/app/views/projects/environments/_terminal_button.html.haml index 38bc087664b..ab3363bbb07 100644 --- a/app/views/projects/environments/_terminal_button.html.haml +++ b/app/views/projects/environments/_terminal_button.html.haml @@ -1,3 +1,3 @@ - if environment.has_terminals? && can?(current_user, :admin_environment, @project) - = link_to terminal_project_environment_path(@project, environment), class: 'btn terminal-button' do + = link_to terminal_project_environment_path(@project, environment), class: 'gl-button btn terminal-button' do = sprite_icon('terminal') diff --git a/app/views/projects/environments/empty_metrics.html.haml b/app/views/projects/environments/empty_metrics.html.haml index 5642fb34da9..3ee51a318c6 100644 --- a/app/views/projects/environments/empty_metrics.html.haml +++ b/app/views/projects/environments/empty_metrics.html.haml @@ -11,4 +11,4 @@ %p.state-description = s_('Metrics|Check out the CI/CD documentation on deploying to an environment') .text-center - = link_to s_("Environments|Learn about environments"), help_page_path('ci/environments/index.md'), class: 'btn btn-success' + = link_to s_("Environments|Learn about environments"), help_page_path('ci/environments/index.md'), class: 'gl-button btn btn-success' diff --git a/app/views/projects/environments/show.html.haml b/app/views/projects/environments/show.html.haml index 5b1556c9f52..0cb44bd03fb 100644 --- a/app/views/projects/environments/show.html.haml +++ b/app/views/projects/environments/show.html.haml @@ -3,6 +3,7 @@ - page_title _("Environments") - add_page_specific_style 'page_bundles/xterm' - add_page_specific_style 'page_bundles/environments' +- add_page_specific_style 'page_bundles/ci_status' #environments-detail-view{ data: { name: @environment.name, id: @environment.id, delete_path: environment_delete_path(@environment)} } - if @environment.available? && can?(current_user, :stop_environment, @environment) @@ -27,8 +28,8 @@ rel: 'noopener noreferrer' } = s_('Environments|Learn more about stopping environments') .modal-footer - = button_tag _('Cancel'), type: 'button', class: 'btn btn-cancel', data: { dismiss: 'modal' } - = button_to stop_project_environment_path(@project, @environment), class: 'btn btn-danger has-tooltip', method: :post do + = button_tag _('Cancel'), type: 'button', class: 'gl-button btn btn-cancel', data: { dismiss: 'modal' } + = button_to stop_project_environment_path(@project, @environment), class: 'gl-button btn btn-danger has-tooltip', method: :post do = s_('Environments|Stop environment') - if can_destroy_environment?(@environment) @@ -48,12 +49,12 @@ - if can?(current_user, :update_environment, @environment) = link_to _('Edit'), edit_project_environment_path(@project, @environment), class: 'btn' - if @environment.available? && can?(current_user, :stop_environment, @environment) - = button_tag class: 'btn btn-danger', type: 'button', data: { toggle: 'modal', + = button_tag class: 'gl-button btn btn-danger', type: 'button', data: { toggle: 'modal', target: '#stop-environment-modal' } do = sprite_icon('stop') = s_('Environments|Stop') - if can_destroy_environment?(@environment) - = button_tag class: 'btn btn-danger', type: 'button', data: { toggle: 'modal', + = button_tag class: 'gl-button btn btn-danger', type: 'button', data: { toggle: 'modal', target: '#delete-environment-modal' } do = s_('Environments|Delete') @@ -66,7 +67,7 @@ %p.blank-state-text = html_escape(_("Define environments in the deploy stage(s) in %{code_open}.gitlab-ci.yml%{code_close} to track deployments here.")) % { code_open: '<code>'.html_safe, code_close: '</code>'.html_safe } .text-center - = link_to _("Read more"), help_page_path("ci/environments/index.md"), class: "btn btn-success" + = link_to _("Read more"), help_page_path("ci/environments/index.md"), class: "gl-button btn btn-success" - else .table-holder.gl-overflow-visible .ci-table.environments{ role: 'grid' } diff --git a/app/views/projects/environments/terminal.html.haml b/app/views/projects/environments/terminal.html.haml index ed0bc0680d7..ee31985eaf0 100644 --- a/app/views/projects/environments/terminal.html.haml +++ b/app/views/projects/environments/terminal.html.haml @@ -13,7 +13,7 @@ .col-sm-6 .nav-controls - if @environment.external_url.present? - = link_to @environment.external_url, class: 'btn btn-default', target: '_blank', rel: 'noopener noreferrer nofollow' do + = link_to @environment.external_url, class: 'gl-button btn btn-default', target: '_blank', rel: 'noopener noreferrer nofollow' do = sprite_icon('external-link') = render 'projects/deployments/actions', deployment: @environment.last_deployment 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 e341831e17d..2627552058b 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 @@ -19,7 +19,7 @@ - if ref - if generic_commit_status.ref .icon-container - = generic_commit_status.tags.any? ? icon('tag') : sprite_icon('fork', size: 10) + = generic_commit_status.tags.any? ? sprite_icon('tag', size: 10) : sprite_icon('fork', size: 10) = link_to generic_commit_status.ref, project_commits_path(generic_commit_status.project, generic_commit_status.ref) - else .light none @@ -30,7 +30,8 @@ = link_to generic_commit_status.short_sha, project_commit_path(generic_commit_status.project, generic_commit_status.sha), class: "commit-sha" - if retried - = icon('warning', class: 'text-warning has-tooltip', title: 'Status was retried.') + %span.has-tooltip{ title: _('Status was retried.') } + = sprite_icon('warning-solid', css_class: 'text-warning') .label-container - if generic_commit_status.tags.any? diff --git a/app/views/projects/hooks/index.html.haml b/app/views/projects/hooks/index.html.haml index e40c36da29d..03ea623f4c6 100644 --- a/app/views/projects/hooks/index.html.haml +++ b/app/views/projects/hooks/index.html.haml @@ -9,6 +9,6 @@ .col-lg-8.gl-mb-3 = form_for @hook, as: :hook, url: polymorphic_path([@project, :hooks]) do |f| = render partial: 'shared/web_hooks/form', locals: { form: f, hook: @hook } - = f.submit 'Add webhook', class: 'btn btn-success' + = f.submit 'Add webhook', class: 'gl-button btn btn-success' = render 'shared/web_hooks/index', hooks: @hooks, hook_class: @hook.class diff --git a/app/views/projects/imports/new.html.haml b/app/views/projects/imports/new.html.haml index 58981ca1556..3064b8bf873 100644 --- a/app/views/projects/imports/new.html.haml +++ b/app/views/projects/imports/new.html.haml @@ -16,4 +16,4 @@ = render "shared/import_form", f: f .form-actions - = f.submit 'Start import', class: "btn btn-success", tabindex: 4 + = f.submit 'Start import', class: "gl-button btn btn-success" diff --git a/app/views/projects/incidents/show.html.haml b/app/views/projects/incidents/show.html.haml index b0ddc85df5d..4d4607e8e36 100644 --- a/app/views/projects/incidents/show.html.haml +++ b/app/views/projects/incidents/show.html.haml @@ -1 +1,6 @@ -= render template: 'projects/issues/show' +- @content_class = "limit-container-width" unless fluid_layout +- add_to_breadcrumbs _("Incidents"), project_incidents_path(@project) +- breadcrumb_title @issue.to_reference +- page_title "#{@issue.title} (#{@issue.to_reference})", _("Incidents") + += render 'projects/issuable/show', issuable: @issue diff --git a/app/views/projects/issuable/_show.html.haml b/app/views/projects/issuable/_show.html.haml new file mode 100644 index 00000000000..48920c4e342 --- /dev/null +++ b/app/views/projects/issuable/_show.html.haml @@ -0,0 +1,10 @@ +- page_description issuable.description_html +- page_card_attributes issuable.card_attributes +- if issuable.relocation_target + - page_canonical_link issuable.relocation_target.present(current_user: current_user).web_url + += render_if_exists "projects/issues/alert_blocked", issue: issuable, current_user: current_user += render "projects/issues/alert_moved_from_service_desk", issue: issuable + += render 'shared/issue_type/details_header', issuable: issuable += render 'shared/issue_type/details_content', issuable: issuable diff --git a/app/views/projects/issues/_design_management.html.haml b/app/views/projects/issues/_design_management.html.haml index 6fc2f41b122..ad0605b10a8 100644 --- a/app/views/projects/issues/_design_management.html.haml +++ b/app/views/projects/issues/_design_management.html.haml @@ -6,6 +6,8 @@ - enable_lfs_message = s_("DesignManagement|To upload designs, you'll need to enable LFS and have admin enable hashed storage. %{requirements_link_start}More information%{requirements_link_end}").html_safe % { requirements_link_start: requirements_link_start, requirements_link_end: link_end } - if @project.design_management_enabled? + - add_page_startup_graphql_call('design_management/get_design_list', { fullPath: @project.full_path, iid: @issue.iid.to_s, atVersion: nil }) + - add_page_startup_graphql_call('design_management/design_permissions', { fullPath: @project.full_path, iid: @issue.iid.to_s }) .js-design-management{ data: { project_path: @project.full_path, issue_iid: @issue.iid, issue_path: project_issue_path(@project, @issue) } } - else .gl-border-solid.gl-border-1.gl-border-gray-100.gl-rounded-base.gl-mt-5.gl-p-3.gl-text-center diff --git a/app/views/projects/issues/_discussion.html.haml b/app/views/projects/issues/_discussion.html.haml index e1f1d8bb8f7..51130ae666c 100644 --- a/app/views/projects/issues/_discussion.html.haml +++ b/app/views/projects/issues/_discussion.html.haml @@ -5,8 +5,8 @@ - content_for :note_actions do - if can?(current_user, :update_issue, @issue) - = link_to 'Reopen issue', issue_path(@issue, issue: {state_event: :reopen}, format: 'json'), data: {original_text: "Reopen issue", alternative_text: "Comment & reopen issue"}, class: "btn btn-nr btn-reopen btn-comment js-note-target-reopen #{issue_button_visibility(@issue, false)}", title: 'Reopen issue' - = link_to 'Close issue', issue_path(@issue, issue: {state_event: :close}, format: 'json'), data: {original_text: "Close issue", alternative_text: "Comment & close issue"}, class: "btn btn-nr btn-close btn-comment js-note-target-close #{issue_button_visibility(@issue, true)}", title: 'Close issue' + = link_to 'Reopen issue', issue_path(@issue, issue: {state_event: :reopen}, format: 'json'), data: {original_text: "Reopen issue", alternative_text: "Comment & reopen issue"}, class: "gl-button btn btn-nr btn-reopen btn-comment js-note-target-reopen #{issue_button_visibility(@issue, false)}", title: 'Reopen issue' + = link_to 'Close issue', issue_path(@issue, issue: {state_event: :close}, format: 'json'), data: {original_text: "Close issue", alternative_text: "Comment & close issue"}, class: "gl-button btn btn-nr btn-close btn-comment js-note-target-close #{issue_button_visibility(@issue, true)}", title: 'Close issue' %section.issuable-discussion.js-vue-notes-event #js-vue-notes{ data: { notes_data: notes_data(@issue).to_json, diff --git a/app/views/projects/issues/_issue.html.haml b/app/views/projects/issues/_issue.html.haml index 4f188ae273c..d9ad171a6cc 100644 --- a/app/views/projects/issues/_issue.html.haml +++ b/app/views/projects/issues/_issue.html.haml @@ -37,12 +37,15 @@ = sprite_icon('calendar') = issue.due_date.to_s(:medium) + + = render_if_exists "projects/issues/issue_weight", issue: issue + = render_if_exists "projects/issues/health_status", issue: issue + - if issue.labels.any? - presented_labels_sorted_by_title(issue.labels, issue.project).each do |label| = link_to_label(label, small: true) - = render_if_exists "projects/issues/issue_weight", issue: issue = render "projects/issues/issue_estimate", issue: issue .issuable-meta diff --git a/app/views/projects/issues/_issues.html.haml b/app/views/projects/issues/_issues.html.haml index fa08c39e407..ef602da72e5 100644 --- a/app/views/projects/issues/_issues.html.haml +++ b/app/views/projects/issues/_issues.html.haml @@ -11,7 +11,8 @@ 'empty-state-meta': data_empty_state_meta.to_json, 'can-bulk-edit': @can_bulk_update.to_json, 'sort-key': @sort, - type: type } } + type: type, + 'scoped-labels-available': scoped_labels_available?(@project).to_json } } - else - empty_state_path = local_assigns.fetch(:empty_state_path, 'shared/empty_states/issues') %ul.content-list.issues-list.issuable-list{ class: ("manual-ordering" if @sort == 'relative_position') } diff --git a/app/views/projects/issues/_nav_btns.html.haml b/app/views/projects/issues/_nav_btns.html.haml index cc6ca4aca4a..dbf6a1f1b94 100644 --- a/app/views/projects/issues/_nav_btns.html.haml +++ b/app/views/projects/issues/_nav_btns.html.haml @@ -8,22 +8,22 @@ .btn-group - if show_export_button - = render 'projects/issues/export_csv/button' + = render 'shared/issuable/csv_export/button', issuable_type: 'issues' - if show_import_button = render 'projects/issues/import_csv/button' - if @can_bulk_update - = button_tag _("Edit issues"), class: "btn btn-default gl-mr-3 js-bulk-update-toggle" + = button_tag _("Edit issues"), class: "gl-button btn btn-default gl-mr-3 js-bulk-update-toggle" - if show_new_issue_link?(@project) = link_to _("New issue"), new_project_issue_path(@project, issue: { assignee_id: finder.assignee.try(:id), milestone_id: finder.milestones.first.try(:id) }), - class: "btn btn-success", + class: "gl-button btn btn-success", id: "new_issue_link" - if show_export_button - = render 'projects/issues/export_csv/modal' + = render 'shared/issuable/csv_export/modal', issuable_type: 'issues' - if show_import_button = render 'projects/issues/import_csv/modal' diff --git a/app/views/projects/issues/_new_branch.html.haml b/app/views/projects/issues/_new_branch.html.haml index aa95cecb5fe..34260899d94 100644 --- a/app/views/projects/issues/_new_branch.html.haml +++ b/app/views/projects/issues/_new_branch.html.haml @@ -29,7 +29,7 @@ - if can_create_merge_request %li.droplab-item-selected{ role: 'button', data: { value: 'create-mr', text: create_mr_text } } .menu-item.text-nowrap - = icon('check', class: 'icon') + = sprite_icon('check', css_class: 'icon') - if can_create_confidential_merge_request? = _('Create confidential merge request and branch') - else @@ -37,7 +37,7 @@ %li{ class: [!can_create_merge_request && 'droplab-item-selected'], role: 'button', data: { value: 'create-branch', text: _('Create branch') } } .menu-item - = icon('check', class: 'icon') + = sprite_icon('check', css_class: 'icon') = _('Create branch') %li.divider.droplab-item-ignore diff --git a/app/views/projects/issues/_service_desk_empty_state.html.haml b/app/views/projects/issues/_service_desk_empty_state.html.haml index 4f004439f45..40abedea9d4 100644 --- a/app/views/projects/issues/_service_desk_empty_state.html.haml +++ b/app/views/projects/issues/_service_desk_empty_state.html.haml @@ -21,7 +21,7 @@ - if can_edit_project_settings && !service_desk_enabled .text-center - = link_to _("Turn on Service Desk"), edit_project_path(@project), class: 'btn btn-success' + = link_to _("Turn on Service Desk"), edit_project_path(@project), class: 'gl-button btn btn-success' - else .empty-state .svg-content diff --git a/app/views/projects/issues/_service_desk_info_content.html.haml b/app/views/projects/issues/_service_desk_info_content.html.haml index 7fa2f3fab00..1eb427f4f7c 100644 --- a/app/views/projects/issues/_service_desk_info_content.html.haml +++ b/app/views/projects/issues/_service_desk_info_content.html.haml @@ -20,4 +20,4 @@ - if can_edit_project_settings && !service_desk_enabled .gl-mt-3 - = link_to _("Turn on Service Desk"), edit_project_path(@project), class: 'btn btn-success' + = link_to _("Turn on Service Desk"), edit_project_path(@project), class: 'gl-button btn btn-success' diff --git a/app/views/projects/issues/export_csv/_button.html.haml b/app/views/projects/issues/export_csv/_button.html.haml deleted file mode 100644 index e5710fcdb60..00000000000 --- a/app/views/projects/issues/export_csv/_button.html.haml +++ /dev/null @@ -1,4 +0,0 @@ -- if current_user - %button.csv_download_link.btn.gl-button.has-tooltip{ title: _('Export as CSV'), - data: { toggle: 'modal', target: '.issues-export-modal', qa_selector: 'export_as_csv_button' } } - = sprite_icon('export') diff --git a/app/views/projects/issues/export_csv/_modal.html.haml b/app/views/projects/issues/export_csv/_modal.html.haml deleted file mode 100644 index 6610af63445..00000000000 --- a/app/views/projects/issues/export_csv/_modal.html.haml +++ /dev/null @@ -1,22 +0,0 @@ -- if current_user - .issues-export-modal.modal - .modal-dialog - .modal-content{ data: { qa_selector: 'export_issues_modal' } } - .modal-header - %h3 - = _('Export issues') - .svg-content.import-export-svg-container - = image_tag 'illustrations/export-import.svg', alt: _('Import/Export illustration'), class: 'illustration' - %a.close{ href: '#', 'data-dismiss' => 'modal' } - = sprite_icon('close', css_class: 'gl-icon') - .modal-body - - issues_count = issuables_count_for_state(:issues, params[:state]) - - unless issues_count == -1 # The count timed out - .modal-subheader - = icon('check', { class: 'checkmark' }) - %strong.gl-ml-3 - = n_('%d issue selected', '%d issues selected', issues_count) % issues_count - .modal-text - = html_escape(_('The CSV export will be created in the background. Once finished, it will be sent to %{strong_open}%{email}%{strong_close} in an attachment.')) % { email: @current_user.notification_email, strong_open: '<strong>'.html_safe, strong_close: '</strong>'.html_safe } - .modal-footer - = link_to _('Export issues'), export_csv_project_issues_path(@project, request.query_parameters), method: :post, class: 'btn gl-button btn-success float-left', title: _('Export issues'), data: { track_label: "export_issues_csv", track_event: "click_button", track_value: "", qa_selector: "export_issues_button" } diff --git a/app/views/projects/issues/import_csv/_modal.html.haml b/app/views/projects/issues/import_csv/_modal.html.haml index fe4a4236896..e928a71b940 100644 --- a/app/views/projects/issues/import_csv/_modal.html.haml +++ b/app/views/projects/issues/import_csv/_modal.html.haml @@ -20,5 +20,5 @@ = _('It must have a header row and at least two columns: the first column is the issue title and the second column is the issue description. The separator is automatically detected.') = _('The maximum file size allowed is %{size}.') % { size: number_to_human_size(Gitlab::CurrentSettings.max_attachment_size.megabytes) } .modal-footer - %button{ type: 'submit', class: 'btn btn-success', title: _('Import issues'), data: { track_label: "export_issues_csv", track_event: "click_button", track_value: ""} } + %button{ type: 'submit', class: 'gl-button btn btn-success', title: _('Import issues'), data: { track_label: "export_issues_csv", track_event: "click_button", track_value: ""} } = _('Import issues') diff --git a/app/views/projects/issues/show.html.haml b/app/views/projects/issues/show.html.haml index 7785093466b..c3949a83e3f 100644 --- a/app/views/projects/issues/show.html.haml +++ b/app/views/projects/issues/show.html.haml @@ -1,103 +1,6 @@ - @content_class = "limit-container-width" unless fluid_layout - add_to_breadcrumbs _("Issues"), project_issues_path(@project) - breadcrumb_title @issue.to_reference -- page_title "#{@issue.title} (#{@issue.to_reference})", _("Issues") -- page_description @issue.description_html -- page_card_attributes @issue.card_attributes -- if @issue.relocation_target - - page_canonical_link @issue.relocation_target.present(current_user: current_user).web_url -- if @issue.sentry_issue.present? - - add_page_specific_style 'page_bundles/error_tracking_details' +- page_title "#{@issue.title} (#{@issue.to_reference})", _("Issues") -- can_update_issue = can?(current_user, :update_issue, @issue) -- can_reopen_issue = can?(current_user, :reopen_issue, @issue) -- can_report_spam = @issue.submittable_as_spam_by?(current_user) -- can_create_issue = show_new_issue_link?(@project) -- related_branches_path = related_branches_project_issue_path(@project, @issue) - -= render_if_exists "projects/issues/alert_blocked", issue: @issue, current_user: current_user -= render "projects/issues/alert_moved_from_service_desk", issue: @issue - -.detail-page-header - .detail-page-header-body - .issuable-status-box.status-box.status-box-issue-closed{ class: issue_status_visibility(@issue, status_box: :closed) } - = sprite_icon('mobile-issue-close', css_class: 'd-block d-sm-none') - .d-none.d-sm-block - = issue_closed_text(@issue, current_user) - .issuable-status-box.status-box.status-box-open{ class: issue_status_visibility(@issue, status_box: :open) } - = sprite_icon('issue-open-m', css_class: 'd-block d-sm-none') - %span.d-none.d-sm-block Open - - .issuable-meta - #js-issuable-header-warnings - = issuable_meta(@issue, @project, "Issue") - - %a.btn.btn-default.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.js-issuable-buttons{ data: { "action": "close-reopen" } } - .clearfix.issue-btn-group.dropdown - %button.btn.btn-default.float-left.d-md-none.d-lg-none.d-xl-none{ type: "button", data: { toggle: "dropdown" } } - Options - = icon('caret-down') - .dropdown-menu.dropdown-menu-right.d-lg-none.d-xl-none - %ul - - unless current_user == @issue.author - %li= link_to 'Report abuse', new_abuse_report_path(user_id: @issue.author.id, ref_url: issue_url(@issue)) - - if can_update_issue - %li= link_to 'Close issue', issue_path(@issue, issue: { state_event: :close }, format: 'json'), class: "btn-close js-btn-issue-action #{issue_button_visibility(@issue, true)}", title: 'Close issue' - - if can_reopen_issue - %li= link_to 'Reopen issue', issue_path(@issue, issue: { state_event: :reopen }, format: 'json'), class: "btn-reopen js-btn-issue-action #{issue_button_visibility(@issue, false)}", title: 'Reopen issue' - - if can_report_spam - %li= link_to 'Submit as spam', mark_as_spam_project_issue_path(@project, @issue), method: :post, class: 'btn-spam', title: 'Submit as spam' - - if can_create_issue - - if can_update_issue || can_report_spam - %li.divider - %li= link_to 'New issue', new_project_issue_path(@project), id: 'new_issue_link' - - = render 'shared/issuable/close_reopen_button', issuable: @issue, can_update: can_update_issue, can_reopen: can_reopen_issue, warn_before_close: defined?(@issue.blocked?) && @issue.blocked? - - - if can_report_spam - = link_to 'Submit as spam', mark_as_spam_project_issue_path(@project, @issue), method: :post, class: 'd-none d-sm-none d-md-block btn btn-grouped btn-spam', title: 'Submit as spam' - - if can_create_issue - = link_to new_project_issue_path(@project), class: 'd-none d-sm-none d-md-block btn btn-grouped btn-success btn-inverted', title: 'New issue', id: 'new_issue_link' do - New issue - -.issue-details.issuable-details - .detail-page-description.content-block - #js-issuable-app{ data: { initial: issuable_initial_data(@issue).to_json} } - .title-container - %h2.title= markdown_field(@issue, :title) - - if @issue.description.present? - .description - .md= markdown_field(@issue, :description) - - = edited_time_ago_with_tooltip(@issue, placement: 'bottom', html_class: 'issue-edited-ago js-issue-edited-ago') - - - if @issue.sentry_issue.present? - #js-sentry-error-stack-trace{ data: error_details_data(@project, @issue.sentry_issue.sentry_issue_identifier) } - - = render 'projects/issues/design_management' - - = render_if_exists 'projects/issues/related_issues' - - #js-related-merge-requests{ data: { endpoint: expose_path(api_v4_projects_issues_related_merge_requests_path(id: @project.id, issue_iid: @issue.iid)), project_namespace: @project.namespace.path, project_path: @project.path } } - - - if can?(current_user, :download_code, @project) - - add_page_startup_api_call related_branches_path - #related-branches{ data: { url: related_branches_path } } - -# This element is filled in using JavaScript. - - .content-block.emoji-block.emoji-block-sticky - .row.gl-m-0.gl-justify-content-space-between - .js-noteable-awards - = render 'award_emoji/awards_block', awardable: @issue, inline: true - .new-branch-col - = render_if_exists "projects/issues/timeline_toggle", issue: @issue - #js-vue-sort-issue-discussions - #js-vue-discussion-filter{ data: { default_filter: current_user&.notes_filter_for(@issue), notes_filters: UserPreference.notes_filters.to_json } } - = render 'new_branch' if show_new_branch_button? - - = render 'projects/issues/discussion' - -= render 'shared/issuable/sidebar', issuable_sidebar: @issuable_sidebar, assignees: @issue.assignees += render 'projects/issuable/show', issuable: @issue diff --git a/app/views/projects/jobs/index.html.haml b/app/views/projects/jobs/index.html.haml index 0b4b4aafeee..a1960fc99cf 100644 --- a/app/views/projects/jobs/index.html.haml +++ b/app/views/projects/jobs/index.html.haml @@ -1,4 +1,5 @@ - page_title _("Jobs") +- add_page_specific_style 'page_bundles/ci_status' .top-area - build_path_proc = ->(scope) { project_jobs_path(@project, scope: scope) } diff --git a/app/views/projects/jobs/show.html.haml b/app/views/projects/jobs/show.html.haml index d7a778088ee..44336b95e0f 100644 --- a/app/views/projects/jobs/show.html.haml +++ b/app/views/projects/jobs/show.html.haml @@ -1,7 +1,9 @@ - add_to_breadcrumbs _("Jobs"), project_jobs_path(@project) - breadcrumb_title "##{@build.id}" - page_title "#{@build.name} (##{@build.id})", _("Jobs") +- add_page_specific_style 'page_bundles/build' - add_page_specific_style 'page_bundles/xterm' +- add_page_specific_style 'page_bundles/ci_status' = render_if_exists "shared/shared_runners_minutes_limit_flash_message" diff --git a/app/views/projects/labels/index.html.haml b/app/views/projects/labels/index.html.haml index 2699192adc9..357d4d193df 100644 --- a/app/views/projects/labels/index.html.haml +++ b/app/views/projects/labels/index.html.haml @@ -5,7 +5,7 @@ - labels_or_filters = @labels.exists? || @prioritized_labels.exists? || search.present? || subscribed.present? - if labels_or_filters - #promote-label-modal + #js-promote-label-modal = render 'shared/labels/nav', labels_or_filters: labels_or_filters, can_admin_label: can_admin_label .labels-container.gl-mt-3 @@ -17,7 +17,7 @@ -# Only show it in the first page - hide = @available_labels.empty? || (params[:page].present? && params[:page] != '1') - .prioritized-labels{ class: [('hide' if hide), ('is-not-draggable' unless can_admin_label)] } + .prioritized-labels.gl-mb-7{ class: [('hide' if hide), ('is-not-draggable' unless can_admin_label)] } %h5.gl-mt-3= _('Prioritized Labels') .content-list.manage-labels-list.js-prioritized-labels{ data: { url: set_priorities_project_labels_path(@project), sortable: can_admin_label } } #js-priority-labels-empty-state.priority-labels-empty-state{ class: "#{'hidden' unless @prioritized_labels.empty? && search.blank?}" } diff --git a/app/views/projects/logs/empty_logs.html.haml b/app/views/projects/logs/empty_logs.html.haml index afae2d30f6e..5e3db401d79 100644 --- a/app/views/projects/logs/empty_logs.html.haml +++ b/app/views/projects/logs/empty_logs.html.haml @@ -11,4 +11,4 @@ %p.state-description.text-center = s_('Logs|To see the logs, deploy your code to an environment.') .text-center - = link_to s_('Environments|Learn about environments'), help_page_path('ci/environments/index.md'), class: 'btn btn-success' + = link_to s_('Environments|Learn about environments'), help_page_path('ci/environments/index.md'), class: 'gl-button btn btn-success' diff --git a/app/views/projects/mattermosts/_no_teams.html.haml b/app/views/projects/mattermosts/_no_teams.html.haml index 0377cd6586e..00efea81f8f 100644 --- a/app/views/projects/mattermosts/_no_teams.html.haml +++ b/app/views/projects/mattermosts/_no_teams.html.haml @@ -9,8 +9,8 @@ To install this service, = link_to "#{Gitlab.config.mattermost.host}/select_team", target: '__blank' do join a team - = icon('external-link') + = sprite_icon('external-link') and try again. %hr .clearfix - = link_to 'Go back', edit_project_service_path(@project, @service), class: 'btn btn-lg float-right' + = link_to 'Go back', edit_project_service_path(@project, @service), class: 'gl-button btn btn-lg float-right' diff --git a/app/views/projects/mattermosts/_team_selection.html.haml b/app/views/projects/mattermosts/_team_selection.html.haml index d0a7f89df31..ea04a55a77c 100644 --- a/app/views/projects/mattermosts/_team_selection.html.haml +++ b/app/views/projects/mattermosts/_team_selection.html.haml @@ -19,7 +19,7 @@ To create a team, = link_to "#{Gitlab.config.mattermost.host}/create_team" do use Mattermost's interface - = icon('external-link') + = sprite_icon('external-link') or ask your Mattermost system administrator. %hr %h4 Command trigger word @@ -38,9 +38,9 @@ Reserved: = link_to 'https://docs.mattermost.com/help/messaging/executing-commands.html#built-in-commands', target: '__blank' do see list of built-in slash commands - = icon('external-link') + = sprite_icon('external-link') %hr .clearfix .float-right - = link_to 'Cancel', edit_project_service_path(@project, @service), class: 'btn btn-lg' - = f.submit 'Install', class: 'btn btn-success btn-lg' + = link_to 'Cancel', edit_project_service_path(@project, @service), class: 'gl-button btn btn-lg' + = f.submit 'Install', class: 'gl-button btn btn-success btn-lg' diff --git a/app/views/projects/merge_requests/_mr_title.html.haml b/app/views/projects/merge_requests/_mr_title.html.haml index b56e2c3f985..cd4ffa8602e 100644 --- a/app/views/projects/merge_requests/_mr_title.html.haml +++ b/app/views/projects/merge_requests/_mr_title.html.haml @@ -25,10 +25,10 @@ .detail-page-header-actions.js-issuable-actions .clearfix.issue-btn-group.dropdown - %button.btn.btn-default.float-left.d-md-none.d-lg-none.d-xl-none{ type: "button", data: { toggle: "dropdown" } } + %button.btn.btn-default.float-left.d-md-none{ type: "button", data: { toggle: "dropdown" } } Options = icon('caret-down') - .dropdown-menu.dropdown-menu-right.d-lg-none.d-xl-none + .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) @@ -41,10 +41,10 @@ - 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, class: 'reopen-mr-link', title: 'Reopen merge request' - - unless current_user == @merge_request.author + - 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 can_update_merge_request - = link_to 'Edit', edit_project_merge_request_path(@project, @merge_request), class: "d-none d-sm-none d-md-block btn gl-button btn-grouped js-issuable-edit qa-edit-button" + = link_to 'Edit', edit_project_merge_request_path(@project, @merge_request), class: "d-none d-md-block btn gl-button btn-grouped js-issuable-edit qa-edit-button" = render 'shared/issuable/close_reopen_button', issuable: @merge_request, can_update: can_update_merge_request, can_reopen: can_reopen_merge_request diff --git a/app/views/projects/merge_requests/_nav_btns.html.haml b/app/views/projects/merge_requests/_nav_btns.html.haml index 2ef10365c18..473490c6c35 100644 --- a/app/views/projects/merge_requests/_nav_btns.html.haml +++ b/app/views/projects/merge_requests/_nav_btns.html.haml @@ -1,5 +1,10 @@ +.btn-group + = render 'shared/issuable/csv_export/button', issuable_type: 'merge-requests' + - if @can_bulk_update - = button_tag "Edit merge requests", class: "btn gl-mr-3 js-bulk-update-toggle" + = button_tag "Edit merge requests", class: "gl-button btn gl-mr-3 js-bulk-update-toggle" - if merge_project - = link_to new_merge_request_path, class: "btn btn-success", title: "New merge request" do + = link_to new_merge_request_path, class: "gl-button btn btn-success", title: "New merge request" do New merge request + + = render 'shared/issuable/csv_export/modal', issuable_type: 'merge_requests' diff --git a/app/views/projects/merge_requests/conflicts/_submit_form.html.haml b/app/views/projects/merge_requests/conflicts/_submit_form.html.haml index 55c89f137c5..94c262d300e 100644 --- a/app/views/projects/merge_requests/conflicts/_submit_form.html.haml +++ b/app/views/projects/merge_requests/conflicts/_submit_form.html.haml @@ -21,4 +21,4 @@ %button.btn.btn-success.js-submit-button{ type: "button", "@click" => "commit()", ":disabled" => "!readyToCommit" } %span {{commitButtonText}} .col-6.text-right - = link_to "Cancel", project_merge_request_path(@merge_request.project, @merge_request), class: "btn btn-cancel" + = link_to "Cancel", project_merge_request_path(@merge_request.project, @merge_request), class: "gl-button btn btn-cancel" diff --git a/app/views/projects/merge_requests/conflicts/components/_diff_file_editor.html.haml b/app/views/projects/merge_requests/conflicts/components/_diff_file_editor.html.haml index 3ca82adccf1..7294c5d321a 100644 --- a/app/views/projects/merge_requests/conflicts/components/_diff_file_editor.html.haml +++ b/app/views/projects/merge_requests/conflicts/components/_diff_file_editor.html.haml @@ -7,7 +7,4 @@ %button.btn.btn-sm.btn-close{ "@click" => "acceptDiscardConfirmation(file)" } Discard changes %button.btn.btn-sm{ "@click" => "cancelDiscardConfirmation(file)" } Cancel .editor-wrap{ ":class" => "classObject" } - .loading - .spinner.spinner-md - .editor - %pre{ "style" => "height: 350px" } + .editor{ "style" => "height: 350px", data: { 'editor-loading': true } } diff --git a/app/views/projects/merge_requests/conflicts/show.html.haml b/app/views/projects/merge_requests/conflicts/show.html.haml index a7ffe825139..decdbce3fa7 100644 --- a/app/views/projects/merge_requests/conflicts/show.html.haml +++ b/app/views/projects/merge_requests/conflicts/show.html.haml @@ -1,7 +1,5 @@ - page_title _("Merge Conflicts"), "#{@merge_request.title} (#{@merge_request.to_reference}", _("Merge Requests") - add_page_specific_style 'page_bundles/merge_conflicts' -- content_for :page_specific_javascripts do - = page_specific_javascript_tag('lib/ace.js') = render "projects/merge_requests/mr_title" .merge-request-details.issuable-details 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 f0a68512326..2cb75d43d4b 100644 --- a/app/views/projects/merge_requests/creations/_new_compare.html.haml +++ b/app/views/projects/merge_requests/creations/_new_compare.html.haml @@ -4,7 +4,6 @@ = form_for [@project, @merge_request], url: project_new_merge_request_path(@project), method: :get, html: { class: "merge-request-form js-requires-input" } do |f| - if params[:nav_source].present? = hidden_field_tag(:nav_source, params[:nav_source]) - .hide.alert.alert-danger.mr-compare-errors .js-merge-request-new-compare.row{ 'data-source-branch-url': project_new_merge_request_branch_from_path(@source_project), 'data-target-branch-url': project_new_merge_request_branch_to_path(@source_project) } .col-lg-6 .card.card-new-merge-request @@ -65,4 +64,4 @@ - if @merge_request.errors.any? = form_errors(@merge_request) - = f.submit 'Compare branches and continue', class: "btn btn-success mr-compare-btn" + = f.submit 'Compare branches and continue', class: "gl-button btn btn-success mr-compare-btn" diff --git a/app/views/projects/merge_requests/creations/new.html.haml b/app/views/projects/merge_requests/creations/new.html.haml index 4c968c8e8eb..0741b24a5a1 100644 --- a/app/views/projects/merge_requests/creations/new.html.haml +++ b/app/views/projects/merge_requests/creations/new.html.haml @@ -2,6 +2,7 @@ - breadcrumb_title _("New") - page_title _("New Merge Request") - add_page_specific_style 'page_bundles/pipelines' +- add_page_specific_style 'page_bundles/ci_status' - if @merge_request.can_be_created && !params[:change_branches] = render 'new_submit' diff --git a/app/views/projects/merge_requests/show.html.haml b/app/views/projects/merge_requests/show.html.haml index 1dbcd613ceb..6b506c38795 100644 --- a/app/views/projects/merge_requests/show.html.haml +++ b/app/views/projects/merge_requests/show.html.haml @@ -11,6 +11,7 @@ - add_page_specific_style 'page_bundles/merge_requests' - add_page_specific_style 'page_bundles/pipelines' - add_page_specific_style 'page_bundles/reports' +- add_page_specific_style 'page_bundles/ci_status' .merge-request{ data: { mr_action: mr_action, url: merge_request_path(@merge_request, format: :json), project_path: project_path(@merge_request.project), lock_version: @merge_request.lock_version } } = render "projects/merge_requests/mr_title" diff --git a/app/views/projects/milestones/_form.html.haml b/app/views/projects/milestones/_form.html.haml index 907af326ec5..a21f519da0e 100644 --- a/app/views/projects/milestones/_form.html.haml +++ b/app/views/projects/milestones/_form.html.haml @@ -22,7 +22,7 @@ .form-actions - if @milestone.new_record? = f.submit _('Create milestone'), class: 'btn-success btn', data: { qa_selector: 'create_milestone_button' } - = link_to _('Cancel'), project_milestones_path(@project), class: 'btn btn-cancel' + = link_to _('Cancel'), project_milestones_path(@project), class: 'gl-button btn btn-cancel' - else = f.submit _('Save changes'), class: 'btn-success btn' - = link_to _('Cancel'), project_milestone_path(@project, @milestone), class: 'btn btn-cancel' + = link_to _('Cancel'), project_milestone_path(@project, @milestone), class: 'gl-button btn btn-cancel' diff --git a/app/views/projects/milestones/index.html.haml b/app/views/projects/milestones/index.html.haml index 2c52d2a5fbc..b964c8b1a93 100644 --- a/app/views/projects/milestones/index.html.haml +++ b/app/views/projects/milestones/index.html.haml @@ -8,7 +8,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: 'btn btn-success', data: { qa_selector: "new_project_milestone_link" }, title: _('New milestone') do + = link_to new_project_milestone_path(@project), class: 'gl-button btn btn-success', data: { qa_selector: "new_project_milestone_link" }, title: _('New milestone') do = _('New milestone') .milestones diff --git a/app/views/projects/mirrors/_authentication_method.html.haml b/app/views/projects/mirrors/_authentication_method.html.haml index dae0fa958ba..88bd7da7fef 100644 --- a/app/views/projects/mirrors/_authentication_method.html.haml +++ b/app/views/projects/mirrors/_authentication_method.html.haml @@ -7,7 +7,7 @@ = f.select :auth_method, options_for_select(auth_options, mirror.auth_method), {}, { class: "form-control select-control js-mirror-auth-type qa-authentication-method" } - = icon('chevron-down') + = sprite_icon('chevron-down', css_class: "gl-icon gl-absolute gl-top-3 gl-right-3 gl-text-gray-200") = f.hidden_field :auth_method, value: "password", class: "js-hidden-mirror-auth-type" .form-group diff --git a/app/views/projects/mirrors/_mirror_repos.html.haml b/app/views/projects/mirrors/_mirror_repos.html.haml index d2847de6ece..5b074ff8a28 100644 --- a/app/views/projects/mirrors/_mirror_repos.html.haml +++ b/app/views/projects/mirrors/_mirror_repos.html.haml @@ -33,7 +33,7 @@ = link_to sprite_icon('question-o'), help_page_path('user/project/protected_branches'), target: '_blank' .panel-footer - = f.submit _('Mirror repository'), class: 'btn btn-success js-mirror-submit qa-mirror-repository-button', name: :update_remote_mirror + = f.submit _('Mirror repository'), class: 'gl-button btn btn-success js-mirror-submit qa-mirror-repository-button', name: :update_remote_mirror - else .gl-alert.gl-alert-info{ role: 'alert' } = sprite_icon('information-o', css_class: 'gl-icon gl-alert-icon gl-alert-icon-no-title') @@ -72,6 +72,6 @@ - if mirror_settings_enabled .btn-group.mirror-actions-group.float-right{ role: 'group' } - if mirror.ssh_key_auth? - = clipboard_button(text: mirror.ssh_public_key, class: 'btn btn-default', title: _('Copy SSH public key'), qa_selector: 'copy_public_key_button') + = clipboard_button(text: mirror.ssh_public_key, class: 'gl-button btn btn-default', title: _('Copy SSH public key'), qa_selector: 'copy_public_key_button') = render 'shared/remote_mirror_update_button', remote_mirror: mirror - %button.js-delete-mirror.qa-delete-mirror.rspec-delete-mirror.btn.gl-button.btn-danger{ type: 'button', data: { mirror_id: mirror.id, toggle: 'tooltip', container: 'body' }, title: _('Remove') }= sprite_icon('remove') + %button.js-delete-mirror.qa-delete-mirror.rspec-delete-mirror.btn.btn-icon.gl-button.btn-danger{ type: 'button', data: { mirror_id: mirror.id, toggle: 'tooltip', container: 'body' }, title: _('Remove') }= sprite_icon('remove') diff --git a/app/views/projects/mirrors/_mirror_repos_form.html.haml b/app/views/projects/mirrors/_mirror_repos_form.html.haml index dd794e03f48..215d0a59d1b 100644 --- a/app/views/projects/mirrors/_mirror_repos_form.html.haml +++ b/app/views/projects/mirrors/_mirror_repos_form.html.haml @@ -2,6 +2,6 @@ = label_tag :mirror_direction, _('Mirror direction'), class: 'label-light' .select-wrapper = select_tag :mirror_direction, options_for_select([[_('Push'), 'push']]), class: 'form-control select-control js-mirror-direction qa-mirror-direction', disabled: true - = icon('chevron-down') + = sprite_icon('chevron-down', css_class: "gl-icon gl-absolute gl-top-3 gl-right-3 gl-text-gray-200") = render partial: "projects/mirrors/mirror_repos_push", locals: { f: f } diff --git a/app/views/projects/mirrors/_ssh_host_keys.html.haml b/app/views/projects/mirrors/_ssh_host_keys.html.haml index 1690188f07a..4e3cd609d75 100644 --- a/app/views/projects/mirrors/_ssh_host_keys.html.haml +++ b/app/views/projects/mirrors/_ssh_host_keys.html.haml @@ -14,7 +14,7 @@ %code= fp.fingerprint - if verified_at .form-text.text-muted.js-fingerprint-verification - %i.fa.fa-check.fingerprint-verified + = sprite_icon('check', css_class: 'gl-text-green-500') Verified by - if verified_by = link_to verified_by.name, user_path(verified_by) diff --git a/app/views/projects/new.html.haml b/app/views/projects/new.html.haml index d5099f80ea4..f2972a9617b 100644 --- a/app/views/projects/new.html.haml +++ b/app/views/projects/new.html.haml @@ -4,7 +4,7 @@ - header_title _("Projects"), dashboard_projects_path - active_tab = local_assigns.fetch(:active_tab, 'blank') -.project-edit-container.gl-mt-3 +.project-edit-container.gl-mt-5 .project-edit-errors = render 'projects/errors' diff --git a/app/views/projects/no_repo.html.haml b/app/views/projects/no_repo.html.haml index c44d3da23bb..65c4232b240 100644 --- a/app/views/projects/no_repo.html.haml +++ b/app/views/projects/no_repo.html.haml @@ -1,9 +1,10 @@ - breadcrumb_title _("Details") - page_title _("Details") -%h2 - %i.fa.fa-warning - #{ _('No repository') } +%h2.gl-display-flex + .gl-display-flex.gl-align-items-center.gl-justify-content-center + = sprite_icon('warning-solid', size: 24, css_class: 'gl-mr-2') + = _('No repository') %p.slead #{ _('The repository for this project does not exist.') } @@ -11,6 +12,8 @@ #{ _('This means you can not push code until you create an empty repository or import existing one.') } %hr += render_if_exists 'projects/invite_members_modal', project: @project + .no-repo-actions = link_to project_repository_path(@project), method: :post, class: 'btn btn-primary' do #{ _('Create empty repository') } diff --git a/app/views/projects/pages/_ssl_limitations_warning.html.haml b/app/views/projects/pages/_ssl_limitations_warning.html.haml index 7188e169824..1f2907d183e 100644 --- a/app/views/projects/pages/_ssl_limitations_warning.html.haml +++ b/app/views/projects/pages/_ssl_limitations_warning.html.haml @@ -1,5 +1,5 @@ .bs-callout.bs-callout-warning - %i.fa.fa-warning + = sprite_icon("warning-solid", css_class: "gl-text-orange-600") %strong= _("Warning:") - pages_host = Gitlab.config.pages.host = s_("GitLabPages|When using Pages under the general domain of a GitLab instance (%{pages_host}), you cannot use HTTPS with sub-subdomains. This means that if your username/groupname contains a dot it will not work. This is a limitation of the HTTP Over TLS protocol. HTTP pages will continue to work provided you don't redirect HTTP to HTTPS.").html_safe % { pages_host: pages_host } diff --git a/app/views/projects/pages_domains/_dns.html.haml b/app/views/projects/pages_domains/_dns.html.haml index 8e2a9c3bab4..dc8127ab068 100644 --- a/app/views/projects/pages_domains/_dns.html.haml +++ b/app/views/projects/pages_domains/_dns.html.haml @@ -30,4 +30,4 @@ = clipboard_button(target: '#domain_verification', class: 'btn-default d-none d-sm-block') %p.form-text.text-muted - link_to_help = link_to(_('verify ownership'), help_page_path('user/project/pages/custom_domains_ssl_tls_certification/index.md', anchor: '4-verify-the-domains-ownership')) - = _("To %{link_to_help} of your domain, add the above key to a TXT record within to your DNS configuration.").html_safe % { link_to_help: link_to_help } + = _("To %{link_to_help} of your domain, add the above key to a TXT record within your DNS configuration.").html_safe % { link_to_help: link_to_help } diff --git a/app/views/projects/pages_domains/_lets_encrypt_callout.html.haml b/app/views/projects/pages_domains/_lets_encrypt_callout.html.haml index a86637c36b3..9072312c100 100644 --- a/app/views/projects/pages_domains/_lets_encrypt_callout.html.haml +++ b/app/views/projects/pages_domains/_lets_encrypt_callout.html.haml @@ -6,7 +6,7 @@ .col-sm-10.offset-sm-2 .bs-callout.bs-callout-warning.mt-0 .row.align-items-center.mx-2 - = icon('warning', class: 'mr-2') + = sprite_icon('warning-solid', css_class: ' mr-2 gl-text-orange-600') = _("Something went wrong while obtaining the Let's Encrypt certificate.") .row.mx-0.mt-3 = link_to s_('GitLabPagesDomains|Retry'), retry_auto_ssl_project_pages_domain_path(@project, domain_presenter), class: "btn btn-sm btn-grouped btn-warning", method: :post diff --git a/app/views/projects/pages_domains/show.html.haml b/app/views/projects/pages_domains/show.html.haml index 20ecf948447..54522a70f4a 100644 --- a/app/views/projects/pages_domains/show.html.haml +++ b/app/views/projects/pages_domains/show.html.haml @@ -6,7 +6,7 @@ - if verification_enabled && domain_presenter.unverified? = content_for :flash_message do - .alert.alert-warning + .gl-alert.gl-alert-warning .container-fluid.container-limited = _("This domain is not verified. You will need to verify ownership before access is enabled.") diff --git a/app/views/projects/pipeline_schedules/_form.html.haml b/app/views/projects/pipeline_schedules/_form.html.haml index 1a8229350d9..ee0fe43e79c 100644 --- a/app/views/projects/pipeline_schedules/_form.html.haml +++ b/app/views/projects/pipeline_schedules/_form.html.haml @@ -39,5 +39,5 @@ = f.check_box :active, required: false, value: @schedule.active? = f.label :active, _('Active'), class: 'gl-font-weight-normal' .footer-block.row-content-block - = f.submit _('Save pipeline schedule'), class: 'btn btn-success', tabindex: 3 + = f.submit _('Save pipeline schedule'), class: 'btn btn-success' = link_to _('Cancel'), pipeline_schedules_path(@project), class: 'btn btn-cancel' diff --git a/app/views/projects/pipeline_schedules/edit.html.haml b/app/views/projects/pipeline_schedules/edit.html.haml index d95fa6da903..29896500ea1 100644 --- a/app/views/projects/pipeline_schedules/edit.html.haml +++ b/app/views/projects/pipeline_schedules/edit.html.haml @@ -1,6 +1,7 @@ - add_to_breadcrumbs _("Schedules"), pipeline_schedules_path(@project) - breadcrumb_title "##{@schedule.id}" - page_title _("Edit"), @schedule.description, _("Pipeline Schedule") +- add_page_specific_style 'page_bundles/pipeline_schedules' %h3.page-title = _("Edit Pipeline Schedule %{id}") % { id: @schedule.id } diff --git a/app/views/projects/pipeline_schedules/index.html.haml b/app/views/projects/pipeline_schedules/index.html.haml index 91083cc0768..a52a6138402 100644 --- a/app/views/projects/pipeline_schedules/index.html.haml +++ b/app/views/projects/pipeline_schedules/index.html.haml @@ -1,8 +1,8 @@ - breadcrumb_title _("Schedules") - - page_title _("Pipeline Schedules") +- add_page_specific_style 'page_bundles/pipeline_schedules' -#pipeline-schedules-callout{ data: { docs_url: help_page_path('ci/pipelines/schedules'), image_url: image_path('illustrations/pipeline_schedule_callout.svg') } } +#pipeline-schedules-callout{ data: { docs_url: help_page_path('ci/pipelines/schedules'), illustration_url: image_path('illustrations/pipeline_schedule_callout.svg') } } .top-area - schedule_path_proc = ->(scope) { pipeline_schedules_path(@project, scope: scope) } = render "tabs", schedule_path_proc: schedule_path_proc, all_schedules: @all_schedules, scope: @scope diff --git a/app/views/projects/pipeline_schedules/new.html.haml b/app/views/projects/pipeline_schedules/new.html.haml index cfdaf6d43bb..a2652304768 100644 --- a/app/views/projects/pipeline_schedules/new.html.haml +++ b/app/views/projects/pipeline_schedules/new.html.haml @@ -1,6 +1,7 @@ - breadcrumb_title "Schedules" - @breadcrumb_link = namespace_project_pipeline_schedules_path(@project.namespace, @project) - page_title _("New Pipeline Schedule") +- add_page_specific_style 'page_bundles/pipeline_schedules' - add_to_breadcrumbs("Pipelines", project_pipelines_path(@project)) diff --git a/app/views/projects/pipelines/_info.html.haml b/app/views/projects/pipelines/_info.html.haml index 6d3b3f815e4..f77f22cc555 100644 --- a/app/views/projects/pipelines/_info.html.haml +++ b/app/views/projects/pipelines/_info.html.haml @@ -42,7 +42,7 @@ toggle: "popover", placement: "top", html: "true", - trigger: "focus", + triggers: "focus", title: "<div class='gl-font-weight-normal gl-line-height-normal'>#{popover_title_text}</div>", content: "<a href='#{popover_content_url}' target='_blank' rel='noopener noreferrer nofollow'>#{popover_content_text}</a>", } } @@ -57,12 +57,7 @@ .well-segment.branch-info .icon-container.commit-icon = custom_icon("icon_commit") - = link_to commit.short_id, project_commit_path(@project, @pipeline.sha), class: "commit-sha js-details-short" - = link_to("#", class: "js-details-expand d-none d-md-inline") do - %span.text-expander - = sprite_icon('ellipsis_h', size: 12) - %span.js-details-content.hide - = link_to @pipeline.sha, project_commit_path(@project, @pipeline.sha), class: "commit-sha commit-hash-full" + = link_to commit.short_id, project_commit_path(@project, @pipeline.sha), class: "commit-sha" = clipboard_button(text: @pipeline.sha, title: _("Copy commit SHA")) .well-segment.related-merge-request-info diff --git a/app/views/projects/pipelines/_with_tabs.html.haml b/app/views/projects/pipelines/_with_tabs.html.haml index 40a52f76641..8955b568741 100644 --- a/app/views/projects/pipelines/_with_tabs.html.haml +++ b/app/views/projects/pipelines/_with_tabs.html.haml @@ -9,7 +9,7 @@ - if dag_pipeline_tab_enabled %li.js-dag-tab-link = link_to dag_project_pipeline_path(@project, @pipeline), data: { target: '#js-tab-dag', action: 'dag', toggle: 'tab' }, class: 'dag-tab' do - = _('DAG') + = _('Needs') %li.js-builds-tab-link = link_to builds_project_pipeline_path(@project, @pipeline), data: { target: '#js-tab-builds', action: 'builds', toggle: 'tab' }, class: 'builds-tab' do = _('Jobs') @@ -81,7 +81,7 @@ - if dag_pipeline_tab_enabled #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'), dag_doc_path: help_page_path('ci/yaml/README.md', anchor: 'needs')} } + #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/README.md', anchor: 'needs')} } #js-tab-tests.tab-pane #js-pipeline-tests-detail{ data: { summary_endpoint: summary_project_pipeline_tests_path(@project, @pipeline, format: :json), diff --git a/app/views/projects/pipelines/index.html.haml b/app/views/projects/pipelines/index.html.haml index ca07f33136b..6aa1a564499 100644 --- a/app/views/projects/pipelines/index.html.haml +++ b/app/views/projects/pipelines/index.html.haml @@ -1,5 +1,6 @@ - page_title _('Pipelines') - add_page_specific_style 'page_bundles/pipelines' +- add_page_specific_style 'page_bundles/ci_status' = render_if_exists "shared/shared_runners_minutes_limit_flash_message" diff --git a/app/views/projects/pipelines/new.html.haml b/app/views/projects/pipelines/new.html.haml index cb5401cd329..bc8e6a6d9cc 100644 --- a/app/views/projects/pipelines/new.html.haml +++ b/app/views/projects/pipelines/new.html.haml @@ -6,7 +6,7 @@ = s_('Pipeline|Run Pipeline') %hr -- if Feature.enabled?(:new_pipeline_form, @project) +- if Feature.enabled?(:new_pipeline_form, @project, default_enabled: true) #js-new-pipeline{ data: { project_id: @project.id, pipelines_path: project_pipelines_path(@project), config_variables_path: config_variables_namespace_project_pipelines_path(@project.namespace, @project), @@ -48,7 +48,7 @@ = (s_("Pipeline|Specify variable values to be used in this run. The values specified in %{settings_link} will be used by default.") % {settings_link: settings_link}).html_safe .form-actions - = f.submit s_('Pipeline|Run Pipeline'), class: 'btn btn-success js-variables-save-button', tabindex: 3 + = f.submit s_('Pipeline|Run Pipeline'), class: 'btn btn-success js-variables-save-button' = link_to _('Cancel'), project_pipelines_path(@project), class: 'btn btn-default float-right' %script#availableRefs{ type: "application/json" }= @project.repository.ref_names.to_json.html_safe diff --git a/app/views/projects/pipelines/show.html.haml b/app/views/projects/pipelines/show.html.haml index 34f7744f825..0b07fe9921e 100644 --- a/app/views/projects/pipelines/show.html.haml +++ b/app/views/projects/pipelines/show.html.haml @@ -4,9 +4,10 @@ - pipeline_has_errors = @pipeline.builds.empty? && @pipeline.yaml_errors.present? - add_page_specific_style 'page_bundles/pipeline' - add_page_specific_style 'page_bundles/reports' +- add_page_specific_style 'page_bundles/ci_status' .js-pipeline-container{ data: { controller_action: "#{controller.action_name}" } } - #js-pipeline-header-vue.pipeline-header-container{ data: {full_path: @project.full_path, retry_path: retry_project_pipeline_path(@pipeline.project, @pipeline), cancel_path: cancel_project_pipeline_path(@pipeline.project, @pipeline), delete_path: project_pipeline_path(@pipeline.project, @pipeline), pipeline_iid: @pipeline.iid, pipeline_id: @pipeline.id} } + #js-pipeline-header-vue.pipeline-header-container{ data: { full_path: @project.full_path, pipeline_iid: @pipeline.iid, pipeline_id: @pipeline.id, pipelines_path: project_pipelines_path(@project) } } - if @pipeline.commit.present? = render "projects/pipelines/info", commit: @pipeline.commit diff --git a/app/views/projects/project_members/_team.html.haml b/app/views/projects/project_members/_team.html.haml index 4d4705c4ed5..171212b6a96 100644 --- a/app/views/projects/project_members/_team.html.haml +++ b/app/views/projects/project_members/_team.html.haml @@ -1,5 +1,7 @@ - project = local_assigns.fetch(:project) - members = local_assigns.fetch(:members) +- group = local_assigns.fetch(:group) +- current_user_is_group_owner = group && group.has_owner?(current_user) .card .card-header.flex-project-members-panel @@ -14,5 +16,9 @@ = sprite_icon('search', css_class: 'gl-vertical-align-middle!') = label_tag :sort_by, _('Sort by'), class: 'col-form-label label-bold px-2' = render 'shared/members/sort_dropdown' - %ul.content-list.members-list{ data: { qa_selector: 'members_list' } } - = render partial: 'shared/members/member', collection: members, as: :member + %ul.content-list.members-list{ data: { qa_selector: 'members_list', testid: 'members-table' } } + = render partial: 'shared/members/member', + collection: members, as: :member, + locals: { membership_source: project, + group: group, + current_user_is_group_owner: current_user_is_group_owner } diff --git a/app/views/projects/project_members/index.html.haml b/app/views/projects/project_members/index.html.haml index 9a1e997fce7..cad76d7aeac 100644 --- a/app/views/projects/project_members/index.html.haml +++ b/app/views/projects/project_members/index.html.haml @@ -1,5 +1,6 @@ - page_title _("Members") - can_admin_project_members = can?(current_user, :admin_project_member, @project) +- group = @project.group .js-remove-member-modal .row.gl-mt-3 @@ -32,12 +33,12 @@ - elsif @project.allowed_to_share_with_group? .invite-group= render 'shared/members/invite_group', access_levels: ProjectGroupLink.access_options, default_access_level: ProjectGroupLink.default_access, submit_url: project_group_links_path(@project), group_link_field: 'link_group_id', group_access_field: 'link_group_access' - = render 'shared/members/requests', membership_source: @project, requesters: @requesters + = render 'shared/members/requests', membership_source: @project, group: group, requesters: @requesters .clearfix %h5.member.existing-title = _("Existing members and groups") - if @group_links.any? = render 'projects/project_members/groups', group_links: @group_links - = render 'projects/project_members/team', project: @project, members: @project_members + = render 'projects/project_members/team', project: @project, group: group, members: @project_members = paginate @project_members, theme: "gitlab" diff --git a/app/views/projects/runners/_runner.html.haml b/app/views/projects/runners/_runner.html.haml index 74b6e981c00..1a3ba690184 100644 --- a/app/views/projects/runners/_runner.html.haml +++ b/app/views/projects/runners/_runner.html.haml @@ -37,8 +37,8 @@ - if runner.description.present? %p.runner-description = runner.description - - if runner.tag_list.present? + - if runner.tags.present? %p - - runner.tag_list.sort.each do |tag| + - runner.tags.map(&:name).sort.each do |tag| %span.badge.badge-primary = tag diff --git a/app/views/projects/runners/_specific_runners.html.haml b/app/views/projects/runners/_specific_runners.html.haml index 4cc67a8f5d8..e02e2cc784a 100644 --- a/app/views/projects/runners/_specific_runners.html.haml +++ b/app/views/projects/runners/_specific_runners.html.haml @@ -9,15 +9,18 @@ = render partial: 'ci/runner/how_to_setup_runner', locals: { registration_token: @project.runners_token, type: 'specific', - reset_token_url: reset_registration_token_namespace_project_settings_ci_cd_path } + reset_token_url: reset_registration_token_namespace_project_settings_ci_cd_path, + project_path: @project.path_with_namespace, + group_path: '' } - if @project_runners.any? %h4.underlined-title= _('Runners activated for this project') %ul.bordered-list.activated-specific-runners = render partial: 'projects/runners/runner', collection: @project_runners, as: :runner + = paginate @project_runners, theme: "gitlab", param_name: "project_page", params: { expand_runners: true, anchor: 'js-runners-settings' } - if @assignable_runners.any? %h4.underlined-title= _('Available specific runners') %ul.bordered-list.available-specific-runners = render partial: 'projects/runners/runner', collection: @assignable_runners, as: :runner - = paginate @assignable_runners, theme: "gitlab", :params => { :anchor => '#js-runners-settings' } + = paginate @assignable_runners, theme: "gitlab", param_name: "specific_page", :params => { :anchor => 'js-runners-settings'} diff --git a/app/views/projects/services/prometheus/_metrics.html.haml b/app/views/projects/services/prometheus/_metrics.html.haml index 732a084d476..4bafd4d06e0 100644 --- a/app/views/projects/services/prometheus/_metrics.html.haml +++ b/app/views/projects/services/prometheus/_metrics.html.haml @@ -25,7 +25,8 @@ .card.hidden.js-panel-missing-env-vars .card-header - = icon('caret-right lg fw', class: 'panel-toggle js-panel-toggle', 'aria-label' => 'Toggle panel') + = 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') %span.badge.badge-pill.js-env-var-count 0 .card-body.hidden diff --git a/app/views/projects/settings/ci_cd/_form.html.haml b/app/views/projects/settings/ci_cd/_form.html.haml index 4793e685163..d247e73a5b4 100644 --- a/app/views/projects/settings/ci_cd/_form.html.haml +++ b/app/views/projects/settings/ci_cd/_form.html.haml @@ -72,7 +72,7 @@ %li = _("For public projects, anyone can view pipelines and access job details (output logs and artifacts)") %li - = _("For internal projects, any logged in user can view pipelines and access job details (output logs and artifacts)") + = _("For internal projects, any logged in user except external users can view pipelines and access job details (output logs and artifacts)") %li = _("For private projects, any member (guest or higher) can view pipelines and access job details (output logs and artifacts)") %p @@ -120,6 +120,9 @@ pytest-cov (Python) - %code ^TOTAL.+?(\d+\%)$ %li + Scoverage (Scala) - + %code Statement coverage[A-Za-z\.*]\s*:\s*([^%]+) + %li phpunit --coverage-text --colors=never (PHP) - %code ^\s*Lines:\s*\d+.\d+\% %li diff --git a/app/views/projects/settings/ci_cd/show.html.haml b/app/views/projects/settings/ci_cd/show.html.haml index 8e3be5fa086..f6ecb923100 100644 --- a/app/views/projects/settings/ci_cd/show.html.haml +++ b/app/views/projects/settings/ci_cd/show.html.haml @@ -33,7 +33,7 @@ = render_if_exists 'projects/settings/ci_cd/protected_environments', expanded: expanded -%section.settings.no-animate#js-runners-settings{ class: ('expanded' if expanded), data: { qa_selector: 'runners_settings_content' } } +%section.settings.no-animate#js-runners-settings{ class: ('expanded' if expanded || params[:expand_runners]), data: { qa_selector: 'runners_settings_content' } } .settings-header %h4 = _("Runners") @@ -75,6 +75,8 @@ .settings-content = render 'projects/registry/settings/index' += render_if_exists 'projects/settings/ci_cd/auto_rollback', expanded: expanded + - if can?(current_user, :create_freeze_period, @project) %section.settings.no-animate#js-deploy-freeze-settings{ class: ('expanded' if expanded) } .settings-header diff --git a/app/views/projects/settings/operations/_alert_management.html.haml b/app/views/projects/settings/operations/_alert_management.html.haml index 5c16a5e2758..9e76ad52ecb 100644 --- a/app/views/projects/settings/operations/_alert_management.html.haml +++ b/app/views/projects/settings/operations/_alert_management.html.haml @@ -1,5 +1,6 @@ - return unless can?(current_user, :admin_operations, @project) - expanded = expanded_by_default? +- add_page_specific_style 'page_bundles/alert_management_settings' %section.settings.no-animate#js-alert-management-settings{ class: ('expanded' if expanded) } .settings-header diff --git a/app/views/projects/settings/operations/_error_tracking.html.haml b/app/views/projects/settings/operations/_error_tracking.html.haml index 62b344b38f1..6ab8beff99f 100644 --- a/app/views/projects/settings/operations/_error_tracking.html.haml +++ b/app/views/projects/settings/operations/_error_tracking.html.haml @@ -1,4 +1,4 @@ -- return unless can?(current_user, :read_environment, @project) +- return unless can?(current_user, :admin_operations, @project) - setting = error_tracking_setting diff --git a/app/views/projects/show.html.haml b/app/views/projects/show.html.haml index 67bdcd0d9d6..f7c51e9ada9 100644 --- a/app/views/projects/show.html.haml +++ b/app/views/projects/show.html.haml @@ -1,5 +1,4 @@ - breadcrumb_title _("Details") -- page_title _("Projects") - @content_class = "limit-container-width" unless fluid_layout = content_for :meta_tags do diff --git a/app/views/projects/tags/_tag.html.haml b/app/views/projects/tags/_tag.html.haml index d7231e758c7..7679e0714fe 100644 --- a/app/views/projects/tags/_tag.html.haml +++ b/app/views/projects/tags/_tag.html.haml @@ -1,5 +1,6 @@ - commit = @repository.commit(tag.dereferenced_target) - release = @releases.find { |release| release.tag == tag.name } +- commit_status = @tag_pipeline_statuses[tag.name] unless @tag_pipeline_statuses.nil? %li.flex-row.allow-wrap.js-tag-list .row-main-content @@ -34,6 +35,12 @@ - if tag.has_signature? = render partial: 'projects/commit/signature', object: tag.signature + - if commit_status + = render 'ci/status/icon', size: 24, status: commit_status, option_css_classes: 'gl-display-inline-flex gl-vertical-align-middle gl-mr-5' + - elsif @tag_pipeline_statuses && @tag_pipeline_statuses.any? + .gl-display-inline-flex.gl-vertical-align-middle.gl-mr-5 + %svg.s24 + = render 'projects/buttons/download', project: @project, ref: tag.name, pipeline: @tags_pipelines[tag.name] - if can?(current_user, :admin_tag, @project) diff --git a/app/views/projects/terraform/index.html.haml b/app/views/projects/terraform/index.html.haml new file mode 100644 index 00000000000..136e7ded224 --- /dev/null +++ b/app/views/projects/terraform/index.html.haml @@ -0,0 +1,4 @@ +- breadcrumb_title _('Terraform') +- page_title _('Terraform') + +#js-terraform-list{ data: js_terraform_list_data(@project) } diff --git a/app/views/projects/tree/_tree_header.html.haml b/app/views/projects/tree/_tree_header.html.haml index dc9fb9e7792..cd6e85d60ed 100644 --- a/app/views/projects/tree/_tree_header.html.haml +++ b/app/views/projects/tree/_tree_header.html.haml @@ -13,7 +13,7 @@ = render 'shared/web_ide_button', blob: nil - if show_xcode_link?(@project) - .project-action-button.project-xcode.inline< + .project-action-button.project-xcode< = render "projects/buttons/xcode_link" = render 'projects/buttons/download', project: @project, ref: @ref diff --git a/app/views/projects/tree/show.html.haml b/app/views/projects/tree/show.html.haml index 4d8c357cee1..355277b7d41 100644 --- a/app/views/projects/tree/show.html.haml +++ b/app/views/projects/tree/show.html.haml @@ -1,5 +1,7 @@ - current_route_path = request.fullpath.match(/-\/tree\/[^\/]+\/(.+$)/).to_a[1] -- add_page_startup_graphql_call('repository/path_last_commit', { projectPath: @project.full_path, ref: current_ref, path: current_route_path }) +- add_page_startup_graphql_call('repository/path_last_commit', { projectPath: @project.full_path, ref: current_ref, path: current_route_path || "" }) +- add_page_startup_graphql_call('repository/permissions', { projectPath: @project.full_path }) +- add_page_startup_graphql_call('repository/files', { nextPageCursor: "", pageSize: 100, projectPath: @project.full_path, ref: current_ref, path: current_route_path || "/"}) - breadcrumb_title _("Repository") - @content_class = "limit-container-width" unless fluid_layout |