forked from tangled.org/core
Monorepo for Tangled — https://tangled.org
1{{ define "repo/fragments/addLabelModal" }} 2 {{ $root := .root }} 3 {{ $subject := .subject }} 4 {{ $state := .state }} 5 {{ with $root }} 6 <form 7 hx-put="/{{ .RepoInfo.FullName }}/labels/perform" 8 hx-on::after-request="this.reset()" 9 hx-indicator="#spinner" 10 hx-swap="none" 11 class="flex flex-col gap-4" 12 > 13 <p class="text-gray-500 dark:text-gray-400">Add, remove or update labels.</p> 14 15 <input class="hidden" name="repo" value="{{ .RepoInfo.RepoAt.String }}"> 16 <input class="hidden" name="subject" value="{{ $subject }}"> 17 18 <div class="flex flex-col gap-2"> 19 {{ $id := 0 }} 20 {{ range $k, $valset := $state.Inner }} 21 {{ $d := index $root.LabelDefs $k }} 22 {{ range $v, $s := $valset }} 23 {{ template "labelCheckbox" (dict "def" $d "key" $k "val" $v "id" $id "isChecked" true) }} 24 {{ $id = add $id 1 }} 25 {{ end }} 26 {{ end }} 27 28 {{ range $k, $d := $root.LabelDefs }} 29 {{ if not ($state.ContainsLabel $k) }} 30 {{ template "labelCheckbox" (dict "def" $d "key" $k "val" "" "id" $id "isChecked" false) }} 31 {{ $id = add $id 1 }} 32 {{ end }} 33 {{ else }} 34 <span> 35 No labels defined yet. You can define custom labels in <a class="underline" href="/{{ .RepoInfo.FullName }}/settings">settings</a>. 36 </span> 37 {{ end }} 38 </div> 39 40 <div class="flex gap-2 pt-2"> 41 <button 42 type="button" 43 popovertarget="add-label-modal" 44 popovertargetaction="hide" 45 class="btn w-1/2 flex items-center gap-2 text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300" 46 > 47 {{ i "x" "size-4" }} cancel 48 </button> 49 <button type="submit" class="btn w-1/2 flex items-center"> 50 <span class="inline-flex gap-2 items-center">{{ i "check" "size-4" }} save</span> 51 <span id="spinner" class="group"> 52 {{ i "loader-circle" "ml-2 w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 53 </span> 54 </button> 55 </div> 56 <div id="add-label-error" class="text-red-500 dark:text-red-400"></div> 57 </form> 58 {{ end }} 59{{ end }} 60 61{{ define "labelCheckbox" }} 62 {{ $key := .key }} 63 {{ $val := .val }} 64 {{ $def := .def }} 65 {{ $id := .id }} 66 {{ $isChecked := .isChecked }} 67 <div class="grid grid-cols-[auto_1fr_50%] gap-2 items-center cursor-pointer"> 68 <input type="checkbox" id="op-{{$id}}" name="op-{{$id}}" value="add" {{if $isChecked}}checked{{end}} class="peer"> 69 <label for="op-{{$id}}" class="flex items-center gap-2 text-base">{{ template "labels/fragments/labelDef" $def }}</label> 70 <div class="w-full hidden peer-checked:block">{{ template "valueTypeInput" (dict "valueType" $def.ValueType "value" $val "key" $key) }}</div> 71 <input type="hidden" name="operand-key" value="{{ $key }}"> 72 </div> 73{{ end }} 74 75{{ define "valueTypeInput" }} 76 {{ $valueType := .valueType }} 77 {{ $value := .value }} 78 {{ $key := .key }} 79 80 {{ if $valueType.IsEnumType }} 81 {{ template "enumTypeInput" $ }} 82 {{ else if $valueType.IsBool }} 83 {{ template "boolTypeInput" $ }} 84 {{ else if $valueType.IsInt }} 85 {{ template "intTypeInput" $ }} 86 {{ else if $valueType.IsString }} 87 {{ template "stringTypeInput" $ }} 88 {{ else if $valueType.IsNull }} 89 {{ template "nullTypeInput" $ }} 90 {{ end }} 91{{ end }} 92 93{{ define "enumTypeInput" }} 94 {{ $valueType := .valueType }} 95 {{ $value := .value }} 96 <select name="operand-val" class="w-full p-1 rounded border border-gray-300 bg-white dark:bg-gray-800 dark:text-white dark:border-gray-600"> 97 {{ range $valueType.Enum }} 98 <option value="{{.}}" {{ if eq $value . }} selected {{ end }}>{{.}}</option> 99 {{ end }} 100 </select> 101{{ end }} 102 103{{ define "boolTypeInput" }} 104 {{ $value := .value }} 105 <select name="operand-val" class="w-full p-1 rounded border border-gray-300 bg-white dark:bg-gray-800 dark:text-white dark:border-gray-600"> 106 <option value="true" {{ if $value }} selected {{ end }}>true</option> 107 <option value="false" {{ if not $value }} selected {{ end }}>false</option> 108 </select> 109{{ end }} 110 111{{ define "intTypeInput" }} 112 {{ $value := .value }} 113 <input class="p-1 w-full" type="number" name="operand-val" value="{{$value}}" max="100"> 114{{ end }} 115 116{{ define "stringTypeInput" }} 117 {{ $valueType := .valueType }} 118 {{ $value := .value }} 119 {{ if $valueType.IsDidFormat }} 120 {{ $value = resolve .value }} 121 {{ end }} 122 <input class="p-1 w-full" type="text" name="operand-val" value="{{$value}}"> 123{{ end }} 124 125{{ define "nullTypeInput" }} 126 <input class="p-1" type="hidden" name="operand-val" value="null"> 127{{ end }}