Commit 134e2ae
Eric Bower
·
2023-08-07 09:47:05 -0400 EDT
parent fe38cd8
copy changes
6 files changed,
+148,
-141
+4,
-0
| ... | ... | @@ -9,3 +9,7 @@ repos: | |
| 9 | 9 | refs: | |
| 10 | 10 | - main | |
| 11 | 11 | desc: infra for pico services | |
| 12 | + | - path: /home/erock/dev/app-ui | |
| 13 | + | refs: | |
| 14 | + | - main | |
| 15 | + | desc: aptible's paas web application |
+1,
-1
| ... | ... | @@ -12,7 +12,7 @@ | |
| 12 | 12 | <a href="{{.Repo.LogURL}}">log</a> | |
| 13 | 13 | </div> | |
| 14 | 14 | ||
| 15 | - | <div class="my"> | |
| 15 | + | <div class="mt-lg"> | |
| 16 | 16 | <div class="text-lg">{{.Repo.Desc}}</div> | |
| 17 | 17 | <pre style="margin: 0;">git clone {{.Repo.CloneURL}}</pre> | |
| 18 | 18 | </div> |
+9,
-3
| ... | ... | @@ -8,10 +8,16 @@ | |
| 8 | 8 | <div> | |
| 9 | 9 | {{range .Data.Log}} | |
| 10 | 10 | <div class="box"> | |
| 11 | - | <div> | |
| 12 | - | <a href="{{.URL}}">{{.SummaryStr}}</a> | |
| 11 | + | <div class="flex justify-between items-center"> | |
| 12 | + | <div> | |
| 13 | + | <a href="{{.URL}}">{{.SummaryStr}}</a> | |
| 14 | + | </div> | |
| 15 | + | <div> | |
| 16 | + | {{.ShortID}} | |
| 17 | + | </div> | |
| 13 | 18 | </div> | |
| 14 | - | <div> | |
| 19 | + | ||
| 20 | + | <div class="flex items-center"> | |
| 15 | 21 | <span>{{.AuthorStr}}</span> | |
| 16 | 22 | <span> committed </span> | |
| 17 | 23 | <span>{{.WhenStr}}</span> |
+6,
-6
| ... | ... | @@ -7,17 +7,17 @@ | |
| 7 | 7 | ||
| 8 | 8 | <div> | |
| 9 | 9 | {{range .Data.Tree}} | |
| 10 | - | <div class="flex justify-between"> | |
| 10 | + | <div class="flex justify-between items-center gap my-sm border-b"> | |
| 11 | 11 | <div class="flex-1"> | |
| 12 | 12 | <a href="{{.URL}}">{{.Path}}</a> | |
| 13 | 13 | </div> | |
| 14 | 14 | ||
| 15 | - | <div class="flex"> | |
| 16 | - | <div> | |
| 17 | - | <a href="{{.CommitURL}}">{{.When}}</a> | |
| 15 | + | <div class="flex items-center gap"> | |
| 16 | + | <div class="flex-1"> | |
| 17 | + | <a href="{{.CommitURL}}" title="{{.Summary}}">{{.When}}</a> | |
| 18 | 18 | </div> | |
| 19 | - | <div class="mono font-bold"> | |
| 20 | - | L{{.NumLines}} | |
| 19 | + | <div class="tree-size"> | |
| 20 | + | {{if .IsTextFile}}{{.NumLines}} L{{else}}{{.Size}}{{end}} | |
| 21 | 21 | </div> | |
| 22 | 22 | </div> | |
| 23 | 23 | </div> |
M
main.go
+101,
-64
| ... | ... | @@ -9,9 +9,11 @@ import ( | |
| 9 | 9 | "sort" | |
| 10 | 10 | "strings" | |
| 11 | 11 | ||
| 12 | + | "github.com/dustin/go-humanize" | |
| 12 | 13 | git "github.com/gogs/git-module" | |
| 13 | 14 | "github.com/mergestat/timediff" | |
| 14 | 15 | "github.com/picosh/pico/pastes" | |
| 16 | + | "github.com/picosh/pico/shared" | |
| 15 | 17 | "github.com/spf13/viper" | |
| 16 | 18 | ) | |
| 17 | 19 |
| ... | ... | @@ -38,35 +40,39 @@ type RepoData struct { | |
| 38 | 40 | RefsURL string | |
| 39 | 41 | CloneURL string | |
| 40 | 42 | MaxCommits int | |
| 41 | - | RevName string | |
| 43 | + | RevName string | |
| 44 | + | Readme string | |
| 42 | 45 | } | |
| 43 | 46 | ||
| 44 | 47 | type CommitData struct { | |
| 45 | 48 | SummaryStr string | |
| 46 | - | URL string | |
| 47 | - | WhenStr string | |
| 48 | - | AuthorStr string | |
| 49 | + | URL string | |
| 50 | + | WhenStr string | |
| 51 | + | AuthorStr string | |
| 52 | + | ShortID string | |
| 49 | 53 | *git.Commit | |
| 50 | 54 | } | |
| 51 | 55 | ||
| 52 | 56 | type TreeItem struct { | |
| 53 | - | NumLines int | |
| 54 | - | URL string | |
| 55 | - | Path string | |
| 56 | - | Entry *git.TreeEntry | |
| 57 | - | CommitURL string | |
| 58 | - | Desc string | |
| 59 | - | When string | |
| 57 | + | IsTextFile bool | |
| 58 | + | Size string | |
| 59 | + | NumLines int | |
| 60 | + | URL string | |
| 61 | + | Path string | |
| 62 | + | Entry *git.TreeEntry | |
| 63 | + | CommitURL string | |
| 64 | + | Summary string | |
| 65 | + | When string | |
| 60 | 66 | } | |
| 61 | 67 | ||
| 62 | 68 | type PageData struct { | |
| 63 | - | Repo *RepoData | |
| 64 | - | Log []*CommitData | |
| 65 | - | Tree []*TreeItem | |
| 66 | - | Readme template.HTML | |
| 67 | - | Rev *git.Reference | |
| 68 | - | RevName string | |
| 69 | - | Refs []*RefInfo | |
| 69 | + | Repo *RepoData | |
| 70 | + | Log []*CommitData | |
| 71 | + | Tree []*TreeItem | |
| 72 | + | Readme template.HTML | |
| 73 | + | Rev *git.Reference | |
| 74 | + | RevName string | |
| 75 | + | Refs []*RefInfo | |
| 70 | 76 | } | |
| 71 | 77 | ||
| 72 | 78 | type CommitPageData struct { |
| ... | ... | @@ -107,6 +113,35 @@ type DiffRenderFile struct { | |
| 107 | 113 | NumDeletions int | |
| 108 | 114 | } | |
| 109 | 115 | ||
| 116 | + | type FileData struct { | |
| 117 | + | Contents template.HTML | |
| 118 | + | Name string | |
| 119 | + | } | |
| 120 | + | ||
| 121 | + | type RefInfo struct { | |
| 122 | + | Refspec string | |
| 123 | + | URL template.URL | |
| 124 | + | } | |
| 125 | + | ||
| 126 | + | type BranchOutput struct { | |
| 127 | + | Readme string | |
| 128 | + | LastCommit *git.Commit | |
| 129 | + | } | |
| 130 | + | ||
| 131 | + | type RepoConfig struct { | |
| 132 | + | Path string `mapstructure:"path"` | |
| 133 | + | Refs []string `mapstructure:"refs"` | |
| 134 | + | Desc string `mapstructure:"desc"` | |
| 135 | + | MaxCommits int `mapstructure:"max_commits"` | |
| 136 | + | Readme string `mapstructure:"readme"` | |
| 137 | + | } | |
| 138 | + | ||
| 139 | + | type Config struct { | |
| 140 | + | Repos []*RepoConfig `mapstructure:"repos"` | |
| 141 | + | URL string `mapstructure:"url"` | |
| 142 | + | Cache map[string]bool | |
| 143 | + | } | |
| 144 | + | ||
| 110 | 145 | func diffFileType(_type git.DiffFileType) string { | |
| 111 | 146 | if _type == git.DiffFileAdd { | |
| 112 | 147 | return "A" |
| ... | ... | @@ -127,6 +162,10 @@ func bail(err error) { | |
| 127 | 162 | } | |
| 128 | 163 | } | |
| 129 | 164 | ||
| 165 | + | func toPretty(b int64) string { | |
| 166 | + | return humanize.Bytes(uint64(b)) | |
| 167 | + | } | |
| 168 | + | ||
| 130 | 169 | func commitURL(repo string, commitID string) string { | |
| 131 | 170 | return fmt.Sprintf("/%s/commits/%s.html", repo, commitID) | |
| 132 | 171 | } |
| ... | ... | @@ -135,6 +174,15 @@ func repoName(root string) string { | |
| 135 | 174 | _, file := filepath.Split(root) | |
| 136 | 175 | return file | |
| 137 | 176 | } | |
| 177 | + | ||
| 178 | + | func readmeFile(repo *RepoData) string { | |
| 179 | + | if repo.Readme == "" { | |
| 180 | + | return "readme.md" | |
| 181 | + | } | |
| 182 | + | ||
| 183 | + | return strings.ToLower(repo.Readme) | |
| 184 | + | } | |
| 185 | + | ||
| 138 | 186 | func findDefaultBranch(config *RepoConfig, refs []*git.Reference) *git.Reference { | |
| 139 | 187 | branches := config.Refs | |
| 140 | 188 | if len(branches) == 0 { |
| ... | ... | @@ -165,6 +213,7 @@ func walkTree(tree *git.Tree, branch string, curpath string, aggregate []*TreeIt | |
| 165 | 213 | ||
| 166 | 214 | if entry.IsBlob() { | |
| 167 | 215 | aggregate = append(aggregate, &TreeItem{ | |
| 216 | + | Size: toPretty(entry.Size()), | |
| 168 | 217 | Path: fname, | |
| 169 | 218 | Entry: entry, | |
| 170 | 219 | URL: filepath.Join("/", "tree", branch, "item", fname), |
| ... | ... | @@ -188,12 +237,13 @@ func writeHtml(data *WriteData) { | |
| 188 | 237 | ||
| 189 | 238 | outdir := viper.GetString("outdir") | |
| 190 | 239 | dir := filepath.Join(outdir, data.RepoName, data.Subdir) | |
| 191 | - | fmt.Println(dir) | |
| 192 | - | fmt.Println(data.Name) | |
| 193 | 240 | err = os.MkdirAll(dir, os.ModePerm) | |
| 194 | 241 | bail(err) | |
| 195 | 242 | ||
| 196 | - | w, err := os.OpenFile(filepath.Join(dir, data.Name), os.O_WRONLY|os.O_CREATE, 0755) | |
| 243 | + | fp := filepath.Join(dir, data.Name) | |
| 244 | + | fmt.Printf("writing (%s)\n", fp) | |
| 245 | + | ||
| 246 | + | w, err := os.OpenFile(fp, os.O_WRONLY|os.O_CREATE, 0755) | |
| 197 | 247 | bail(err) | |
| 198 | 248 | ||
| 199 | 249 | err = ts.Execute(w, data) |
| ... | ... | @@ -213,11 +263,13 @@ func writeIndex(data *IndexPage) { | |
| 213 | 263 | ||
| 214 | 264 | outdir := viper.GetString("outdir") | |
| 215 | 265 | dir := filepath.Join(outdir) | |
| 216 | - | fmt.Println(dir) | |
| 217 | 266 | err = os.MkdirAll(dir, os.ModePerm) | |
| 218 | 267 | bail(err) | |
| 219 | 268 | ||
| 220 | - | w, err := os.OpenFile(filepath.Join(dir, "index.html"), os.O_WRONLY|os.O_CREATE, 0755) | |
| 269 | + | fp := filepath.Join(dir, "index.html") | |
| 270 | + | fmt.Printf("writing (%s)\n", fp) | |
| 271 | + | ||
| 272 | + | w, err := os.OpenFile(fp, os.O_WRONLY|os.O_CREATE, 0755) | |
| 221 | 273 | bail(err) | |
| 222 | 274 | ||
| 223 | 275 | err = ts.Execute(w, data) |
| ... | ... | @@ -264,30 +316,36 @@ func writeRefs(data *PageData) { | |
| 264 | 316 | }) | |
| 265 | 317 | } | |
| 266 | 318 | ||
| 267 | - | type FileData struct { | |
| 268 | - | Contents template.HTML | |
| 269 | - | } | |
| 270 | - | ||
| 271 | 319 | func writeHTMLTreeFiles(data *PageData) string { | |
| 272 | 320 | readme := "" | |
| 273 | 321 | for _, file := range data.Tree { | |
| 274 | 322 | b, err := file.Entry.Blob().Bytes() | |
| 275 | 323 | bail(err) | |
| 276 | - | file.NumLines = len(strings.Split(string(b), "\n")) | |
| 324 | + | str := string(b) | |
| 325 | + | ||
| 326 | + | file.IsTextFile = shared.IsTextFile(str) | |
| 327 | + | ||
| 328 | + | if file.IsTextFile { | |
| 329 | + | file.NumLines = len(strings.Split(str, "\n")) | |
| 330 | + | } | |
| 277 | 331 | ||
| 278 | 332 | d := filepath.Dir(file.Path) | |
| 279 | 333 | contents, err := pastes.ParseText(file.Entry.Name(), string(b)) | |
| 280 | 334 | bail(err) | |
| 281 | 335 | ||
| 282 | 336 | nameLower := strings.ToLower(file.Entry.Name()) | |
| 283 | - | if nameLower == "readme.md" { | |
| 337 | + | summary := readmeFile(data.Repo) | |
| 338 | + | if nameLower == summary { | |
| 284 | 339 | readme = contents | |
| 285 | 340 | } | |
| 286 | 341 | ||
| 287 | 342 | writeHtml(&WriteData{ | |
| 288 | 343 | Name: fmt.Sprintf("%s.html", file.Entry.Name()), | |
| 289 | 344 | Template: "./html/file.page.tmpl", | |
| 290 | - | Data: &FileData{Contents: template.HTML(contents)}, | |
| 345 | + | Data: &FileData{ | |
| 346 | + | Contents: template.HTML(contents), | |
| 347 | + | Name: file.Entry.Name(), | |
| 348 | + | }, | |
| 291 | 349 | RepoName: data.Repo.Name, | |
| 292 | 350 | Subdir: filepath.Join("tree", data.RevName, "item", d), | |
| 293 | 351 | Repo: data.Repo, |
| ... | ... | @@ -381,11 +439,6 @@ func (c *Config) writeLogDiffs(repo *git.Repository, pageData *PageData) { | |
| 381 | 439 | } | |
| 382 | 440 | } | |
| 383 | 441 | ||
| 384 | - | type RefInfo struct { | |
| 385 | - | Refspec string | |
| 386 | - | URL template.URL | |
| 387 | - | } | |
| 388 | - | ||
| 389 | 442 | func (c *Config) writeRepo(config *RepoConfig) *BranchOutput { | |
| 390 | 443 | repo, err := git.Open(config.Path) | |
| 391 | 444 | bail(err) |
| ... | ... | @@ -410,7 +463,7 @@ func (c *Config) writeRepo(config *RepoConfig) *BranchOutput { | |
| 410 | 463 | LogURL: fmt.Sprintf("/%s/logs/%s/index.html", name, revName), | |
| 411 | 464 | RefsURL: fmt.Sprintf("/%s/refs.html", name), | |
| 412 | 465 | CloneURL: fmt.Sprintf("https://%s/%s.git", c.URL, name), | |
| 413 | - | RevName: revName, | |
| 466 | + | RevName: revName, | |
| 414 | 467 | } | |
| 415 | 468 | ||
| 416 | 469 | refInfoMap := map[string]*RefInfo{} |
| ... | ... | @@ -436,7 +489,7 @@ func (c *Config) writeRepo(config *RepoConfig) *BranchOutput { | |
| 436 | 489 | LogURL: fmt.Sprintf("/%s/logs/%s/index.html", name, revn), | |
| 437 | 490 | RefsURL: fmt.Sprintf("/%s/refs.html", name), | |
| 438 | 491 | CloneURL: fmt.Sprintf("https://%s/%s.git", c.URL, name), | |
| 439 | - | RevName: revn, | |
| 492 | + | RevName: revn, | |
| 440 | 493 | } | |
| 441 | 494 | ||
| 442 | 495 | data := &PageData{ |
| ... | ... | @@ -479,22 +532,17 @@ func (c *Config) writeRepo(config *RepoConfig) *BranchOutput { | |
| 479 | 532 | }) | |
| 480 | 533 | ||
| 481 | 534 | data := &PageData{ | |
| 482 | - | Rev: rev, | |
| 483 | - | RevName: revName, | |
| 484 | - | Repo: repoData, | |
| 485 | - | Readme: template.HTML(mainOutput.Readme), | |
| 486 | - | Refs: refInfoList, | |
| 535 | + | Rev: rev, | |
| 536 | + | RevName: revName, | |
| 537 | + | Repo: repoData, | |
| 538 | + | Readme: template.HTML(mainOutput.Readme), | |
| 539 | + | Refs: refInfoList, | |
| 487 | 540 | } | |
| 488 | 541 | writeRefs(data) | |
| 489 | 542 | writeRootSummary(data) | |
| 490 | 543 | return mainOutput | |
| 491 | 544 | } | |
| 492 | 545 | ||
| 493 | - | type BranchOutput struct { | |
| 494 | - | Readme string | |
| 495 | - | LastCommit *git.Commit | |
| 496 | - | } | |
| 497 | - | ||
| 498 | 546 | func (c *Config) writeBranch(repo *git.Repository, pageData *PageData) *BranchOutput { | |
| 499 | 547 | output := &BranchOutput{} | |
| 500 | 548 | pageSize := pageData.Repo.MaxCommits |
| ... | ... | @@ -512,11 +560,12 @@ func (c *Config) writeBranch(repo *git.Repository, pageData *PageData) *BranchOu | |
| 512 | 560 | } | |
| 513 | 561 | ||
| 514 | 562 | logs = append(logs, &CommitData{ | |
| 515 | - | URL: commitURL(pageData.Repo.Name, commit.ID.String()), | |
| 563 | + | URL: commitURL(pageData.Repo.Name, commit.ID.String()), | |
| 564 | + | ShortID: commit.ID.String()[:7], | |
| 516 | 565 | SummaryStr: commit.Summary(), | |
| 517 | - | AuthorStr: commit.Author.Name, | |
| 518 | - | WhenStr: timediff.TimeDiff(commit.Author.When), | |
| 519 | - | Commit: commit, | |
| 566 | + | AuthorStr: commit.Author.Name, | |
| 567 | + | WhenStr: timediff.TimeDiff(commit.Author.When), | |
| 568 | + | Commit: commit, | |
| 520 | 569 | }) | |
| 521 | 570 | } | |
| 522 | 571 |
| ... | ... | @@ -537,7 +586,7 @@ func (c *Config) writeBranch(repo *git.Repository, pageData *PageData) *BranchOu | |
| 537 | 586 | lc = lastCommits[0] | |
| 538 | 587 | } | |
| 539 | 588 | entry.CommitURL = commitURL(pageData.Repo.Name, lc.ID.String()) | |
| 540 | - | entry.Desc = lc.Summary() | |
| 589 | + | entry.Summary = lc.Summary() | |
| 541 | 590 | entry.When = timediff.TimeDiff(lc.Author.When) | |
| 542 | 591 | entry.URL = filepath.Join( | |
| 543 | 592 | "/", |
| ... | ... | @@ -562,18 +611,6 @@ func (c *Config) writeBranch(repo *git.Repository, pageData *PageData) *BranchOu | |
| 562 | 611 | return output | |
| 563 | 612 | } | |
| 564 | 613 | ||
| 565 | - | type RepoConfig struct { | |
| 566 | - | Path string `mapstructure:"path"` | |
| 567 | - | Refs []string `mapstructure:"refs"` | |
| 568 | - | Desc string `mapstructure:"desc"` | |
| 569 | - | MaxCommits int `mapstructure:"max_commits"` | |
| 570 | - | } | |
| 571 | - | type Config struct { | |
| 572 | - | Repos []*RepoConfig `mapstructure:"repos"` | |
| 573 | - | URL string `mapstructure:"url"` | |
| 574 | - | Cache map[string]bool | |
| 575 | - | } | |
| 576 | - | ||
| 577 | 614 | func main() { | |
| 578 | 615 | viper.SetDefault("outdir", "./public") | |
| 579 | 616 | viper.SetConfigName("config") |
+27,
-67
| ... | ... | @@ -115,32 +115,6 @@ pre { | |
| 115 | 115 | background-color: var(--pre) !important; | |
| 116 | 116 | } | |
| 117 | 117 | ||
| 118 | - | .my { | |
| 119 | - | margin: 1rem 0; | |
| 120 | - | } | |
| 121 | - | ||
| 122 | - | .mt { | |
| 123 | - | margin-top: 1rem; | |
| 124 | - | } | |
| 125 | - | ||
| 126 | - | .my-sm { | |
| 127 | - | margin: 5px 0; | |
| 128 | - | } | |
| 129 | - | ||
| 130 | - | .mono { | |
| 131 | - | font-family: ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, | |
| 132 | - | monospace; | |
| 133 | - | } | |
| 134 | - | ||
| 135 | - | .box { | |
| 136 | - | font-size: 0.8rem; | |
| 137 | - | border-radius: 5px; | |
| 138 | - | padding: 1rem; | |
| 139 | - | margin: 1rem 0; | |
| 140 | - | overflow-x: auto; | |
| 141 | - | background-color: var(--pre) !important; | |
| 142 | - | } | |
| 143 | - | ||
| 144 | 118 | small { | |
| 145 | 119 | font-size: 0.8rem; | |
| 146 | 120 | } |
| ... | ... | @@ -263,6 +237,19 @@ figure { | |
| 263 | 237 | margin: 0; | |
| 264 | 238 | } | |
| 265 | 239 | ||
| 240 | + | .mono { | |
| 241 | + | font-family: ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, | |
| 242 | + | monospace; | |
| 243 | + | } | |
| 244 | + | ||
| 245 | + | .box { | |
| 246 | + | border-radius: 5px; | |
| 247 | + | padding: 1rem; | |
| 248 | + | margin: 1rem 0; | |
| 249 | + | overflow-x: auto; | |
| 250 | + | background-color: var(--pre) !important; | |
| 251 | + | } | |
| 252 | + | ||
| 266 | 253 | .color-green { | |
| 267 | 254 | color: var(--success); | |
| 268 | 255 | } |
| ... | ... | @@ -271,10 +258,6 @@ figure { | |
| 271 | 258 | color: var(--error); | |
| 272 | 259 | } | |
| 273 | 260 | ||
| 274 | - | .post-date { | |
| 275 | - | width: 130px; | |
| 276 | - | } | |
| 277 | - | ||
| 278 | 261 | .text-grey { | |
| 279 | 262 | color: var(--grey); | |
| 280 | 263 | } |
| ... | ... | @@ -315,10 +298,6 @@ figure { | |
| 315 | 298 | font-style: italic; | |
| 316 | 299 | } | |
| 317 | 300 | ||
| 318 | - | .inline { | |
| 319 | - | display: inline; | |
| 320 | - | } | |
| 321 | - | ||
| 322 | 301 | .flex { | |
| 323 | 302 | display: flex; | |
| 324 | 303 | } |
| ... | ... | @@ -335,16 +314,8 @@ figure { | |
| 335 | 314 | margin-top: 0.5rem; | |
| 336 | 315 | } | |
| 337 | 316 | ||
| 338 | - | .mb { | |
| 339 | - | margin-bottom: 0.5rem; | |
| 340 | - | } | |
| 341 | - | ||
| 342 | - | .mr { | |
| 343 | - | margin-right: 0.5rem; | |
| 344 | - | } | |
| 345 | - | ||
| 346 | - | .ml { | |
| 347 | - | margin-left: 0.5rem; | |
| 317 | + | .mt-lg { | |
| 318 | + | margin-top: 1.35rem; | |
| 348 | 319 | } | |
| 349 | 320 | ||
| 350 | 321 | .my { |
| ... | ... | @@ -357,6 +328,11 @@ figure { | |
| 357 | 328 | margin-bottom: 1rem; | |
| 358 | 329 | } | |
| 359 | 330 | ||
| 331 | + | .my-sm { | |
| 332 | + | margin-top: 5px; | |
| 333 | + | margin-bottom: 5px; | |
| 334 | + | } | |
| 335 | + | ||
| 360 | 336 | .mx { | |
| 361 | 337 | margin-left: 0.5rem; | |
| 362 | 338 | margin-right: 0.5rem; |
| ... | ... | @@ -375,23 +351,19 @@ figure { | |
| 375 | 351 | flex: 1; | |
| 376 | 352 | } | |
| 377 | 353 | ||
| 378 | - | .layout-aside { | |
| 379 | - | max-width: 50rem; | |
| 354 | + | .gap { | |
| 355 | + | gap: 1rem; | |
| 380 | 356 | } | |
| 381 | 357 | ||
| 382 | - | .layout-aside aside { | |
| 383 | - | width: 200px; | |
| 358 | + | .border-b { | |
| 359 | + | border-bottom: 1px solid #666; | |
| 384 | 360 | } | |
| 385 | 361 | ||
| 386 | - | .layout-aside img { | |
| 387 | - | border-radius: 5px; | |
| 362 | + | .tree-size { | |
| 363 | + | width: 60px; | |
| 388 | 364 | } | |
| 389 | 365 | ||
| 390 | - | #readme { | |
| 391 | - | display: none; | |
| 392 | - | } | |
| 393 | - | ||
| 394 | - | @media only screen and (max-width: 600px) { | |
| 366 | + | @media only screen and (max-width: 900px) { | |
| 395 | 367 | body { | |
| 396 | 368 | padding: 1rem; | |
| 397 | 369 | } |