|
1 | 1 | defmodule DiffWeb.DiffComponent do |
2 | 2 | use DiffWeb, :live_component |
| 3 | + alias Phoenix.LiveView.JS |
3 | 4 |
|
4 | 5 | def render(assigns) do |
5 | 6 | ~H""" |
6 | 7 | <div class="ghd-file"> |
7 | | - <div class="ghd-file-header"> |
8 | | - <span class={"ghd-file-status ghd-file-status-#{diff_status(@diff)}"}> |
9 | | - <%= diff_status(@diff) %> |
10 | | - </span> |
11 | | - <%= file_header(@diff, diff_status(@diff)) %> |
12 | | - <span class="collapse-diff"><svg xmlns="http://www.w3.org/2000/svg" width="10" height="16" viewBox="0 0 10 16"><path fill-rule="evenodd" d="M10 10l-1.5 1.5L5 7.75 1.5 11.5 0 10l5-5 5 5z"/></svg></span> |
13 | | - <span class="reveal-diff"><svg xmlns="http://www.w3.org/2000/svg" width="10" height="16" viewBox="0 0 10 16"><path fill-rule="evenodd" d="M5 11L0 6l1.5-1.5L5 8.25 8.5 4.5 10 6l-5 5z"/></svg></span> |
| 8 | + <div class="ghd-file-header" phx-click={JS.toggle_class("hidden", to: "##{@diff_id}-body")}> |
| 9 | + <div> |
| 10 | + <span class={"ghd-file-status ghd-file-status-#{diff_status(@diff)}"}> |
| 11 | + <%= diff_status(@diff) %> |
| 12 | + </span> |
| 13 | + <%= file_header(@diff, diff_status(@diff)) %> |
| 14 | + </div> |
| 15 | + <svg class="show-hide-diff" xmlns="http://www.w3.org/2000/svg" width="10" height="16" viewBox="0 0 10 16"> |
| 16 | + <path fill-rule="evenodd" d="M10 10l-1.5 1.5L5 7.75 1.5 11.5 0 10l5-5 5 5z"/> |
| 17 | + </svg> |
14 | 18 | </div> |
15 | | - <div class="ghd-diff"> |
| 19 | + <div class="ghd-diff" id={"#{@diff_id}-body"}> |
16 | 20 | <table class="ghd-diff"> |
17 | 21 | <%= for chunk <- @diff.chunks do %> |
18 | 22 | <tr class="ghd-chunk-header"> |
@@ -46,31 +50,16 @@ defmodule DiffWeb.DiffComponent do |
46 | 50 | """ |
47 | 51 | end |
48 | 52 |
|
49 | | - defp file_header(diff, status) do |
50 | | - from = diff.from |
51 | | - to = diff.to |
| 53 | + defp file_header(%{from: from}, "changed"), do: from |
| 54 | + defp file_header(%{from: from, to: to}, "renamed"), do: "#{from} -> #{to}" |
| 55 | + defp file_header(%{from: from}, "removed"), do: from |
| 56 | + defp file_header(%{to: to}, "added"), do: to |
52 | 57 |
|
53 | | - case status do |
54 | | - "changed" -> from |
55 | | - "renamed" -> "#{from} -> #{to}" |
56 | | - "removed" -> from |
57 | | - "added" -> to |
58 | | - end |
59 | | - end |
60 | | - |
61 | | - defp diff_status(diff) do |
62 | | - from = diff.from |
63 | | - to = diff.to |
64 | | - |
65 | | - cond do |
66 | | - !from -> "added" |
67 | | - !to -> "removed" |
68 | | - from == to -> "changed" |
69 | | - true -> "renamed" |
70 | | - end |
71 | | - end |
| 58 | + defp diff_status(%{from: nil, to: _to}), do: "added" |
| 59 | + defp diff_status(%{from: _from, to: nil}), do: "removed" |
| 60 | + defp diff_status(%{from: from, to: to}) when from == to, do: "changed" |
| 61 | + defp diff_status(_), do: "renamed" |
72 | 62 |
|
73 | | - defp line_number(ln) when is_nil(ln), do: "" |
74 | 63 | defp line_number(ln), do: to_string(ln) |
75 | 64 |
|
76 | 65 | defp line_id(diff, line) do |
|
0 commit comments