appview: simplify logic to build RepoLanguageDetails #271

merged
opened by oppi.li targeting master from push-zvkrywwskknq
Changed files
+33 -42
appview
pages
templates
repo
repo
+13 -12
appview/pages/templates/repo/index.html
···
{{ template "repo/fragments/og" (dict "RepoInfo" .RepoInfo) }}
{{ end }}
-
{{ define "repoLanguages" }}
-
<div class="flex gap-[3px] -m-6 mb-6 overflow-hidden rounded-t">
-
{{ range $value := .Languages }}
-
<div
-
title="{{ $value.Name }} {{ printf "%.1f" $value.Percentage }}%"
-
class="h-2"
-
style="background-color: {{ $value.Color }}; width: {{ $value.Percentage }}%"
-
></div>
-
{{ end }}
-
</div>
-
{{ end }}
-
{{ define "repoContent" }}
<main>
{{ if .Languages }}
···
</main>
{{ end }}
+
{{ define "repoLanguages" }}
+
<div class="flex gap-[1px] -m-6 mb-6 overflow-hidden rounded-t">
+
{{ range $value := .Languages }}
+
<div
+
title='{{ or $value.Name "Other" }} {{ printf "%.1f" $value.Percentage }}%'
+
class="h-[4px] rounded-full"
+
style="background-color: {{ $value.Color }}; width: {{ $value.Percentage }}%"
+
></div>
+
{{ end }}
+
</div>
+
{{ end }}
+
+
{{ define "branchSelector" }}
<div class="flex gap-2 items-center items-stretch justify-center">
<select
+20 -30
appview/repo/index.go
···
}
}
-
languageInfo, err := getLanguageInfo(repoInfo, rp, f, user, signedClient, ref)
+
languageInfo, err := getLanguageInfo(f, signedClient, ref)
if err != nil {
log.Printf("failed to compute language percentages: %s", err)
// non-fatal
···
}
func getLanguageInfo(
-
repoInfo repoinfo.RepoInfo,
-
rp *Repo,
f *reporesolver.ResolvedRepo,
-
user *oauth.User,
signedClient *knotclient.SignedClient,
ref string,
) ([]types.RepoLanguageDetails, error) {
···
return []types.RepoLanguageDetails{}, err
}
if repoLanguages == nil {
-
repoLanguages = &types.RepoLanguageResponse{Languages: make(map[string]int)}
+
repoLanguages = &types.RepoLanguageResponse{Languages: make(map[string]int64)}
}
-
totalLanguageFileCount := 0
-
for _, fileCount := range repoLanguages.Languages {
-
totalLanguageFileCount += fileCount
+
var totalSize int64
+
for _, fileSize := range repoLanguages.Languages {
+
totalSize += fileSize
}
var languageStats []types.RepoLanguageDetails
-
var otherLanguageStat *types.RepoLanguageDetails
var otherPercentage float32 = 0
-
for fileType, fileCount := range repoLanguages.Languages {
-
percentage := (float32(fileCount) / float32(totalLanguageFileCount)) * 100
-
-
if percentage <= 0.1 {
-
otherPercentage += percentage
-
continue
-
}
+
for lang, size := range repoLanguages.Languages {
+
percentage := (float32(size) / float32(totalSize)) * 100
-
// Exclude languages
-
if fileType == "Text" {
+
if percentage <= 0.5 {
otherPercentage += percentage
continue
}
-
color := enry.GetColor(fileType)
+
color := enry.GetColor(lang)
-
if fileType == "Other" {
-
otherLanguageStat = &types.RepoLanguageDetails{Name: fileType, Percentage: percentage, Color: color}
-
} else {
-
languageStats = append(languageStats, types.RepoLanguageDetails{Name: fileType, Percentage: percentage, Color: color})
-
}
+
languageStats = append(languageStats, types.RepoLanguageDetails{Name: lang, Percentage: percentage, Color: color})
}
sort.Slice(languageStats, func(i, j int) bool {
-
return languageStats[i].Percentage > languageStats[j].Percentage
+
if languageStats[i].Name == enry.OtherLanguage {
+
return false
+
}
+
if languageStats[j].Name == enry.OtherLanguage {
+
return true
+
}
+
if languageStats[i].Percentage != languageStats[j].Percentage {
+
return languageStats[i].Percentage > languageStats[j].Percentage
+
}
+
return languageStats[i].Name < languageStats[j].Name
})
-
if otherLanguageStat != nil {
-
otherLanguageStat.Percentage += otherPercentage
-
languageStats = append(languageStats, *otherLanguageStat)
-
}
-
return languageStats, nil
}