aboutsummaryrefslogtreecommitdiff
blob: 5065809e0acd5d72007982993efceb850bee67bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package categories

import (
	"net/http"
	"soko/pkg/app/layout"
	"soko/pkg/models"
	"strconv"
	"strings"
)

func packageLetter(name string) string {
	return strings.ToLower(strings.TrimLeft(name, "_")[:1])
}

script filter() {
	const value = document.querySelector("#filter").value.toLowerCase();
	const rows = document.querySelectorAll("#table tr");
	for (let i = 0; i < rows.length; i++) {
		rows[i].style.display = rows[i].cells[0].innerText.toLowerCase().includes(value) ? "" : "none";
	}
}

templ showPackages(categoryName string, packages []packageInfo) {
	<div class="row">
		<div class="col-12">
			<div class="row">
				<div class="col-md-9">
					<p>
						<input onKeyup={ filter() } id="filter" type="text" class="form-control form-control-xl" placeholder={ "Search packages in " + categoryName }/>
					</p>
					<div class="card border-top-0 rounded">
						<table class="table mb-0 rounded" id="table">
							for i, pkg := range packages {
								<tr
									if i == 0 || packageLetter(pkg.Package) != packageLetter(packages[i-1].Package) {
										id={ packageLetter(pkg.Package) }
									}
								>
									<th class="kk-nobreak-cell"><a href={ templ.URL("/packages/" + categoryName + "/" + pkg.Package) }>{ pkg.Package }</a></th>
									<td>{ pkg.Description }</td>
								</tr>
							}
						</table>
					</div>
					@filter()
				</div>
				<div class="col-md-3">
					<h4>Statistics</h4>
					<dd class="ml-3">
						<dl>Packages: { strconv.Itoa(len(packages)) }</dl>
					</dd>
					<h4 class="mt-4">Filter by Category</h4>
					<div class="row pl-4 pr-5 mr-5">
						for i, pkg := range packages {
							if i == 0 || packageLetter(pkg.Package) != packageLetter(packages[i-1].Package) {
								<div class="col-md-2 px-2">
									<a href={ templ.URL("#" + packageLetter(pkg.Package)) } class="text-muted text-capitalize">
										{ packageLetter(pkg.Package) }
									</a>
								</div>
							}
						}
					</div>
				</div>
			</div>
		</div>
	</div>
}

templ show(component templ.Component) {
	<div class="container mb-5 tab-pane fade show active" id="overview" role="tabpanel" aria-labelledby="overview-tab">
		@component
	</div>
}

func renderShowPage(w http.ResponseWriter, r *http.Request, currentTab string, category *models.Category, component templ.Component) {
	layout.TabbedLayout(category.Name, layout.Packages, category.Name, "fa fa-fw fa-cubes", category.Description, []layout.SubTab{
		{
			Name: "Packages",
			Link: templ.URL("/categories/" + category.Name),
			Icon: "fa fa-list-ul mr-1",
		},
		{
			Name:       "Stabilization",
			Link:       templ.URL("/categories/" + category.Name + "/stabilization"),
			Icon:       "fa fa-check-circle-o mr-1",
			BadgeValue: strconv.Itoa(category.PackagesInformation.StableRequests),
		},
		{
			Name:       "Outdated",
			Link:       templ.URL("/categories/" + category.Name + "/outdated"),
			Icon:       "fa fa-tag mr-1",
			BadgeValue: strconv.Itoa(category.PackagesInformation.Outdated),
		},
		{
			Name:       "Pull requests",
			Link:       templ.URL("/categories/" + category.Name + "/pull-requests"),
			Icon:       "octicon octicon-git-pull-request opticon-resource-icon ml-1",
			BadgeValue: strconv.Itoa(category.PackagesInformation.PullRequests),
		},
		{
			Name:       "Bugs",
			Link:       templ.URL("/categories/" + category.Name + "/bugs"),
			Icon:       "fa fa-bug",
			BadgeValue: strconv.Itoa(category.PackagesInformation.Bugs),
		},
		{
			Name:       "Security",
			Link:       templ.URL("/categories/" + category.Name + "/security"),
			Icon:       "fa fa-shield",
			BadgeValue: strconv.Itoa(category.PackagesInformation.SecurityBugs),
		},
	}, currentTab, show(component)).Render(r.Context(), w)
}