repos / git-pr

a self-hosted git collaboration server
git clone https://github.com/picosh/git-pr.git

git-pr / tmpl / components
Eric Bower  ·  2025-12-28

range-diff.html

  1{{define "range-diff"}}
  2<div class="group">
  3  <div class="flex gap-2 collapse">
  4    <div class="group patchset-list" style="width: 350px;">
  5      <h2 class="text-xl mt">
  6        Range-diff <code>rd-{{.Patchset.ID}}</code>
  7      </h2>
  8
  9      {{range $diff := .PatchsetData.RangeDiff}}
 10        <div class="box">
 11          <dl>
 12            <dt>title</dt>
 13            <dd><a href="#{{$diff.Header.OldIdx}}-{{$diff.Header.NewIdx}}">{{$diff.Header.Title}}</a></dd>
 14 
 15            <dt>description</dt>
 16            <dd>
 17              <code class='{{if eq $diff.Type "rm"}}pill-admin{{else if eq $diff.Type "add"}}pill-success{{else if eq $diff.Type "diff"}}pill-review{{end}}'>
 18              {{if eq $diff.Header.NewSha ""}}
 19                Patch removed
 20              {{else if eq $diff.Header.OldSha ""}}
 21                Patch added
 22              {{else if $diff.Header.ContentEqual}}
 23                Patch equal
 24              {{else}}
 25                Patch changed
 26              {{end}}
 27              </code>
 28            </dd>
 29
 30            <dt>old #{{$diff.Header.OldIdx}}</dt>
 31            <dd><code>{{sha $diff.Header.OldSha}}</code></dd>
 32
 33            <dt>new #{{$diff.Header.NewIdx}}</dt>
 34            <dd><code>{{sha $diff.Header.NewSha}}</code></dd>
 35          </dl>
 36        </div>
 37      {{else}}
 38      <div class="box">
 39        No range diff found for patchset. 
 40      </div>
 41      {{end}}
 42
 43      <div><a href="#top">Back to top</a></div>
 44    </div>
 45
 46    <div class="max-w flex-1">
 47      <div class="group">
 48        {{range .PatchsetData.RangeDiff}}
 49          <div id="{{.Header.OldIdx}}-{{.Header.NewIdx}}">
 50            <div class="mb">
 51              <code class='{{if eq .Type "rm"}}pill-admin{{else if eq .Type "add"}}pill-success{{else if eq .Type "diff"}}pill-review{{end}}'>
 52                {{.Header}}
 53              </code>
 54            </div>
 55
 56            {{if or .Header.AuthorChanged .Header.TitleChanged .Header.BodyChanged}}
 57            <div class="box mb">
 58              <dl>
 59                {{if .Header.AuthorChanged}}
 60                <dt>author changed</dt>
 61                <dd>
 62                  <div><span style="color: tomato;">- {{.Header.OldAuthorName}} &lt;{{.Header.OldAuthorEmail}}&gt;</span></div>
 63                  <div><span style="color: limegreen;">+ {{.Header.NewAuthorName}} &lt;{{.Header.NewAuthorEmail}}&gt;</span></div>
 64                </dd>
 65                {{end}}
 66                {{if .Header.TitleChanged}}
 67                <dt>title changed</dt>
 68                <dd>
 69                  <div><span style="color: tomato;">- {{.Header.OldTitle}}</span></div>
 70                  <div><span style="color: limegreen;">+ {{.Header.NewTitle}}</span></div>
 71                </dd>
 72                {{end}}
 73                {{if .Header.BodyChanged}}
 74                <dt>message changed</dt>
 75                <dd>
 76                  <pre style="color: tomato; margin: 0;">- {{.Header.OldBody}}</pre>
 77                  <pre style="color: limegreen; margin: 0;">+ {{.Header.NewBody}}</pre>
 78                </dd>
 79                {{end}}
 80              </dl>
 81            </div>
 82            {{end}}
 83
 84            <div>
 85              {{- if and .Files (ne .Type "add") -}}
 86                {{range .Files}}
 87                  <div class="flex gap">
 88                    <div class="flex-1" style="width: 48%;">
 89                      <h3 class="text-md">old</h3>
 90                      <div>
 91                        {{if .OldFile}}
 92                          {{if .OldFile.OldName}}old:<code>{{.OldFile.OldName}}</code>{{end}}
 93                          {{if .OldFile.NewName}}new:<code>{{.OldFile.NewName}}</code>{{end}}
 94                        {{end}}
 95                      </div>
 96                      <pre class="m-0">{{- range .Diff -}}
 97                        {{- if eq .OuterType "delete" -}}
 98                          {{- if eq .InnerType "insert" -}}
 99                            <span style="background-color: rgba(255,99,71,0.25); color: limegreen;">{{.Text}}</span>
100                          {{- else if eq .InnerType "delete" -}}
101                            <span style="background-color: rgba(255,99,71,0.25); color: tomato;">{{.Text}}</span>
102                          {{- else -}}
103                            <span style="background-color: rgba(255,99,71,0.25);">{{.Text}}</span>
104                          {{- end -}}
105                        {{- else if eq .OuterType "insert" -}}
106                        {{- else if eq .InnerType "insert" -}}
107                          <span style="color: limegreen;">{{.Text}}</span>
108                        {{- else if eq .InnerType "delete" -}}
109                          <span style="color: tomato;">{{.Text}}</span>
110                        {{- else -}}
111                          <span>{{.Text}}</span>
112                        {{- end -}}
113                      {{- end -}}</pre>
114                    </div>
115
116                    <div class="flex-1" style="width: 48%;">
117                      <h3 class="text-md">new</h3>
118                      <div>
119                        {{if .NewFile}}
120                          {{if .NewFile.OldName}}old:<code>{{.NewFile.OldName}}</code>{{end}}
121                          {{if .NewFile.NewName}}new:<code>{{.NewFile.NewName}}</code>{{end}}
122                        {{end}}
123                      </div>
124                      <pre class="m-0">{{- range .Diff -}}
125                        {{- if eq .OuterType "insert" -}}
126                          {{- if eq .InnerType "insert" -}}
127                            <span style="background-color: rgba(50,205,50,0.25); color: limegreen;">{{.Text}}</span>
128                          {{- else if eq .InnerType "delete" -}}
129                            <span style="background-color: rgba(50,205,50,0.25); color: tomato;">{{.Text}}</span>
130                          {{- else -}}
131                            <span style="background-color: rgba(50,205,50,0.25);">{{.Text}}</span>
132                          {{- end -}}
133                        {{- else if eq .OuterType "delete" -}}
134                        {{- else if eq .InnerType "insert" -}}
135                          <span style="color: limegreen;">{{.Text}}</span>
136                        {{- else if eq .InnerType "delete" -}}
137                          <span style="color: tomato;">{{.Text}}</span>
138                        {{- else -}}
139                          <span>{{.Text}}</span>
140                        {{- end -}}
141                      {{- end -}}</pre>
142                    </div>
143                  </div>
144                {{end}}
145              {{- end -}}
146            </div>
147          </div>
148        {{- end -}}
149      </div>
150
151      <hr class="my" />
152    </div>
153  </div>
154</div>
155{{end}}