diff --git a/internal/server/dashboard.go b/internal/server/dashboard.go index d6550bd..7d13d91 100644 --- a/internal/server/dashboard.go +++ b/internal/server/dashboard.go @@ -113,6 +113,77 @@ type PackagesListPageData struct { TotalPages int } +func supportedEcosystems() []string { + return []string{ + "npm", + "cargo", + "gem", + "go", + "hex", + "pub", + "pypi", + "maven", + "nuget", + "composer", + "conan", + "conda", + "cran", + "oci", + "deb", + "rpm", + } +} + +func ecosystemBadgeLabel(ecosystem string) string { + switch ecosystem { + case "oci": + return "container" + case "deb": + return "debian" + default: + return ecosystem + } +} + +func ecosystemBadgeClasses(ecosystem string) string { + base := "inline-flex items-center px-2 py-0.5 rounded text-xs font-medium" + + switch ecosystem { + case "npm", "maven": + return base + " bg-red-100 text-red-700 dark:bg-red-900/50 dark:text-red-300" + case "cargo": + return base + " bg-orange-100 text-orange-700 dark:bg-orange-900/50 dark:text-orange-300" + case "gem": + return base + " bg-pink-100 text-pink-700 dark:bg-pink-900/50 dark:text-pink-300" + case "go": + return base + " bg-cyan-100 text-cyan-700 dark:bg-cyan-900/50 dark:text-cyan-300" + case "hex": + return base + " bg-purple-100 text-purple-700 dark:bg-purple-900/50 dark:text-purple-300" + case "pub": + return base + " bg-blue-100 text-blue-700 dark:bg-blue-900/50 dark:text-blue-300" + case "pypi": + return base + " bg-yellow-100 text-yellow-700 dark:bg-yellow-900/50 dark:text-yellow-300" + case "nuget": + return base + " bg-indigo-100 text-indigo-700 dark:bg-indigo-900/50 dark:text-indigo-300" + case "composer": + return base + " bg-violet-100 text-violet-700 dark:bg-violet-900/50 dark:text-violet-300" + case "conan": + return base + " bg-teal-100 text-teal-700 dark:bg-teal-900/50 dark:text-teal-300" + case "conda": + return base + " bg-green-100 text-green-700 dark:bg-green-900/50 dark:text-green-300" + case "cran": + return base + " bg-slate-100 text-slate-700 dark:bg-slate-800 dark:text-slate-300" + case "oci": + return base + " bg-sky-100 text-sky-700 dark:bg-sky-900/50 dark:text-sky-300" + case "deb": + return base + " bg-red-100 text-red-800 dark:bg-red-900/50 dark:text-red-300" + case "rpm": + return base + " bg-amber-100 text-amber-800 dark:bg-amber-900/50 dark:text-amber-300" + default: + return base + " bg-gray-100 text-gray-700 dark:bg-gray-800 dark:text-gray-300" + } +} + func getRegistryConfigs(baseURL string) []RegistryConfig { return []RegistryConfig{ { diff --git a/internal/server/server_test.go b/internal/server/server_test.go index 44498f9..7e432ed 100644 --- a/internal/server/server_test.go +++ b/internal/server/server_test.go @@ -57,8 +57,8 @@ func newTestServer(t *testing.T) *testServer { proxy := handler.NewProxy(db, store, fetcher, resolver, logger) cfg := &config.Config{ - BaseURL: "http://localhost:8080", - Storage: config.StorageConfig{Path: storagePath}, + BaseURL: "http://localhost:8080", + Storage: config.StorageConfig{Path: storagePath}, Database: config.DatabaseConfig{Path: dbPath}, } @@ -196,6 +196,18 @@ func TestDashboard(t *testing.T) { if !strings.Contains(body, "Popular Packages") { t.Error("dashboard should contain popular packages section") } + if !strings.Contains(body, ">composer<") { + t.Error("dashboard should show composer in supported ecosystems") + } + if !strings.Contains(body, ">conan<") { + t.Error("dashboard should show conan in supported ecosystems") + } + if !strings.Contains(body, ">container<") { + t.Error("dashboard should show container in supported ecosystems") + } + if !strings.Contains(body, ">debian<") { + t.Error("dashboard should show debian in supported ecosystems") + } } func min(a, b int) int { diff --git a/internal/server/templates.go b/internal/server/templates.go index c49c480..2d261a3 100644 --- a/internal/server/templates.go +++ b/internal/server/templates.go @@ -21,8 +21,11 @@ func NewTemplates() (*Templates, error) { // Define custom template functions funcMap := template.FuncMap{ - "add": func(a, b int) int { return a + b }, - "sub": func(a, b int) int { return a - b }, + "add": func(a, b int) int { return a + b }, + "sub": func(a, b int) int { return a - b }, + "supportedEcosystems": supportedEcosystems, + "ecosystemBadgeClass": ecosystemBadgeClasses, + "ecosystemBadgeLabel": ecosystemBadgeLabel, } // Get all page files diff --git a/internal/server/templates/components/ecosystem_badge.html b/internal/server/templates/components/ecosystem_badge.html index ba1c286..4c7e882 100644 --- a/internal/server/templates/components/ecosystem_badge.html +++ b/internal/server/templates/components/ecosystem_badge.html @@ -1,3 +1,3 @@ {{define "ecosystem_badge"}} -{{.}} +{{ecosystemBadgeLabel .}} {{end}} diff --git a/internal/server/templates/layout/footer.html b/internal/server/templates/layout/footer.html index 2c963f0..8b88416 100644 --- a/internal/server/templates/layout/footer.html +++ b/internal/server/templates/layout/footer.html @@ -19,12 +19,9 @@

Resource

Supported Ecosystems

- npm - cargo - gem - go - pypi - maven + {{range supportedEcosystems}} + {{template "ecosystem_badge" .}} + {{end}}
diff --git a/internal/server/templates/layout/styles.html b/internal/server/templates/layout/styles.html index 1d21184..7fecaff 100644 --- a/internal/server/templates/layout/styles.html +++ b/internal/server/templates/layout/styles.html @@ -1,25 +1,4 @@ {{define "styles"}} - -