forked from tangled.org/core
this repo has no description

appview: pages/templates/repo/pulls: dedupe pull header and display commits

Changed files
+144 -150
appview
pages
templates
repo
+70
appview/pages/templates/repo/pulls/fragments/pullHeader.html
···
···
+
{{ define "repo/pulls/fragments/pullHeader" }}
+
<header class="pb-4">
+
<h1 class="text-2xl dark:text-white">
+
{{ .Pull.Title }}
+
<span class="text-gray-500 dark:text-gray-400">#{{ .Pull.PullId }}</span>
+
</h1>
+
</header>
+
+
{{ $bgColor := "bg-gray-800 dark:bg-gray-700" }}
+
{{ $icon := "ban" }}
+
+
{{ if .Pull.State.IsOpen }}
+
{{ $bgColor = "bg-green-600 dark:bg-green-700" }}
+
{{ $icon = "git-pull-request" }}
+
{{ else if .Pull.State.IsMerged }}
+
{{ $bgColor = "bg-purple-600 dark:bg-purple-700" }}
+
{{ $icon = "git-merge" }}
+
{{ end }}
+
+
<section class="mt-2">
+
<div class="flex items-center gap-2">
+
<div
+
id="state"
+
class="inline-flex items-center rounded px-3 py-1 {{ $bgColor }}"
+
>
+
{{ i $icon "w-4 h-4 mr-1.5 text-white" }}
+
<span class="text-white">{{ .Pull.State.String }}</span>
+
</div>
+
<span class="text-gray-500 dark:text-gray-400 text-sm">
+
opened by
+
{{ $owner := index $.DidHandleMap .Pull.OwnerDid }}
+
<a href="/{{ $owner }}" class="no-underline hover:underline"
+
>{{ $owner }}</a
+
>
+
<span class="select-none before:content-['\00B7']"></span>
+
<time>{{ .Pull.Created | timeFmt }}</time>
+
<span class="select-none before:content-['\00B7']"></span>
+
<span>
+
targeting
+
<span class="text-xs rounded bg-gray-100 dark:bg-gray-700 text-black dark:text-white font-mono px-2 mx-1/2 inline-flex items-center">
+
<a href="/{{ .RepoInfo.FullName }}/tree/{{ .Pull.TargetBranch }}" class="no-underline hover:underline">{{ .Pull.TargetBranch }}</a>
+
</span>
+
</span>
+
{{ if not .Pull.IsPatchBased }}
+
<span>from
+
{{ if not .Pull.IsBranchBased }}
+
<a href="/{{ $owner }}/{{ .PullSourceRepo.Name }}" class="no-underline hover:underline">{{ $owner }}/{{ .PullSourceRepo.Name }}</a>
+
{{ end }}
+
+
{{ $fullRepo := .RepoInfo.FullName }}
+
{{ if not .Pull.IsBranchBased }}
+
{{ $fullRepo = printf "%s/%s" $owner .PullSourceRepo.Name }}
+
{{ end }}
+
<span class="text-xs rounded bg-gray-100 dark:bg-gray-700 text-black dark:text-white font-mono px-2 mx-1/2 inline-flex items-center">
+
<a href="/{{ $fullRepo }}/tree/{{ .Pull.PullSource.Branch }}" class="no-underline hover:underline">{{ .Pull.PullSource.Branch }}</a>
+
</span>
+
</span>
+
{{ end }}
+
</span>
+
</div>
+
+
{{ if .Pull.Body }}
+
<article id="body" class="mt-8 prose dark:prose-invert">
+
{{ .Pull.Body | markdown }}
+
</article>
+
{{ end }}
+
</section>
+
+
+
{{ end }}
+21 -71
appview/pages/templates/repo/pulls/patch.html
···
{{ end }}
{{ define "content" }}
-
{{ $stat := .Diff.Stat }}
-
<div class="rounded drop-shadow-sm bg-white dark:bg-gray-800 py-4 px-6 dark:text-white">
-
<header class="pb-2">
-
<div class="flex gap-3 items-center mb-3">
-
<a href="/{{ .RepoInfo.FullName }}/pulls/{{ .Pull.PullId }}/" class="flex items-center gap-2 font-medium">
-
{{ i "arrow-left" "w-5 h-5" }}
-
back
-
</a>
-
<span class="select-none before:content-['\00B7']"></span>
-
round #{{ .Round }}
-
<span class="select-none before:content-['\00B7']"></span>
-
<a href="/{{ .RepoInfo.FullName }}/pulls/{{ .Pull.PullId }}/round/{{ .Round }}.patch">
-
view raw
-
</a>
-
</div>
-
<div class="border-t border-gray-200 dark:border-gray-700 my-2"></div>
-
<h1 class="text-2xl mt-3">
-
{{ .Pull.Title }}
-
<span class="text-gray-500 dark:text-gray-400">#{{ .Pull.PullId }}</span>
-
</h1>
-
</header>
-
-
{{ $bgColor := "bg-gray-800" }}
-
{{ $icon := "ban" }}
-
-
{{ if .Pull.State.IsOpen }}
-
{{ $bgColor = "bg-green-600" }}
-
{{ $icon = "git-pull-request" }}
-
{{ else if .Pull.State.IsMerged }}
-
{{ $bgColor = "bg-purple-600" }}
-
{{ $icon = "git-merge" }}
-
{{ end }}
-
-
<section>
-
<div class="flex items-center gap-2">
-
<div
-
id="state"
-
class="inline-flex items-center rounded px-3 py-1 {{ $bgColor }}"
-
>
-
{{ i $icon "w-4 h-4 mr-1.5 text-white" }}
-
<span class="text-white">{{ .Pull.State.String }}</span>
-
</div>
-
<span class="text-gray-500 dark:text-gray-400 text-sm">
-
opened by
-
{{ $owner := index $.DidHandleMap .Pull.OwnerDid }}
-
<a href="/{{ $owner }}" class="no-underline hover:underline"
-
>{{ $owner }}</a
-
>
-
<span class="select-none before:content-['\00B7']"></span>
-
<time>{{ .Pull.Created | timeFmt }}</time>
-
<span class="select-none before:content-['\00B7']"></span>
-
<span>targeting branch
-
<span class="text-xs rounded bg-gray-100 dark:bg-gray-700 text-black dark:text-white font-mono px-2 mx-1/2 inline-flex items-center">
-
{{ .Pull.TargetBranch }}
-
</span>
-
</span>
-
</span>
-
</div>
-
-
{{ if .Pull.Body }}
-
<article id="body" class="mt-2 prose dark:prose-invert">
-
{{ .Pull.Body | markdown }}
-
</article>
-
{{ end }}
-
</section>
-
-
</div>
-
-
<section>
-
{{ template "repo/fragments/diff" (list .RepoInfo.FullName .Diff) }}
-
</section>
{{ end }}
···
{{ end }}
{{ define "content" }}
+
<section>
+
<section
+
class="bg-white dark:bg-gray-800 p-6 rounded relative z-20 w-full mx-auto drop-shadow-sm dark:text-white"
+
>
+
<div class="flex gap-3 items-center mb-3">
+
<a href="/{{ .RepoInfo.FullName }}/pulls/{{ .Pull.PullId }}/" class="flex items-center gap-2 font-medium">
+
{{ i "arrow-left" "w-5 h-5" }}
+
back
+
</a>
+
<span class="select-none before:content-['\00B7']"></span>
+
round<span class="flex items-center">{{ i "hash" "w-4 h-4" }}{{ .Round }}</span>
+
<span class="select-none before:content-['\00B7']"></span>
+
<a href="/{{ .RepoInfo.FullName }}/pulls/{{ .Pull.PullId }}/round/{{ .Round }}.patch">
+
view raw
+
</a>
+
</div>
+
<div class="border-t border-gray-200 dark:border-gray-700 my-2"></div>
+
{{ template "repo/pulls/fragments/pullHeader" . }}
+
</section>
+
{{ template "repo/fragments/diff" (list .RepoInfo.FullName .Diff) }}
+
</section>
{{ end }}
+53 -79
appview/pages/templates/repo/pulls/pull.html
···
{{ end }}
{{ define "repoContent" }}
-
<header class="pb-4">
-
<h1 class="text-2xl dark:text-white">
-
{{ .Pull.Title }}
-
<span class="text-gray-500 dark:text-gray-400">#{{ .Pull.PullId }}</span>
-
</h1>
-
</header>
-
-
{{ $bgColor := "bg-gray-800 dark:bg-gray-700" }}
-
{{ $icon := "ban" }}
-
-
{{ if .Pull.State.IsOpen }}
-
{{ $bgColor = "bg-green-600 dark:bg-green-700" }}
-
{{ $icon = "git-pull-request" }}
-
{{ else if .Pull.State.IsMerged }}
-
{{ $bgColor = "bg-purple-600 dark:bg-purple-700" }}
-
{{ $icon = "git-merge" }}
-
{{ end }}
-
-
<section class="mt-2">
-
<div class="flex items-center gap-2">
-
<div
-
id="state"
-
class="inline-flex items-center rounded px-3 py-1 {{ $bgColor }}"
-
>
-
{{ i $icon "w-4 h-4 mr-1.5 text-white" }}
-
<span class="text-white">{{ .Pull.State.String }}</span>
-
</div>
-
<span class="text-gray-500 dark:text-gray-400 text-sm">
-
opened by
-
{{ $owner := index $.DidHandleMap .Pull.OwnerDid }}
-
<a href="/{{ $owner }}" class="no-underline hover:underline"
-
>{{ $owner }}</a
-
>
-
<span class="select-none before:content-['\00B7']"></span>
-
<time>{{ .Pull.Created | timeFmt }}</time>
-
<span class="select-none before:content-['\00B7']"></span>
-
<span>
-
targeting
-
<span class="text-xs rounded bg-gray-100 dark:bg-gray-700 text-black dark:text-white font-mono px-2 mx-1/2 inline-flex items-center">
-
<a href="/{{ .RepoInfo.FullName }}/tree/{{ .Pull.TargetBranch }}" class="no-underline hover:underline">{{ .Pull.TargetBranch }}</a>
-
</span>
-
</span>
-
{{ if not .Pull.IsPatchBased }}
-
<span>from
-
{{ if not .Pull.IsBranchBased }}
-
<a href="/{{ $owner }}/{{ .PullSourceRepo.Name }}" class="no-underline hover:underline">{{ $owner }}/{{ .PullSourceRepo.Name }}</a>
-
{{ end }}
-
{{ $fullRepo := .RepoInfo.FullName }}
-
{{ if not .Pull.IsBranchBased }}
-
{{ $fullRepo = printf "%s/%s" $owner .PullSourceRepo.Name }}
-
{{ end }}
-
<span class="text-xs rounded bg-gray-100 dark:bg-gray-700 text-black dark:text-white font-mono px-2 mx-1/2 inline-flex items-center">
-
<a href="/{{ $fullRepo }}/tree/{{ .Pull.PullSource.Branch }}" class="no-underline hover:underline">{{ .Pull.PullSource.Branch }}</a>
-
</span>
-
</span>
-
{{ end }}
-
</span>
-
</div>
-
{{ if .Pull.Body }}
-
<article id="body" class="mt-8 prose dark:prose-invert">
-
{{ .Pull.Body | markdown }}
-
</article>
-
{{ end }}
-
</section>
-
-
{{ end }}
{{ define "repoAfter" }}
<section id="submissions" class="mt-4">
···
{{ $targetBranch := .Pull.TargetBranch }}
{{ $repoName := .RepoInfo.FullName }}
{{ range $idx, $item := .Pull.Submissions }}
-
{{ $diff := $item.AsNiceDiff $targetBranch }}
{{ with $item }}
<details {{ if eq $idx $lastIdx }}open{{ end }}>
<summary id="round-#{{ .RoundNumber }}" class="list-none cursor-pointer">
<div class="flex flex-wrap gap-2 items-center">
<!-- round number -->
<div class="rounded bg-white dark:bg-gray-800 drop-shadow-sm px-3 py-2 dark:text-white">
-
#{{ .RoundNumber }}
</div>
<!-- round summary -->
<div class="rounded drop-shadow-sm bg-white dark:bg-gray-800 p-2 text-gray-500 dark:text-gray-400">
···
{{ len .Comments }} comment{{$s}}
</span>
</div>
<!-- view patch -->
<a class="btn flex items-center gap-2 no-underline hover:no-underline p-2"
hx-boost="true"
href="/{{ $.RepoInfo.FullName }}/pulls/{{ $.Pull.PullId }}/round/{{.RoundNumber}}">
{{ i "file-diff" "w-4 h-4" }} <span class="hidden md:inline">view patch</span>
</a>
</div>
</summary>
<div class="md:pl-12 flex flex-col gap-2 mt-2 relative">
-
{{ range .Comments }}
-
<div id="comment-{{.ID}}" class="bg-white dark:bg-gray-800 rounded drop-shadow-sm py-2 px-4 relative w-full md:max-w-3/5 md:w-fit">
<div class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div>
<div class="text-sm text-gray-500 dark:text-gray-400">
-
{{ $owner := index $.DidHandleMap .OwnerDid }}
<a href="/{{$owner}}">{{$owner}}</a>
<span class="before:content-['·']"></span>
-
<a class="text-gray-500 dark:text-gray-400 hover:text-gray-500 dark:hover:text-gray-300" href="#comment-{{.ID}}"><time>{{ .Created | shortTimeFmt }}</time></a>
</div>
<div class="prose dark:prose-invert">
-
{{ .Body | markdown }}
</div>
</div>
{{ end }}
···
{{ define "mergeStatus" }}
{{ if .Pull.State.IsClosed }}
<div class="bg-gray-50 dark:bg-gray-700 border border-black dark:border-gray-500 rounded drop-shadow-sm px-6 py-2 relative w-fit">
-
<div class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div>
<div class="flex items-center gap-2 text-black dark:text-white">
{{ i "ban" "w-4 h-4" }}
<span class="font-medium">closed without merging</span
···
</div>
{{ else if .Pull.State.IsMerged }}
<div class="bg-purple-50 dark:bg-purple-900 border border-purple-500 rounded drop-shadow-sm px-6 py-2 relative w-fit">
-
<div class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div>
<div class="flex items-center gap-2 text-purple-500 dark:text-purple-300">
{{ i "git-merge" "w-4 h-4" }}
<span class="font-medium">pull request successfully merged</span
···
</div>
{{ else if and .MergeCheck .MergeCheck.Error }}
<div class="bg-red-50 dark:bg-red-900 border border-red-500 rounded drop-shadow-sm px-6 py-2 relative w-fit">
-
<div class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div>
<div class="flex items-center gap-2 text-red-500 dark:text-red-300">
{{ i "triangle-alert" "w-4 h-4" }}
<span class="font-medium">{{ .MergeCheck.Error }}</span>
···
</div>
{{ else if and .MergeCheck .MergeCheck.IsConflicted }}
<div class="bg-red-50 dark:bg-red-900 border border-red-500 rounded drop-shadow-sm px-6 py-2 relative w-fit">
-
<div class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div>
<div class="flex flex-col gap-2 text-red-500 dark:text-red-300">
<div class="flex items-center gap-2">
{{ i "triangle-alert" "w-4 h-4" }}
···
</div>
{{ else if .MergeCheck }}
<div class="bg-green-50 dark:bg-green-900 border border-green-500 rounded drop-shadow-sm px-6 py-2 relative w-fit">
-
<div class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div>
<div class="flex items-center gap-2 text-green-500 dark:text-green-300">
{{ i "circle-check-big" "w-4 h-4" }}
<span class="font-medium">no conflicts, ready to merge</span>
···
{{ define "resubmitStatus" }}
{{ if .ResubmitCheck.Yes }}
<div class="bg-amber-50 dark:bg-amber-900 border border-amber-500 rounded drop-shadow-sm px-6 py-2 relative w-fit">
-
<div class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div>
<div class="flex items-center gap-2 text-amber-500 dark:text-amber-300">
{{ i "triangle-alert" "w-4 h-4" }}
<span class="font-medium">this branch has been updated, consider resubmitting</span>
···
{{ end }}
{{ define "repoContent" }}
+
{{ template "repo/pulls/fragments/pullHeader" . }}
+
{{ end }}
{{ define "repoAfter" }}
<section id="submissions" class="mt-4">
···
{{ $targetBranch := .Pull.TargetBranch }}
{{ $repoName := .RepoInfo.FullName }}
{{ range $idx, $item := .Pull.Submissions }}
{{ with $item }}
<details {{ if eq $idx $lastIdx }}open{{ end }}>
<summary id="round-#{{ .RoundNumber }}" class="list-none cursor-pointer">
<div class="flex flex-wrap gap-2 items-center">
<!-- round number -->
<div class="rounded bg-white dark:bg-gray-800 drop-shadow-sm px-3 py-2 dark:text-white">
+
<span class="flex items-center">{{ i "hash" "w-4 h-4" }}{{ .RoundNumber }}</span>
</div>
<!-- round summary -->
<div class="rounded drop-shadow-sm bg-white dark:bg-gray-800 p-2 text-gray-500 dark:text-gray-400">
···
{{ len .Comments }} comment{{$s}}
</span>
</div>
+
+
{{ if $.Pull.IsPatchBased }}
<!-- view patch -->
<a class="btn flex items-center gap-2 no-underline hover:no-underline p-2"
hx-boost="true"
href="/{{ $.RepoInfo.FullName }}/pulls/{{ $.Pull.PullId }}/round/{{.RoundNumber}}">
{{ i "file-diff" "w-4 h-4" }} <span class="hidden md:inline">view patch</span>
</a>
+
{{ end }}
</div>
</summary>
+
+
{{ if .IsFormatPatch }}
+
<div class="rounded ml-12 drop-shadow-sm bg-white dark:bg-gray-800 dark:text-white w-fit md:max-w-3/5 flex flex-col gap-2 mt-2 relative">
+
{{ $patches := .AsFormatPatch }}
+
{{ range $patches }}
+
<div id="commit-{{.SHA}}" class="py-2 px-4 relative w-full md:max-w-3/5 md:w-fit flex flex-col">
+
<div class="flex items-center justify-between gap-2">
+
{{ i "git-commit-horizontal" "w-4 h-4 mr-1.5" }}
+
<span>{{ .Title }}</span>
+
{{ if gt (len .Body) 0 }}
+
<button
+
class="py-1/2 px-1 mx-2 bg-gray-200 hover:bg-gray-400 rounded dark:bg-gray-700 dark:hover:bg-gray-600"
+
hx-on:click="document.getElementById('body-{{.SHA}}').classList.toggle('hidden')"
+
>
+
{{ i "ellipsis" "w-3 h-3" }}
+
</button>
+
{{ end }}
+
<div class="text-sm text-gray-500 dark:text-gray-400">
+
{{ if not $.Pull.IsPatchBased }}
+
{{ $fullRepo := $.RepoInfo.FullName }}
+
{{ if not $.Pull.IsBranchBased }}
+
{{ $fullRepo = printf "%s/%s" $owner $.PullSourceRepo.Name }}
+
{{ end }}
+
<a href="/{{ $fullRepo }}/commit/{{ .SHA }}" class="font-mono">{{ slice .SHA 0 8 }}</a>
+
{{ else }}
+
<span class="font-mono">{{ slice .SHA 0 8 }}</span>
+
{{ end }}
+
</div>
+
</div>
+
{{ if gt (len .Body) 0 }}
+
<p id="body-{{.SHA}}" class="hidden mt-1 text-sm pb-2 dark:text-gray-300">
+
{{ nl2br .Body }}
+
</p>
+
{{ end }}
+
</div>
+
{{ end }}
+
</div>
+
{{ end }}
+
+
<div class="md:pl-12 flex flex-col gap-2 mt-2 relative">
+
{{ range $cidx, $c := .Comments }}
+
<div id="comment-{{$c.ID}}" class="bg-white dark:bg-gray-800 rounded drop-shadow-sm py-2 px-4 relative w-full md:max-w-3/5 md:w-fit">
+
{{ if gt $cidx 0 }}
<div class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div>
+
{{ end }}
<div class="text-sm text-gray-500 dark:text-gray-400">
+
{{ $owner := index $.DidHandleMap $c.OwnerDid }}
<a href="/{{$owner}}">{{$owner}}</a>
<span class="before:content-['·']"></span>
+
<a class="text-gray-500 dark:text-gray-400 hover:text-gray-500 dark:hover:text-gray-300" href="#comment-{{.ID}}"><time>{{ $c.Created | shortTimeFmt }}</time></a>
</div>
<div class="prose dark:prose-invert">
+
{{ $c.Body | markdown }}
</div>
</div>
{{ end }}
···
{{ define "mergeStatus" }}
{{ if .Pull.State.IsClosed }}
<div class="bg-gray-50 dark:bg-gray-700 border border-black dark:border-gray-500 rounded drop-shadow-sm px-6 py-2 relative w-fit">
<div class="flex items-center gap-2 text-black dark:text-white">
{{ i "ban" "w-4 h-4" }}
<span class="font-medium">closed without merging</span
···
</div>
{{ else if .Pull.State.IsMerged }}
<div class="bg-purple-50 dark:bg-purple-900 border border-purple-500 rounded drop-shadow-sm px-6 py-2 relative w-fit">
<div class="flex items-center gap-2 text-purple-500 dark:text-purple-300">
{{ i "git-merge" "w-4 h-4" }}
<span class="font-medium">pull request successfully merged</span
···
</div>
{{ else if and .MergeCheck .MergeCheck.Error }}
<div class="bg-red-50 dark:bg-red-900 border border-red-500 rounded drop-shadow-sm px-6 py-2 relative w-fit">
<div class="flex items-center gap-2 text-red-500 dark:text-red-300">
{{ i "triangle-alert" "w-4 h-4" }}
<span class="font-medium">{{ .MergeCheck.Error }}</span>
···
</div>
{{ else if and .MergeCheck .MergeCheck.IsConflicted }}
<div class="bg-red-50 dark:bg-red-900 border border-red-500 rounded drop-shadow-sm px-6 py-2 relative w-fit">
<div class="flex flex-col gap-2 text-red-500 dark:text-red-300">
<div class="flex items-center gap-2">
{{ i "triangle-alert" "w-4 h-4" }}
···
</div>
{{ else if .MergeCheck }}
<div class="bg-green-50 dark:bg-green-900 border border-green-500 rounded drop-shadow-sm px-6 py-2 relative w-fit">
<div class="flex items-center gap-2 text-green-500 dark:text-green-300">
{{ i "circle-check-big" "w-4 h-4" }}
<span class="font-medium">no conflicts, ready to merge</span>
···
{{ define "resubmitStatus" }}
{{ if .ResubmitCheck.Yes }}
<div class="bg-amber-50 dark:bg-amber-900 border border-amber-500 rounded drop-shadow-sm px-6 py-2 relative w-fit">
<div class="flex items-center gap-2 text-amber-500 dark:text-amber-300">
{{ i "triangle-alert" "w-4 h-4" }}
<span class="font-medium">this branch has been updated, consider resubmitting</span>