_note.html.haml 5.35 KB
Newer Older
1 2 3
- return unless note.author
- return if note.cross_reference_not_visible_for?(current_user)

4
- note_editable = note_editable?(note)
5
%li.timeline-entry{ id: dom_id(note), class: ["note", "note-row-#{note.id}", ('system-note' if note.system)], data: {author_id: note.author.id, editable: note_editable, note_id: note.id} }
6 7
  .timeline-entry-inner
    .timeline-icon
8
      %a{ href: user_path(note.author) }
9
        = image_tag avatar_icon(note.author), alt: '', class: 'avatar s40'
10 11
    .timeline-content
      .note-header
12
        %a.visible-xs{ href: user_path(note.author) }
13
          = note.author.to_reference
14 15 16 17
        = link_to_member(note.project, note.author, avatar: false, extra_class: 'hidden-xs')
        .note-headline-light
          %span.hidden-xs
            = note.author.to_reference
18
          - unless note.system
19
            commented
20
          - if note.system
21
            %span.system-note-message
22
              = note.redacted_note_html
23 24
          %a{ href: "##{dom_id(note)}" }
            = time_ago_with_tooltip(note.created_at, placement: 'bottom', html_class: 'note-created-ago')
25 26 27 28
        - unless note.system?
          .note-actions
            - access = note_max_access_for_user(note)
            - if access
29
              %span.note-role= access
30

Phil Hughes's avatar
Phil Hughes committed
31
            - if note.resolvable?
32
              - can_resolve = can?(current_user, :resolve_note, note)
33 34
              %resolve-btn{ "project-path" => project_path(note.project),
                  "discussion-id" => note.discussion_id,
35 36
                  ":note-id" => note.id,
                  ":resolved" => note.resolved?,
37
                  ":can-resolve" => can_resolve,
38 39
                  ":author-name" => "'#{j(note.author.name)}'",
                  "author-avatar" => note.author.avatar_url,
40
                  ":note-truncated" => "'#{j(truncate(note.note, length: 17))}'",
41
                  ":resolved-by" => "'#{j(note.resolved_by.try(:name))}'",
42
                  "v-show" => "#{can_resolve || note.resolved?}",
43
                  "inline-template" => true,
Phil Hughes's avatar
Phil Hughes committed
44
                  "ref" => "note_#{note.id}" }
45

46 47 48 49 50 51 52 53
                %button.note-action-button.line-resolve-btn{ type: "button",
                    class: ("is-disabled" unless can_resolve),
                    ":class" => "{ 'is-active': isResolved }",
                    ":aria-label" => "buttonText",
                    "@click" => "resolve",
                    ":title" => "buttonText",
                    "v-show" => "!loading",
                    ":ref" => "'button'" }
54
                  = icon("spin spinner", "v-show" => "loading")
55

56
                  = render "shared/icons/icon_status_success.svg"
57 58 59 60 61

            - if current_user
              - if note.emoji_awardable?
                = link_to '#', title: 'Award Emoji', class: 'note-action-button note-emoji-button js-add-award js-note-emoji', data: { position: 'right' } do
                  = icon('spinner spin')
62 63 64
                  %span{ class: "link-highlight award-control-icon-neutral" }= custom_icon('emoji_slightly_smiling_face')
                  %span{ class: "link-highlight award-control-icon-positive" }= custom_icon('emoji_smiley')
                  %span{ class: "link-highlight award-control-icon-super-positive" }= custom_icon('emoji_smile')
65 66 67

              - if note_editable
                = link_to '#', title: 'Edit comment', class: 'note-action-button js-note-edit' do
Clement Ho's avatar
Clement Ho committed
68
                  = icon('pencil', class: 'link-highlight')
69
                = link_to namespace_project_note_path(note.project.namespace, note.project, note), title: 'Remove comment', method: :delete, data: { confirm: 'Are you sure you want to remove this comment?' }, remote: true, class: 'note-action-button js-note-delete danger' do
70
                  = icon('trash-o', class: 'danger-highlight')
71
      .note-body{ class: note_editable ? 'js-task-list-container' : '' }
72
        .note-text.md
73
          = preserve do
74
            = note.redacted_note_html
75
        = edited_time_ago_with_tooltip(note, placement: 'bottom', html_class: 'note_edited_ago', include_author: true)
76
        - if note_editable
Fatih Acet's avatar
Fatih Acet committed
77
          .original-note-content.hidden{ data: { post_url: namespace_project_note_path(@project.namespace, @project, note), target_id: note.noteable.id, target_type: note.noteable.class.name.underscore } }
78
            #{note.note}
79
          %textarea.hidden.js-task-list-field.original-task-list{ data: {update_url: namespace_project_note_path(@project.namespace, @project, note) } }= note.note
80 81
        .note-awards
          = render 'award_emoji/awards_block', awardable: note, inline: false
82 83 84
        - if note.system
          .system-note-commit-list-toggler
            Toggle commit list
85
            %i.fa.fa-angle-down
86 87 88
      - if note.attachment.url
        .note-attachment
          - if note.attachment.image?
Douwe Maan's avatar
Douwe Maan committed
89 90
            = link_to note.attachment.url, target: '_blank' do
              = image_tag note.attachment.url, class: 'note-image-attach'
91
          .attachment
92 93
            = link_to note.attachment.url, target: '_blank' do
              = icon('paperclip')
94
              = note.attachment_identifier
Douwe Maan's avatar
Douwe Maan committed
95
              = link_to delete_attachment_namespace_project_note_path(note.project.namespace, note.project, note),
96 97
                title: 'Delete this attachment', method: :delete, remote: true, data: { confirm: 'Are you sure you want to remove the attachment?' }, class: 'danger js-note-attachment-delete' do
                = icon('trash-o', class: 'cred')