diff options
Diffstat (limited to 'app/views/projects/issues')
12 files changed, 21 insertions, 138 deletions
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 |