summaryrefslogtreecommitdiff
path: root/app/views/projects/diffs/_file.html.haml
blob: 4e60ebc6745d31e11fcaa445daa6520986a3fad2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
.diff-file.file-holder{id: "diff-#{index}", data: diff_file_html_data(project, diff_file.file_path, diff_commit.id)}
  .file-title{id: "file-path-#{hexdigest(diff_file.file_path)}"}
    = render "projects/diffs/file_header", diff_file: diff_file, blob: blob, diff_commit: diff_commit, project: project, url: "#diff-#{index}"

    - unless diff_file.submodule?
      .file-actions.hidden-xs
        - if blob_text_viewable?(blob)
          = link_to '#', class: 'js-toggle-diff-comments btn active has-tooltip btn-file-option', title: "Toggle comments for this file" do
            = icon('comment')
          \

          - if editable_diff?(diff_file)
            - link_opts = @merge_request.id ? { from_merge_request_id: @merge_request.id } : {}
            = edit_blob_link(@merge_request.source_project, @merge_request.source_branch, diff_file.new_path,
                             blob: blob, link_opts: link_opts)

        = view_file_btn(diff_commit.id, diff_file.new_path, project)

  - cache_key = [diff_file.diff_refs.base_sha, diff_file.diff_refs.start_sha, diff_file.diff_refs.head_sha, diff_file.file_path, diff_view]
  - content_html = Rails.cache.fetch(cache_key) do
    - render 'projects/diffs/content', diff_file: diff_file, diff_commit: diff_commit, blob: blob, project: project

  - unless @diff_notes_disabled
    - if discussions = @grouped_diff_discussions
      - discussions = discussions.values.flatten.group_by { |d| d.diff_file.file_path } if discussions
      - discussions = discussions[diff_file.file_path] if discussions
      - if discussions
        - if diff_view == :inline
          - discussions.each do |discussion|
            - discussion_html = render "discussions/diff_discussion", discussion: discussion, expanded: true
            - content_html.sub!(/<!--\ninject discussions #{discussion.line_code}\n-->/, discussion_html)
        - elsif diff_view == :parallel
          - diff_file.parallel_diff_lines.each do |line|
            - left = line[:left]
            - right = line[:right]
            - if left || right
              - discussions.each do |_discussion|
                - discussion_left, discussion_right = parallel_diff_discussions(left, right, diff_file)
                - if discussion_left || discussion_right
                  - # Delete already rendered discussion from the original collection
                  - @grouped_diff_discussions.delete(discussion_left.try(:line_code))
                  - @grouped_diff_discussions.delete(discussion_right.try(:line_code))
                  - discussion_html = render "discussions/parallel_diff_discussion", discussion_left: discussion_left, discussion_right: discussion_right
                  - content_html.sub!(/<!--\ninject discussions\s#{discussion_left.try(:line_code) || '.*'}\s\|\s#{discussion_right.try(:line_code) || '.*'}\n-->/, discussion_html)

  - content_html.gsub!(/<!--\ninject discussions\s.*\n-->/, '')
  =raw content_html