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
··· 7 {{ template "repo/fragments/og" (dict "RepoInfo" .RepoInfo) }} 8 {{ end }} 9 10 - {{ define "repoLanguages" }} 11 - <div class="flex gap-[3px] -m-6 mb-6 overflow-hidden rounded-t"> 12 - {{ range $value := .Languages }} 13 - <div 14 - title="{{ $value.Name }} {{ printf "%.1f" $value.Percentage }}%" 15 - class="h-2" 16 - style="background-color: {{ $value.Color }}; width: {{ $value.Percentage }}%" 17 - ></div> 18 - {{ end }} 19 - </div> 20 - {{ end }} 21 - 22 {{ define "repoContent" }} 23 <main> 24 {{ if .Languages }} ··· 45 </main> 46 {{ end }} 47 48 {{ define "branchSelector" }} 49 <div class="flex gap-2 items-center items-stretch justify-center"> 50 <select
··· 7 {{ template "repo/fragments/og" (dict "RepoInfo" .RepoInfo) }} 8 {{ end }} 9 10 {{ define "repoContent" }} 11 <main> 12 {{ if .Languages }} ··· 33 </main> 34 {{ end }} 35 36 + {{ define "repoLanguages" }} 37 + <div class="flex gap-[1px] -m-6 mb-6 overflow-hidden rounded-t"> 38 + {{ range $value := .Languages }} 39 + <div 40 + title='{{ or $value.Name "Other" }} {{ printf "%.1f" $value.Percentage }}%' 41 + class="h-[4px] rounded-full" 42 + style="background-color: {{ $value.Color }}; width: {{ $value.Percentage }}%" 43 + ></div> 44 + {{ end }} 45 + </div> 46 + {{ end }} 47 + 48 + 49 {{ define "branchSelector" }} 50 <div class="flex gap-2 items-center items-stretch justify-center"> 51 <select
+20 -30
appview/repo/index.go
··· 123 } 124 } 125 126 - languageInfo, err := getLanguageInfo(repoInfo, rp, f, user, signedClient, ref) 127 if err != nil { 128 log.Printf("failed to compute language percentages: %s", err) 129 // non-fatal ··· 157 } 158 159 func getLanguageInfo( 160 - repoInfo repoinfo.RepoInfo, 161 - rp *Repo, 162 f *reporesolver.ResolvedRepo, 163 - user *oauth.User, 164 signedClient *knotclient.SignedClient, 165 ref string, 166 ) ([]types.RepoLanguageDetails, error) { ··· 169 return []types.RepoLanguageDetails{}, err 170 } 171 if repoLanguages == nil { 172 - repoLanguages = &types.RepoLanguageResponse{Languages: make(map[string]int)} 173 } 174 175 - totalLanguageFileCount := 0 176 - for _, fileCount := range repoLanguages.Languages { 177 - totalLanguageFileCount += fileCount 178 } 179 180 var languageStats []types.RepoLanguageDetails 181 - var otherLanguageStat *types.RepoLanguageDetails 182 var otherPercentage float32 = 0 183 184 - for fileType, fileCount := range repoLanguages.Languages { 185 - percentage := (float32(fileCount) / float32(totalLanguageFileCount)) * 100 186 - 187 - if percentage <= 0.1 { 188 - otherPercentage += percentage 189 - continue 190 - } 191 192 - // Exclude languages 193 - if fileType == "Text" { 194 otherPercentage += percentage 195 continue 196 } 197 198 - color := enry.GetColor(fileType) 199 200 - if fileType == "Other" { 201 - otherLanguageStat = &types.RepoLanguageDetails{Name: fileType, Percentage: percentage, Color: color} 202 - } else { 203 - languageStats = append(languageStats, types.RepoLanguageDetails{Name: fileType, Percentage: percentage, Color: color}) 204 - } 205 } 206 207 sort.Slice(languageStats, func(i, j int) bool { 208 - return languageStats[i].Percentage > languageStats[j].Percentage 209 }) 210 211 - if otherLanguageStat != nil { 212 - otherLanguageStat.Percentage += otherPercentage 213 - languageStats = append(languageStats, *otherLanguageStat) 214 - } 215 - 216 return languageStats, nil 217 } 218
··· 123 } 124 } 125 126 + languageInfo, err := getLanguageInfo(f, signedClient, ref) 127 if err != nil { 128 log.Printf("failed to compute language percentages: %s", err) 129 // non-fatal ··· 157 } 158 159 func getLanguageInfo( 160 f *reporesolver.ResolvedRepo, 161 signedClient *knotclient.SignedClient, 162 ref string, 163 ) ([]types.RepoLanguageDetails, error) { ··· 166 return []types.RepoLanguageDetails{}, err 167 } 168 if repoLanguages == nil { 169 + repoLanguages = &types.RepoLanguageResponse{Languages: make(map[string]int64)} 170 } 171 172 + var totalSize int64 173 + for _, fileSize := range repoLanguages.Languages { 174 + totalSize += fileSize 175 } 176 177 var languageStats []types.RepoLanguageDetails 178 var otherPercentage float32 = 0 179 180 + for lang, size := range repoLanguages.Languages { 181 + percentage := (float32(size) / float32(totalSize)) * 100 182 183 + if percentage <= 0.5 { 184 otherPercentage += percentage 185 continue 186 } 187 188 + color := enry.GetColor(lang) 189 190 + languageStats = append(languageStats, types.RepoLanguageDetails{Name: lang, Percentage: percentage, Color: color}) 191 } 192 193 sort.Slice(languageStats, func(i, j int) bool { 194 + if languageStats[i].Name == enry.OtherLanguage { 195 + return false 196 + } 197 + if languageStats[j].Name == enry.OtherLanguage { 198 + return true 199 + } 200 + if languageStats[i].Percentage != languageStats[j].Percentage { 201 + return languageStats[i].Percentage > languageStats[j].Percentage 202 + } 203 + return languageStats[i].Name < languageStats[j].Name 204 }) 205 206 return languageStats, nil 207 } 208