This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

core / appview / pages / templates / repo / pulls / fragments / pullStepDetails.html
5.7 kB 143 lines
1{{ define "repo/pulls/fragments/pullStepDetails" }} 2 {{ $hasSidePanel := and .LabelDefs .RepoInfo.Roles.IsPushAllowed }} 3 {{ $previewUrl := printf "/%s/pulls/new/preview" .RepoInfo.FullName }} 4 {{ $labelCtx := dict "Defs" .LabelDefs "State" .LabelState "RepoInfo" .RepoInfo "Subject" "" "LoggedInUser" .LoggedInUser }} 5 6 <section class="flex flex-col md:flex-row gap-6"> 7 <div class="flex-1 min-w-0 flex flex-col gap-4"> 8 {{ template "pullStepDetailsSingle" (dict "Root" . "PreviewUrl" $previewUrl) }} 9 {{ template "pullSubmitRow" . }} 10 </div> 11 12 {{ if $hasSidePanel }} 13 <aside class="w-full md:w-72 md:flex-shrink-0 flex flex-col gap-6"> 14 {{ template "editBasicLabels" $labelCtx }} 15 {{ template "editKvLabels" $labelCtx }} 16 </aside> 17 {{ end }} 18 </section> 19 20 {{ template "markdownEditorScript" }} 21{{ end }} 22 23{{ define "pullStepDetailsSingle" }} 24 {{ $root := .Root }} 25 {{ $previewUrl := .PreviewUrl }} 26 <div class="flex flex-col gap-1"> 27 <label for="title" class="text-xs tracking-wide text-gray-800 dark:text-gray-200">Title</label> 28 <input 29 type="text" 30 name="title" 31 id="title" 32 value="{{ $root.Title }}" 33 class="w-full dark:bg-gray-800 dark:text-white dark:border-gray-700" 34 placeholder="One-line summary of your change." 35 /> 36 </div> 37 38 {{ template "markdownEditor" (dict 39 "Id" "pull-body" 40 "Name" "body" 41 "Value" $root.Body 42 "Rows" 6 43 "Placeholder" "Describe your change. Markdown is supported." 44 "PreviewUrl" $previewUrl 45 ) }} 46{{ end }} 47 48{{ define "markdownEditor" }} 49 {{ $id := .Id }} 50 {{ $name := .Name }} 51 {{ $value := .Value }} 52 {{ $rows := .Rows }} 53 {{ $placeholder := .Placeholder }} 54 {{ $previewUrl := .PreviewUrl }} 55 <div class="flex flex-col gap-2" data-md-editor="{{ $id }}"> 56 <div class="btn-group self-start text-gray-600 dark:text-gray-300"> 57 <button type="button" data-md-mode="write" 58 class="btn-group-item active group"> 59 {{ i "pencil" "w-3.5 h-3.5" }} 60 Write 61 </button> 62 <button type="button" data-md-mode="preview" 63 hx-post="{{ $previewUrl }}" 64 hx-vals='js:{body: document.querySelector("[data-md-editor=\"{{ $id }}\"] textarea").value}' 65 hx-params="body" 66 hx-target="[data-md-editor='{{ $id }}'] [data-md-preview]" 67 hx-swap="innerHTML" 68 hx-indicator="this" 69 class="btn-group-item group"> 70 {{ i "eye" "w-3.5 h-3.5 inline group-[.htmx-request]:hidden" }} 71 {{ i "loader-circle" "w-3.5 h-3.5 animate-spin hidden group-[.htmx-request]:inline" }} 72 Preview 73 </button> 74 </div> 75 <div data-md-panel="write"> 76 <textarea 77 id="{{ $id }}" 78 name="{{ $name }}" 79 rows="{{ $rows }}" 80 class="w-full resize-y dark:bg-gray-800 dark:text-white dark:border-gray-700" 81 placeholder="{{ $placeholder }}" 82 >{{ $value }}</textarea> 83 </div> 84 <div data-md-panel="preview" class="hidden"> 85 <div data-md-preview class="min-h-[6rem] p-3 border border-gray-200 dark:border-gray-700 rounded bg-gray-50 dark:bg-gray-900/30"> 86 <span class="text-gray-400 dark:text-gray-500 italic">Loading preview...</span> 87 </div> 88 </div> 89 </div> 90{{ end }} 91 92{{ define "pullSubmitRow" }} 93 <div class="flex items-center justify-end gap-4 mt-auto"> 94 {{ if and .MergeCheck .MergeCheck.IsConflicted }} 95 <div class="flex items-center gap-2 text-sm"> 96 <span class="inline-flex items-center gap-1 text-red-600 dark:text-red-400"> 97 {{ i "x" "w-4 h-4" }} 98 Can't automatically merge 99 </span> 100 <span class="text-gray-500 dark:text-gray-400">You can still create the pull request</span> 101 </div> 102 {{ else if and .MergeCheck .MergeCheck.Error }} 103 <div class="flex items-center gap-2 text-sm text-red-600 dark:text-red-400"> 104 {{ i "triangle-alert" "w-4 h-4" }} 105 Merge check failed 106 </div> 107 {{ end }} 108 109 <button 110 type="submit" 111 class="btn-create flex items-center gap-2" 112 hx-indicator="#create-pull-spinner" 113 > 114 {{ i "git-pull-request-create" "w-4 h-4" }} 115 Create pull request 116 <span id="create-pull-spinner" class="group"> 117 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 118 </span> 119 </button> 120 </div> 121{{ end }} 122 123{{ define "markdownEditorScript" }} 124 <script> 125 (() => { 126 if (window.__mdEditorWired) return; 127 window.__mdEditorWired = true; 128 document.body.addEventListener('click', (e) => { 129 const btn = e.target.closest('[data-md-mode]'); 130 if (!btn) return; 131 const editor = btn.closest('[data-md-editor]'); 132 if (!editor) return; 133 const mode = btn.dataset.mdMode; 134 editor.querySelectorAll('[data-md-panel]').forEach(p => { 135 p.classList.toggle('hidden', p.dataset.mdPanel !== mode); 136 }); 137 editor.querySelectorAll('[data-md-mode]').forEach(b => { 138 b.classList.toggle('active', b === btn); 139 }); 140 }); 141 })(); 142 </script> 143{{ end }}