forked from tangled.org/core
Monorepo for Tangled — https://tangled.org
at interdiff 8.5 kB view raw
1{{ define "repo/fragments/interdiff" }} 2{{ $repo := index . 0 }} 3{{ $x := index . 1 }} 4{{ $diff := $x.Files }} 5 6 <section class="mt-6 p-6 border border-gray-200 dark:border-gray-700 w-full mx-auto rounded bg-white dark:bg-gray-800 drop-shadow-sm"> 7 <div class="diff-stat"> 8 <div class="flex gap-2 items-center"> 9 <strong class="text-sm uppercase dark:text-gray-200">files</strong> 10 </div> 11 <div class="overflow-x-auto"> 12 <ul class="dark:text-gray-200"> 13 {{ range $diff }} 14 <li><a href="#file-{{ .Name }}" class="dark:hover:text-gray-300">{{ .Name }}</a></li> 15 {{ end }} 16 </ul> 17 </div> 18 </div> 19 </section> 20 21 {{ $last := sub (len $diff) 1 }} 22 {{ range $idx, $hunk := $diff }} 23 {{ with $hunk }} 24 <section class="mt-6 border border-gray-200 dark:border-gray-700 w-full mx-auto rounded bg-white dark:bg-gray-800 drop-shadow-sm"> 25 <div id="file-{{ .Name }}"> 26 <div id="diff-file"> 27 <details {{ if not (.Status.IsOnlyInOne) }}open{{end}}> 28 <summary class="list-none cursor-pointer sticky top-0"> 29 <div id="diff-file-header" class="rounded cursor-pointer bg-white dark:bg-gray-800 flex justify-between"> 30 <div id="left-side-items" class="p-2 flex gap-2 items-center overflow-x-auto"> 31 <div class="flex gap-1 items-center" style="direction: ltr;"> 32 {{ $markerstyle := "diff-type p-1 mr-1 font-mono text-sm rounded select-none" }} 33 {{ if .Status.IsOk }} 34 <span class="bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300 {{ $markerstyle }}">CHANGED</span> 35 {{ else if .Status.IsUnchanged }} 36 <span class="bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300 {{ $markerstyle }}">UNCHANGED</span> 37 {{ else if .Status.IsOnlyInOne }} 38 <span class="bg-red-100 text-red-700 dark:bg-red-800/50 dark:text-red-400 {{ $markerstyle }}">REVERTED</span> 39 {{ else if .Status.IsOnlyInTwo }} 40 <span class="bg-green-100 text-green-700 dark:bg-green-800/50 dark:text-green-400 {{ $markerstyle }}">NEW</span> 41 {{ else if .Status.IsRebased }} 42 <span class="bg-amber-100 text-amber-700 dark:bg-amber-800/50 dark:text-amber-400 {{ $markerstyle }}">REBASED</span> 43 {{ else }} 44 <span class="bg-red-100 text-red-700 dark:bg-red-800/50 dark:text-red-400 {{ $markerstyle }}">ERROR</span> 45 {{ end }} 46 </div> 47 48 <div class="flex gap-2 items-center overflow-x-auto" style="direction: rtl;"> 49 <a class="dark:text-white whitespace-nowrap overflow-x-auto" href=""> 50 {{ .Name }} 51 </a> 52 </div> 53 </div> 54 55 {{ $iconstyle := "p-1 mx-1 hover:bg-gray-100 dark:hover:bg-gray-700 rounded" }} 56 <div id="right-side-items" class="p-2 flex items-center"> 57 <a title="top of file" href="#file-{{ .Name }}" class="{{ $iconstyle }}">{{ i "arrow-up-to-line" "w-4 h-4" }}</a> 58 {{ if gt $idx 0 }} 59 {{ $prev := index $diff (sub $idx 1) }} 60 <a title="previous file" href="#file-{{ $prev.Name }}" class="{{ $iconstyle }}">{{ i "arrow-up" "w-4 h-4" }}</a> 61 {{ end }} 62 63 {{ if lt $idx $last }} 64 {{ $next := index $diff (add $idx 1) }} 65 <a title="next file" href="#file-{{ $next.Name }}" class="{{ $iconstyle }}">{{ i "arrow-down" "w-4 h-4" }}</a> 66 {{ end }} 67 </div> 68 69 </div> 70 </summary> 71 72 <div class="transition-all duration-700 ease-in-out"> 73 {{ if .Status.IsUnchanged }} 74 <p class="text-center text-gray-400 dark:text-gray-500 p-4"> 75 This file has not been changed. 76 </p> 77 {{ else if .Status.IsRebased }} 78 <p class="text-center text-gray-400 dark:text-gray-500 p-4"> 79 This patch was likely rebased, as context lines do not match. 80 </p> 81 {{ else if .Status.IsError }} 82 <p class="text-center text-gray-400 dark:text-gray-500 p-4"> 83 Failed to calculate interdiff for this file. 84 </p> 85 {{ else }} 86 {{ $name := .Name }} 87 <pre class="overflow-x-auto"><div class="overflow-x-auto"><div class="min-w-full inline-block">{{- range .TextFragments -}}<div class="bg-gray-100 dark:bg-gray-700 text-gray-500 dark:text-gray-400 select-none text-center">&middot;&middot;&middot;</div> 88 {{- $oldStart := .OldPosition -}} 89 {{- $newStart := .NewPosition -}} 90 {{- $lineNrStyle := "min-w-[3.5rem] flex-shrink-0 select-none text-right bg-white dark:bg-gray-800 scroll-mt-10 target:border target:border-amber-500 target:rounded " -}} 91 {{- $linkStyle := "text-gray-400 dark:text-gray-500 hover:underline" -}} 92 {{- $lineNrSepStyle1 := "" -}} 93 {{- $lineNrSepStyle2 := "pr-2" -}} 94 {{- range .Lines -}} 95 {{- if eq .Op.String "+" -}} 96 <div class="bg-green-100 dark:bg-green-800/30 text-green-700 dark:text-green-400 flex min-w-full items-center"> 97 <div class="{{$lineNrStyle}} {{$lineNrSepStyle1}}"><span aria-hidden="true" class="invisible">{{$newStart}}</span></div> 98 <div class="{{$lineNrStyle}} {{$lineNrSepStyle2}}" id="{{$name}}-N{{$newStart}}"><a class="{{$linkStyle}}" href="#{{$name}}-N{{$newStart}}">{{ $newStart }}</a></div> 99 <div class="w-5 flex-shrink-0 select-none text-center">{{ .Op.String }}</div> 100 <div class="px-2">{{ .Line }}</div> 101 </div> 102 {{- $newStart = add64 $newStart 1 -}} 103 {{- end -}} 104 {{- if eq .Op.String "-" -}} 105 <div class="bg-red-100 dark:bg-red-800/30 text-red-700 dark:text-red-400 flex min-w-full items-center"> 106 <div class="{{$lineNrStyle}} {{$lineNrSepStyle1}}" id="{{$name}}-O{{$oldStart}}"><a class="{{$linkStyle}}" href="#{{$name}}-O{{$oldStart}}">{{ $oldStart }}</a></div> 107 <div class="{{$lineNrStyle}} {{$lineNrSepStyle2}}"><span aria-hidden="true" class="invisible">{{$oldStart}}</span></div> 108 <div class="w-5 flex-shrink-0 select-none text-center">{{ .Op.String }}</div> 109 <div class="px-2">{{ .Line }}</div> 110 </div> 111 {{- $oldStart = add64 $oldStart 1 -}} 112 {{- end -}} 113 {{- if eq .Op.String " " -}} 114 <div class="bg-white dark:bg-gray-800 text-gray-500 dark:text-gray-400 flex min-w-full items-center"> 115 <div class="{{$lineNrStyle}} {{$lineNrSepStyle1}}" id="{{$name}}-O{{$oldStart}}"><a class="{{$linkStyle}}" href="#{{$name}}-O{{$oldStart}}">{{ $oldStart }}</a></div> 116 <div class="{{$lineNrStyle}} {{$lineNrSepStyle2}}" id="{{$name}}-N{{$newStart}}"><a class="{{$linkStyle}}" href="#{{$name}}-N{{$newStart}}">{{ $newStart }}</a></div> 117 <div class="w-5 flex-shrink-0 select-none text-center">{{ .Op.String }}</div> 118 <div class="px-2">{{ .Line }}</div> 119 </div> 120 {{- $newStart = add64 $newStart 1 -}} 121 {{- $oldStart = add64 $oldStart 1 -}} 122 {{- end -}} 123 {{- end -}} 124 {{- end -}}</div></div></pre> 125 {{- end -}} 126 </div> 127 128 </details> 129 130 </div> 131 </div> 132 </section> 133 {{ end }} 134 {{ end }} 135{{ end }} 136 137{{ define "statPill" }} 138 <div class="flex items-center font-mono text-sm"> 139 {{ if and .Insertions .Deletions }} 140 <span class="rounded-l p-1 select-none bg-green-100 text-green-700 dark:bg-green-800/50 dark:text-green-400">+{{ .Insertions }}</span> 141 <span class="rounded-r p-1 select-none bg-red-100 text-red-700 dark:bg-red-800/50 dark:text-red-400">-{{ .Deletions }}</span> 142 {{ else if .Insertions }} 143 <span class="rounded p-1 select-none bg-green-100 text-green-700 dark:bg-green-800/50 dark:text-green-400">+{{ .Insertions }}</span> 144 {{ else if .Deletions }} 145 <span class="rounded p-1 select-none bg-red-100 text-red-700 dark:bg-red-800/50 dark:text-red-400">-{{ .Deletions }}</span> 146 {{ end }} 147 </div> 148{{ end }}