this repo has no description
1{{ define "title" }}good first issues{{ end }}
2
3{{ define "extrameta" }}
4 <meta property="og:title" content="good first issues · tangled" />
5 <meta property="og:type" content="object" />
6 <meta property="og:url" content="https://tangled.org/goodfirstissues" />
7 <meta property="og:description" content="Find good first issues to contribute to open source projects" />
8{{ end }}
9
10{{ define "content" }}
11<div class="grid grid-cols-10">
12 <header class="col-span-full md:col-span-10 px-6 py-2 mb-4">
13 <h1 class="text-2xl font-bold dark:text-white mb-1">Good First Issues</h1>
14 <p class="text-gray-600 dark:text-gray-400 mb-2">
15 Find beginner-friendly issues across all repositories to get started with open source contributions.
16 </p>
17 </header>
18
19 <div class="col-span-full md:col-span-10 space-y-6">
20 {{ if eq (len .RepoGroups) 0 }}
21 <div class="bg-white dark:bg-gray-800 drop-shadow-sm rounded p-6 md:px-10">
22 <div class="text-center py-16">
23 <div class="text-gray-500 dark:text-gray-400 mb-4">
24 {{ i "circle-dot" "w-16 h-16 mx-auto" }}
25 </div>
26 <h3 class="text-xl font-medium text-gray-900 dark:text-white mb-2">No good first issues available</h3>
27 <p class="text-gray-600 dark:text-gray-400 mb-3 max-w-md mx-auto">
28 There are currently no open issues labeled as "good-first-issue" across all repositories.
29 </p>
30 <p class="text-gray-500 dark:text-gray-500 text-sm max-w-md mx-auto">
31 Repository maintainers can add the "good-first-issue" label to beginner-friendly issues to help newcomers get started.
32 </p>
33 </div>
34 </div>
35 {{ else }}
36 {{ range .RepoGroups }}
37 <div class="mb-4 gap-1 flex flex-col drop-shadow-sm rounded bg-white dark:bg-gray-800">
38 <div class="flex px-6 pt-4 pb-2 flex-row gap-1">
39 <div class="font-medium dark:text-white flex items-center justify-between">
40 <div class="flex items-center min-w-0 flex-1 mr-2">
41 {{ if .Repo.Source }}
42 {{ i "git-fork" "w-4 h-4 mr-1.5 shrink-0" }}
43 {{ else }}
44 {{ i "book-marked" "w-4 h-4 mr-1.5 shrink-0" }}
45 {{ end }}
46 {{ $repoOwner := resolve .Repo.Did }}
47 <a href="/{{ $repoOwner }}/{{ .Repo.Name }}" class="truncate min-w-0">{{ $repoOwner }}/{{ .Repo.Name }}</a>
48 </div>
49 </div>
50
51
52 {{ if .Repo.RepoStats }}
53 <div class="text-gray-400 text-sm font-mono inline-flex gap-4 mt-auto">
54 {{ with .Repo.RepoStats.Language }}
55 <div class="flex gap-2 items-center text-sm">
56 {{ template "repo/fragments/colorBall" (dict "color" (langColor .)) }}
57 <span>{{ . }}</span>
58 </div>
59 {{ end }}
60 {{ with .Repo.RepoStats.StarCount }}
61 <div class="flex gap-1 items-center text-sm">
62 {{ i "star" "w-3 h-3 fill-current" }}
63 <span>{{ . }}</span>
64 </div>
65 {{ end }}
66 {{ with .Repo.RepoStats.IssueCount.Open }}
67 <div class="flex gap-1 items-center text-sm">
68 {{ i "circle-dot" "w-3 h-3" }}
69 <span>{{ . }}</span>
70 </div>
71 {{ end }}
72 {{ with .Repo.RepoStats.PullCount.Open }}
73 <div class="flex gap-1 items-center text-sm">
74 {{ i "git-pull-request" "w-3 h-3" }}
75 <span>{{ . }}</span>
76 </div>
77 {{ end }}
78 </div>
79 {{ end }}
80 </div>
81
82 {{ with .Repo.Description }}
83 <div class="pl-6 pb-2 text-gray-600 dark:text-gray-300 text-sm line-clamp-2">
84 {{ . | description }}
85 </div>
86 {{ end }}
87
88 {{ if gt (len .Issues) 0 }}
89 <details class="bg-white dark:bg-gray-800 group" open>
90 <summary class="py-4 px-6 text-xs list-none cursor-pointer hover:text-gray-500 hover:dark:text-gray-400">
91 {{ $s := "s" }}
92 {{ if eq (len .Issues) 1 }}
93 {{ $s = "" }}
94 {{ end }}
95 <div class="group-open:hidden flex items-center gap-2">
96 {{ i "chevrons-up-down" "w-4 h-4" }} expand {{ len .Issues }} issue{{$s}} in this repo
97 </div>
98 <div class="hidden group-open:flex items-center gap-2">
99 {{ i "chevrons-down-up" "w-4 h-4" }} hide {{ len .Issues }} issue{{$s}} in this repo
100 </div>
101 </summary>
102 <div class="grid grid-cols-1 rounded-b border-b border-t border-gray-200 dark:border-gray-900 divide-y divide-gray-200 dark:divide-gray-900">
103 {{ range .Issues }}
104 <a href="/{{ resolve .Repo.Did }}/{{ .Repo.Name }}/issues/{{ .IssueId }}" class="no-underline hover:no-underline hover:bg-gray-100/25 hover:dark:bg-gray-700/25">
105 <div class="py-2 px-6">
106 <div class="flex-grow min-w-0 w-full">
107 <div class="flex text-sm items-center justify-between w-full">
108 <div class="flex items-center gap-2 min-w-0 flex-1 pr-2">
109 <span class="truncate text-sm text-gray-800 dark:text-gray-200">
110 <span class="text-gray-500 dark:text-gray-400">#{{ .IssueId }}</span>
111 {{ .Title | description }}
112 </span>
113 </div>
114 <div class="flex-shrink-0 flex items-center gap-2 text-gray-500 dark:text-gray-400">
115 <span>
116 <div class="inline-flex items-center gap-1">
117 {{ i "message-square" "w-3 h-3 md:hidden" }}
118 {{ len .Comments }}
119 <span class="hidden md:inline">comment{{ if ne (len .Comments) 1 }}s{{ end }}</span>
120 </div>
121 </span>
122 <span class="before:content-['·'] before:select-none"></span>
123 <span class="text-xs">
124 {{ template "repo/fragments/time" .Created }}
125 </span>
126 <div class="hidden md:inline-flex md:gap-1">
127 {{ $labelState := .Labels }}
128 {{ range $k, $d := $.LabelDefs }}
129 {{ range $v, $s := $labelState.GetValSet $d.AtUri.String }}
130 {{ template "labels/fragments/label" (dict "def" $d "val" $v "withPrefix" true) }}
131 {{ end }}
132 {{ end }}
133 </div>
134 </div>
135 </div>
136 </div>
137 </div>
138 </a>
139 {{ end }}
140 </div>
141 </details>
142 {{ end }}
143 </div>
144 {{ end }}
145
146 {{ if or (gt .Page.Offset 0) (eq (len .RepoGroups) .Page.Limit) }}
147 <div class="flex justify-center mt-8">
148 <div class="flex gap-2">
149 {{ if gt .Page.Offset 0 }}
150 {{ $prev := .Page.Previous }}
151 <a
152 class="btn flex items-center gap-2 no-underline hover:no-underline dark:text-white dark:hover:bg-gray-700"
153 hx-boost="true"
154 href="/goodfirstissues?offset={{ $prev.Offset }}&limit={{ $prev.Limit }}"
155 >
156 {{ i "chevron-left" "w-4 h-4" }}
157 previous
158 </a>
159 {{ else }}
160 <div></div>
161 {{ end }}
162
163 {{ if eq (len .RepoGroups) .Page.Limit }}
164 {{ $next := .Page.Next }}
165 <a
166 class="btn flex items-center gap-2 no-underline hover:no-underline dark:text-white dark:hover:bg-gray-700"
167 hx-boost="true"
168 href="/goodfirstissues?offset={{ $next.Offset }}&limit={{ $next.Limit }}"
169 >
170 next
171 {{ i "chevron-right" "w-4 h-4" }}
172 </a>
173 {{ end }}
174 </div>
175 </div>
176 {{ end }}
177 {{ end }}
178 </div>
179</div>
180{{ end }}