Monorepo for Tangled tangled.org

appview: simplify logic to build RepoLanguageDetails

Signed-off-by: oppiliappan <me@oppi.li>

oppi.li 90d30a7b af6a21ab

verified
Changed files
+33 -42
appview
pages
templates
repo
repo
+13 -12
appview/pages/templates/repo/index.html
··· 7 7 {{ template "repo/fragments/og" (dict "RepoInfo" .RepoInfo) }} 8 8 {{ end }} 9 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 10 {{ define "repoContent" }} 23 11 <main> 24 12 {{ if .Languages }} ··· 44 32 </div> 45 33 </main> 46 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 + 47 48 48 49 {{ define "branchSelector" }} 49 50 <div class="flex gap-2 items-center items-stretch justify-center">
+20 -30
appview/repo/index.go
··· 123 123 } 124 124 } 125 125 126 - languageInfo, err := getLanguageInfo(repoInfo, rp, f, user, signedClient, ref) 126 + languageInfo, err := getLanguageInfo(f, signedClient, ref) 127 127 if err != nil { 128 128 log.Printf("failed to compute language percentages: %s", err) 129 129 // non-fatal ··· 157 157 } 158 158 159 159 func getLanguageInfo( 160 - repoInfo repoinfo.RepoInfo, 161 - rp *Repo, 162 160 f *reporesolver.ResolvedRepo, 163 - user *oauth.User, 164 161 signedClient *knotclient.SignedClient, 165 162 ref string, 166 163 ) ([]types.RepoLanguageDetails, error) { ··· 169 166 return []types.RepoLanguageDetails{}, err 170 167 } 171 168 if repoLanguages == nil { 172 - repoLanguages = &types.RepoLanguageResponse{Languages: make(map[string]int)} 169 + repoLanguages = &types.RepoLanguageResponse{Languages: make(map[string]int64)} 173 170 } 174 171 175 - totalLanguageFileCount := 0 176 - for _, fileCount := range repoLanguages.Languages { 177 - totalLanguageFileCount += fileCount 172 + var totalSize int64 173 + for _, fileSize := range repoLanguages.Languages { 174 + totalSize += fileSize 178 175 } 179 176 180 177 var languageStats []types.RepoLanguageDetails 181 - var otherLanguageStat *types.RepoLanguageDetails 182 178 var otherPercentage float32 = 0 183 179 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 - } 180 + for lang, size := range repoLanguages.Languages { 181 + percentage := (float32(size) / float32(totalSize)) * 100 191 182 192 - // Exclude languages 193 - if fileType == "Text" { 183 + if percentage <= 0.5 { 194 184 otherPercentage += percentage 195 185 continue 196 186 } 197 187 198 - color := enry.GetColor(fileType) 188 + color := enry.GetColor(lang) 199 189 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 - } 190 + languageStats = append(languageStats, types.RepoLanguageDetails{Name: lang, Percentage: percentage, Color: color}) 205 191 } 206 192 207 193 sort.Slice(languageStats, func(i, j int) bool { 208 - return languageStats[i].Percentage > languageStats[j].Percentage 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 209 204 }) 210 - 211 - if otherLanguageStat != nil { 212 - otherLanguageStat.Percentage += otherPercentage 213 - languageStats = append(languageStats, *otherLanguageStat) 214 - } 215 205 216 206 return languageStats, nil 217 207 }