8 files changed,
205 insertions(+),
404 deletions(-)
Author:
Oleksandr Smirnov
olexsmir@gmail.com
Committed at:
2026-02-04 23:34:07 +0200
Authored at:
2026-02-04 22:19:18 +0200
Change ID:
tttvrxzspmyvtkllsrmuowklonwryvou
Parent:
1d546b3
M
web/static/style.css
路路路 7 7 --gray: #6a6a6a; 8 8 --dark: #444; 9 9 --darker: #222; 10 + --diff-add: green; 11 + --diff-del: red; 10 12 11 13 --sans-font: -apple-system, BlinkMacSystemFont, "Inter", "Roboto", "Segoe UI", sans-serif; 12 - --display-font: -apple-system, BlinkMacSystemFont, "Inter", "Roboto", "Segoe UI", sans-serif; 13 14 --mono-font: 'SF Mono', SFMono-Regular, ui-monospace, 'DejaVu Sans Mono', 'Roboto Mono', Menlo, Consolas, monospace; 14 15 } 15 16 路路路 27 28 } 28 29 } 29 30 31 +* { 32 + box-sizing: border-box; 33 + padding: 0; 34 + margin: 0; 35 +} 36 + 30 37 html { 31 38 background: var(--white); 32 39 -webkit-text-size-adjust: none; 40 + -webkit-font-smoothing: antialiased; 41 + -moz-osx-font-smoothing: grayscale; 33 42 font-family: var(--sans-font); 34 - font-weight: 380; 43 + font-weight: 400; 35 44 } 36 45 37 -pre { 38 - font-family: var(--mono-font); 39 - overflow-x: auto; 46 +body { 47 + max-width: 1200px; 48 + padding: 0 13px; 49 + margin: 40px auto; 40 50 } 41 51 42 52 ::selection { 43 53 background: var(--medium-gray); 44 - opacity: 0.3; 45 54 } 46 55 47 -* { 48 - box-sizing: border-box; 49 - padding: 0; 50 - margin: 0; 56 +a { 57 + text-decoration: none; 58 + word-wrap: break-word; 59 + color: var(--darker); 60 + border-bottom: 0; 51 61 } 52 62 53 -body { 54 - max-width: 1200px; 55 - padding: 0 13px; 56 - margin: 40px auto; 63 +a:hover { 64 + border-bottom: 1.5px solid var(--gray); 65 +} 66 + 67 +pre { 68 + font-family: var(--mono-font); 69 + overflow-x: auto; 57 70 } 58 71 59 72 main, footer { 60 - font-size: 1rem; 61 73 padding: 0; 62 74 line-height: 160%; 63 -} 64 - 65 -header h1, h2, h3 { 66 - font-family: var(--display-font); 67 75 } 68 76 69 77 h2 { font-weight: 400; } 路路路 76 84 77 85 nav { padding: 0.4rem 0 1.5rem 0; } 78 86 nav ul { 79 - padding: 0; 80 - margin: 0; 81 87 list-style: none; 82 88 padding-bottom: 20px; 83 89 } 路路路 87 93 display: inline-block; 88 94 } 89 95 90 -.repo-header { 91 - margin-bottom: 1.25rem; 92 -} 96 +/* utilities */ 93 97 94 -.repo-breadcrumb { 95 - color: var(--gray); 96 -} 98 +.nowrap { white-space: nowrap; } 99 +.fill { width: 100%; } 100 +.muted { color: var(--gray); } 97 101 98 -.repo-breadcrumb:before { 99 - content: "<"; /* TODO: add an arrow */ 100 -} 102 +.size { text-align: right; } 101 103 102 -.repo-breadcrumb a { 103 - color: var(--gray); 104 -} 105 - 106 -.repo-name { 107 - font-size: 1.6rem; 108 - line-height: 1.1; 109 - margin-top: 0.25rem; 110 -} 111 - 112 -.repo-header .desc { 113 - color: var(--gray); 114 - margin-top: 0.35rem; 115 -} 116 - 117 -.repo-header .repo-nav { 118 - padding: 0.5rem 0 0 0; 119 -} 120 - 121 -.repo-header .repo-nav ul { 122 - padding-bottom: 0; 104 +.mode, 105 +.size, 106 +.commit-hash, 107 +.commit-email, 108 +.diff-type { 109 + font-family: var(--mono-font); 123 110 } 124 111 125 -a { 126 - margin: 0; 127 - padding: 0; 128 - box-sizing: border-box; 129 - text-decoration: none; 130 - word-wrap: break-word; 131 - color: var(--darker); 132 - border-bottom: 0; 133 -} 134 - 135 -a:hover { 136 - border-bottom: 1.5px solid var(--gray); 137 -} 138 - 139 -/* index page */ 140 -.index { 112 +/* tables */ 113 +.table { 141 114 width: 100%; 142 - margin-top: 2em; 143 115 border-collapse: collapse; 144 116 table-layout: auto; 145 117 } 146 118 147 -.index th { 119 +.table th { 148 120 text-align: left; 149 121 font-weight: 500; 150 122 border-bottom: 1.5px solid var(--medium-gray); 151 123 padding: 0.25em 0.5em; 152 124 } 153 125 154 -.index td { 126 +.table td { 155 127 border-bottom: 1px solid var(--light-gray); 156 128 padding: 0.25em 0.5em; 157 129 vertical-align: top; 158 130 } 159 131 160 -.index .url { white-space: nowrap; } 161 -.index .desc { width: 100%; } 162 -.index .desc .unset { color: var(--gray); } 163 -.index .idle { white-space: nowrap; } 132 +.table tbody tr:hover { 133 + background: var(--light); 134 +} 164 135 165 - 166 -.index tbody tr.nohover:hover { 136 +.table tbody tr.nohover:hover { 167 137 background: transparent; 168 138 } 169 139 170 -.index tbody tr:hover { 171 - background: var(--light); 140 +/* tooltip */ 141 +.tooltip { 142 + display: none; 143 + position: absolute; 144 + left: 0; 145 + top: 100%; 146 + margin-top: 0.25rem; 147 + padding: 0.5rem 0.7rem; 148 + background: var(--white); 149 + border: 1px solid var(--medium-gray); 150 + border-radius: 4px; 151 + box-shadow: 0 2px 8px rgba(0,0,0,0.1); 152 + z-index: 10; 153 + font-size: 0.85em; 154 + line-height: 1.3; 155 + max-width: 48ch; 156 + white-space: nowrap; 172 157 } 173 158 174 -/* tree page */ 159 +.author, .age { position: relative; } 175 160 176 -.tree { 177 - width: 100%; 178 - margin-bottom: 2em; 179 - border-collapse: collapse; 180 - table-layout: auto; 161 +.author:hover .tooltip, 162 +.author:focus-within .tooltip, 163 +.age:hover .tooltip, 164 +.age:focus-within .tooltip { 165 + display: block; 181 166 } 182 167 183 -.tree th { 184 - text-align: left; 185 - font-weight: 500; 186 - border-bottom: 1.5px solid var(--medium-gray); 187 - padding: 0.25em 0.5em; 168 +/* box */ 169 +.box { 170 + background: var(--light-gray); 171 + padding: 0.6rem; 188 172 } 189 173 190 -.tree td { 191 - border-bottom: 1px solid var(--light-gray); 192 - padding: 0.25em 0.5em; 193 - vertical-align: top; 174 +.box + .box { 175 + margin-top: 0.8rem; 194 176 } 195 177 196 -.tree .mode { 197 - white-space: nowrap; 198 - font-family: var(--mono-font); 199 -} 178 +/* repo header */ 179 +.repo-header { margin-bottom: 1.25rem; } 200 180 201 -.tree .size { 202 - white-space: nowrap; 203 - text-align: right; 204 - font-family: var(--mono-font); 181 +.repo-breadcrumb, 182 +.repo-breadcrumb a { 183 + color: var(--gray); 205 184 } 206 185 207 -.tree .name { width: 100%; } 186 +.repo-breadcrumb:before { content: "<"; } 208 187 209 -.tree tbody tr.nohover:hover { 210 - background: transparent; 188 +.repo-name { 189 + font-size: 1.6rem; 190 + line-height: 1.1; 191 + margin-top: 0.25rem; 211 192 } 212 193 213 -.tree tbody tr:hover { 214 - background: var(--light); 215 -} 194 +.repo-header .desc { margin-top: 0.35rem; } 195 +.repo-header .repo-nav { padding: 0.5rem 0 0 0; } 196 +.repo-header .repo-nav ul { padding-bottom: 0; } 216 197 217 -/* log/repo page */ 198 +/* index page */ 199 +.index { margin-top: 2em; } 218 200 201 +/* repo index */ 219 202 .repo-index { 220 203 display: flex; 221 204 gap: 1.25rem; 222 - margin-bottom: 2em; 223 205 align-items: flex-start; 224 206 } 225 207 226 208 .repo-index-main { 227 209 flex: 0 0 72ch; 210 +} 211 + 212 +.repo-index-main .box { 213 + width: 100%; 228 214 } 229 215 230 216 .repo-index-side { 路路路 237 223 padding: 0; 238 224 } 239 225 240 -.repo-index-main .box { 241 - width: 100%; 242 -} 243 - 244 -.box { 245 - background: var(--light-gray); 246 - padding: 0.6rem; 247 -} 248 - 249 -.box + .box { 250 - margin-top: 0.8rem; 251 -} 252 - 253 -.log { 254 - width: 100%; 255 - margin-bottom: 2em; 256 - border-collapse: collapse; 257 - table-layout: auto; 258 -} 259 - 260 -.log th { 261 - text-align: left; 262 - font-weight: 500; 263 - border-bottom: 1.5px solid var(--medium-gray); 264 - padding: 0.25em 0.5em; 265 -} 266 - 267 -.log td { 268 - border-bottom: 1px solid var(--light-gray); 269 - padding: 0.25em 0.5em; 270 - vertical-align: top; 271 -} 272 - 273 -.log .msg { width: 100%; } 274 -.log .author { white-space: nowrap; position: relative; } 275 -.log .age { white-space: nowrap; } 276 - 226 +/* log page */ 277 227 .log td.author .author-short { 278 228 display: inline-block; 279 229 max-width: 25ch; 280 - white-space: nowrap; 281 230 overflow: hidden; 282 231 text-overflow: ellipsis; 283 232 vertical-align: top; 284 233 } 285 234 286 -/* Unified tooltip system */ 287 -.tooltip { 288 - display: none; 289 - position: absolute; 290 - left: 0; 291 - top: 100%; 292 - margin-top: 0.25rem; 293 - padding: 0.5rem 0.7rem; 294 - background: var(--white); 295 - border: 1px solid var(--medium-gray); 296 - border-radius: 4px; 297 - box-shadow: 0 2px 8px rgba(0,0,0,0.1); 298 - z-index: 10; 299 - font-size: 0.85em; 300 - line-height: 1.3; 301 - max-width: 48ch; 302 - white-space: nowrap; 235 +/* tree */ 236 +.tree, 237 +.log, 238 +.repo-index { 239 + margin-bottom: 2em; 303 240 } 304 241 305 -.author, .age { position: relative; } 306 -.author:hover .tooltip, 307 -.author:focus-within .tooltip, 308 -.age:hover .tooltip, 309 -.age:focus-within .tooltip { 310 - display: block; 311 -} 312 - 313 -.log tbody tr.nohover:hover { 314 - background: transparent; 242 +/* file View */ 243 +.file-wrapper { 244 + display: flex; 245 + flex-direction: row; 246 + gap: 1rem; 247 + padding: 0 0.5rem; 248 + background: var(--light-gray); 249 + overflow-x: auto; 315 250 } 316 251 317 -.log tbody tr:hover { 318 - background: var(--light); 252 +.line-numbers { 253 + white-space: pre-line; 254 + -moz-user-select: -moz-none; 255 + -khtml-user-select: none; 256 + -webkit-user-select: none; 257 + -o-user-select: none; 258 + user-select: none; 259 + padding-right: 1ch; 319 260 } 320 261 321 -.clone-url pre { 262 +.file-content { 263 + padding-left: 1.5ch; 264 + overflow-y: hidden; 322 265 overflow-x: auto; 323 - white-space: pre; 324 - max-width: 100%; 325 266 } 326 267 327 -.mode, .size { 328 - font-family: var(--mono-font); 329 -} 330 -.size { 331 - text-align: right; 268 +.line-numbers pre, 269 +.file-content pre { 270 + margin: 0; 271 + line-height: 1.5; 332 272 } 333 273 334 -/* readme stuff */ 274 +/* commit */ 275 +.commit { margin-bottom: 1rem; } 335 276 336 -.readme pre { 277 +.commit pre { 278 + padding-bottom: 0; 337 279 white-space: pre-wrap; 338 - overflow-x: auto; 339 280 } 340 281 341 -.readme { 342 - padding: 0.5rem; 282 +.commit .box { margin-bottom: 0.25rem; } 283 +.commit .commit-info { 284 + padding-bottom: 0.25rem; 343 285 } 344 286 345 -.readme ul { 346 - padding: revert; 287 +.commit-message { 288 + margin-top: 0.25rem; 289 + font-size: 1rem; 290 + line-height: 1.35; 291 + margin-bottom: 0; 347 292 } 348 293 349 -.readme img { 350 - max-width: 100%; 294 +.commit-info { 295 + color: var(--gray); 296 + font-size: 0.85rem; 351 297 } 352 298 353 -.diff { 354 - margin: 1rem 0 1rem 0; 355 - padding: 0.6rem; 356 - border-bottom: 1.5px solid var(--medium-gray); 357 - background: var(--light-gray); 358 -} 299 +.commit-date { float: right; } 359 300 360 -.diff pre { 361 - overflow-x: auto; 362 -} 301 +.commit-email:before { content: '<'; } 302 +.commit-email:after { content: '>'; } 363 303 364 304 .commit-refs { 365 - border-collapse: collapse; 366 305 margin: 0.5rem 0 1rem 0; 367 306 } 368 307 369 308 .commit-refs td { 370 309 padding: 0.15rem 0.5rem 0.15rem 0; 371 - vertical-align: top; 310 + border: none; 372 311 } 373 312 374 313 .commit-refs td.label { 375 - white-space: nowrap; 376 314 padding-right: 1rem; 377 315 } 378 316 379 -.diff-stat { 380 - padding: 1rem 0 1rem 0; 317 +/* diff */ 318 +.diff { 319 + margin: 1rem 0 1rem 0; 320 + padding: 0.6rem; 321 + border-bottom: 1.5px solid var(--medium-gray); 322 + background: var(--light-gray); 381 323 } 382 324 383 -.jump { 384 - margin-top: 0.5rem; 385 -} 325 +.diff-stat { padding: 1rem 0 1rem 0; } 326 +.diff-add { color: var(--diff-add); } 327 +.diff-del { color: var(--diff-del); } 328 +.diff-mod { color: var(--cyan); } 329 +.diff-noop { color: var(--gray); } 386 330 387 -.jump-table { 388 - width: 100%; 389 - border-collapse: collapse; 390 - table-layout: auto; 391 - margin-top: 0.25rem; 392 -} 331 +.jump { margin-top: 0.5rem; } 332 +.jump-table { margin-top: 0.25rem; } 393 333 394 334 .jump-table td { 395 335 padding: 0.15rem 0.5rem; 396 - border-bottom: 1px solid var(--medium-gray); 397 - vertical-align: top; 336 + border-color: var(--medium-gray); 398 337 } 399 338 400 339 .jump-table .diff-type { 401 - font-family: var(--mono-font); 402 - white-space: nowrap; 403 340 width: 2ch; 404 341 } 405 342 406 -.jump-table .path { 407 - width: 100%; 408 -} 409 - 410 -.commit-hash, .commit-email { 411 - font-family: var(--mono-font); 412 -} 413 - 414 -.commit-email:before { 415 - content: '<'; 416 -} 417 - 418 -.commit-email:after { 419 - content: '>'; 420 -} 421 - 422 -.commit { 423 - margin-bottom: 1rem; 424 -} 425 - 426 -.commit pre { 427 - padding-bottom: 0; 428 - white-space: pre-wrap; 429 -} 430 - 431 -.commit-message { 432 - margin-top: 0.25rem; 433 - font-size: 1rem; 434 - line-height: 1.35; 435 - margin-bottom: 0; 436 -} 437 - 438 -.commit .box { 439 - margin-bottom: 0.25rem; 440 -} 441 - 442 -.commit .commit-info { 443 - padding-bottom: 0.25rem; 444 -} 445 - 446 -.diff-add { 447 - color: green; 448 -} 449 - 450 -.diff-del { 451 - color: red; 452 -} 453 - 454 -.diff-noop { 455 - color: var(--gray); 456 -} 457 - 343 +/* refs */ 458 344 .ref { 459 - font-family: var(--sans-font); 460 345 font-size: 1rem; 461 346 color: var(--gray); 462 347 display: inline-block; 路路路 464 349 } 465 350 466 351 .refs pre { 467 - white-space: pre-wrap; 468 352 padding-bottom: 0.5rem; 353 + white-space: pre-wrap; 469 354 } 470 355 471 356 .refs strong { 472 357 padding-right: 1em; 473 358 } 474 359 475 -.line-numbers { 476 - white-space: pre-line; 477 - -moz-user-select: -moz-none; 478 - -khtml-user-select: none; 479 - -webkit-user-select: none; 480 - -o-user-select: none; 481 - user-select: none; 482 - display: flex; 483 - float: left; 484 - flex-direction: column; 485 - margin-right: 1ch; 486 -} 487 - 488 -.file-wrapper { 489 - display: flex; 490 - flex-direction: row; 491 - grid-template-columns: 1rem minmax(0, 1fr); 492 - gap: 1rem; 493 - padding: 0.5rem; 494 - background: var(--light-gray); 495 - overflow-x: auto; 496 -} 497 - 498 -.file-content { 499 - background: var(--light-gray); 500 - overflow-y: hidden; 501 - overflow-x: auto; 502 -} 503 - 504 -.diff-type { 505 - font-family: var(--mono-font); 506 -} 507 - 508 -.diff-type.diff-add { color: green; } 509 -.diff-type.diff-del { color: red; } 510 -.diff-type.diff-mod { color: var(--cyan); } 511 - 512 -.commit-info { 513 - color: var(--gray); 514 - font-size: 0.85rem; 515 -} 516 - 517 -.commit-date { 518 - float: right; 519 -} 360 +/* readme */ 361 +.readme { padding: 0.5rem; } 362 +.readme pre { white-space: pre-wrap; } 363 +.readme ul { padding: revert; } 364 +.readme img { max-width: 100%; } 520 365 521 366 @media (max-width: 600px) { 522 - .index { 523 - grid-row-gap: 0.8em; 524 - } 525 - 526 367 .repo-index { 527 368 flex-direction: column; 528 369 } 529 370 530 - .repo-index-main { 531 - flex: none; 532 - } 533 - 371 + .repo-index-main, 534 372 .repo-index-side { 535 373 flex: none; 536 - } 537 - 538 - .log { 539 - grid-template-columns: 1fr; 540 - grid-row-gap: 0em; 541 - } 542 - 543 - .index { 544 - grid-template-columns: 1fr; 545 - grid-row-gap: 0em; 546 - } 547 - 548 - .index-name:not(:first-child) { 549 - padding-top: 1.5rem; 374 + width: 100%; 550 375 } 551 376 552 377 .commit-info:not(:last-child) {
M
web/templates/index.html
路路路 11 11 </header> 12 12 <body> 13 13 <main> 14 - <table class="index"> 14 + <table class="table index"> 15 15 <thead> 16 16 <tr class="nohover"> 17 - <th class="url">Name</th> 18 - <th class="desc">Description</th> 19 - <th class="idle">Last update</th> 17 + <th class="nowrap">Name</th> 18 + <th class="fill">Description</th> 19 + <th class="nowrap">Last update</th> 20 20 </tr> 21 21 </thead> 22 22 <tbody> 23 23 {{ range .repos }} 24 24 <tr> 25 - <td class="url"><a href="/{{ .Name }}">{{ .Name }}</a></td> 26 - <td class="desc">{{- if .Desc }}{{ .Desc }}{{- else }}<span class="unset">No description set</span>{{- end }} 27 - <td class="idle">{{ humanizeTime .LastCommit }}</td> 25 + <td class="nowrap"><a href="/{{ .Name }}">{{ .Name }}</a></td> 26 + <td class="fill">{{- if .Desc }}{{ .Desc }}{{- else }}<span class="muted">No description set</span>{{- end }} 27 + <td class="nowrap">{{ humanizeTime .LastCommit }}</td> 28 28 </tr> 29 29 {{ end}} 30 30 </tbody>
M
web/templates/repo_commit.html
路路路 16 16 <pre class="commit-message">{{- .commit.Message -}}</pre> 17 17 </div> 18 18 19 - <table class="commit-refs"> 19 + <table class="table commit-refs"> 20 20 <tbody> 21 21 <tr> 22 - <td class="label"><strong>commit</strong></td> 22 + <td class="label nowrap"><strong>commit</strong></td> 23 23 <td> 24 24 <span class="commit-hash">{{ .commit.This }}</span> 25 25 </td> 26 26 </tr> 27 27 {{ if .commit.Parent }} 28 28 <tr> 29 - <td class="label"><strong>parent</strong></td> 29 + <td class="label nowrap"><strong>parent</strong></td> 30 30 <td> 31 31 <span class="commit-hash">{{ .commit.Parent }}</span> 32 32 </td> 路路路 44 44 45 45 <div class="jump"> 46 46 <strong>jump to</strong> 47 - <table class="jump-table"> 47 + <table class="table jump-table"> 48 48 <tbody> 49 49 {{ range .diff }} 50 50 {{ $path := .Name.New }} 路路路 55 55 {{ if .IsDelete }}<span class="diff-type diff-del">D</span>{{ end }} 56 56 {{ if not (or .IsNew .IsDelete) }}<span class="diff-type diff-mod">M</span>{{ end }} 57 57 </td> 58 - <td class="path"> 58 + <td class="fill"> 59 59 <a href="#{{ $path }}"> 60 60 {{ if and .Name.Old .Name.New }}{{ .Name.Old }} → {{ .Name.New }}{{ else }}{{ $path }}{{ end }} 61 61 </a>
M
web/templates/repo_file.html
路路路 7 7 <body> 8 8 <main> 9 9 <p>{{ .path }} (<a style="color: gray" href="?raw=true">view raw</a>)</p> 10 - {{if .chroma }} 11 - <div class="chroma-file-wrapper"> 12 - {{ .content }} 13 - </div> 14 - {{else}} 15 10 <div class="file-wrapper"> 16 11 <table> 17 12 <tbody><tr> 18 13 <td class="line-numbers"> 19 - <pre> 20 - {{- range .linecount }} 21 - <a id="L{{ . }}" href="#L{{ . }}">{{ . }}</a> 22 - {{- end -}} 23 - </pre> 14 + <pre>{{- range .linecount }} 15 +<a id="L{{ . }}" href="#L{{ . }}">{{ . }}</a> 16 +{{- end -}}</pre> 24 17 </td> 25 18 <td class="file-content"> 26 - <pre> 27 - {{- .content -}} 28 - </pre> 19 + <pre>{{- .content -}}</pre> 29 20 </td> 30 21 </tbody></tr> 31 22 </table> 32 23 </div> 33 - {{end}} 34 24 </main> 35 25 </body> 36 26 </html>
M
web/templates/repo_log.html
路路路 9 9 <main> 10 10 {{ $repo := .name }} 11 11 12 - <table class="log"> 12 + <table class="table log"> 13 13 <thead> 14 14 <tr class="nohover"> 15 - <th class="msg">Message</th> 16 - <th class="author">Author</th> 17 - <th class="hash">Hash</th> 18 - <th class="age">Age</th> 15 + <th class="fill">Message</th> 16 + <th class="author nowrap">Author</th> 17 + <th>Hash</th> 18 + <th class="age nowrap">Age</th> 19 19 </tr> 20 20 </thead> 21 21 <tbody> 22 22 {{ range .commits }} 23 23 <tr> 24 - <td class="msg"> 24 + <td class="fill"> 25 25 <a href="/{{ $repo }}/commit/{{ .Hash }}">{{ commitSummary .Message }}</a> 26 26 </td> 27 - <td class="author"> 27 + <td class="author nowrap"> 28 28 <span class="author-short"> 29 29 {{ .AuthorName }} <a href="mailto:{{ .AuthorEmail }}" class="commit-email">{{ .AuthorEmail }}</a> 30 30 </span> 路路路 36 36 <td class=""> 37 37 <a href="/{{ $repo }}/commit/{{ .Hash }}">{{ .HashShort }}</a> 38 38 </td> 39 - <td class="age"> 40 - <span class="age-display">{{ humanizeTime .Committed }}</span> 39 + <td class="age nowrap"> 40 + {{ humanizeTime .Committed }} 41 41 <span class="tooltip" role="tooltip">{{ .Committed }}</span> 42 42 </td> 43 43 </tr>
M
web/templates/repo_tree.html
路路路 11 11 {{ $ref := .ref }} 12 12 {{ $parent := .parent }} 13 13 14 - <table class="tree"> 14 + <table class="table tree"> 15 15 <thead> 16 16 <tr class="nohover"> 17 - <th class="mode">mode</th> 18 - <th class="size">size</th> 19 - <th class="name">name</th> 17 + <th class="mode nowrap">mode</th> 18 + <th class="size nowrap">size</th> 19 + <th class="fill">name</th> 20 20 </tr> 21 21 </thead> 22 22 <tbody> 23 23 {{ if $parent }} 24 24 <tr> 25 - <td class="mode"></td> 26 - <td class="size"></td> 27 - <td class="name"><a href="/{{ $repo }}/tree/{{ $ref }}/{{ .dotdot }}">..</a></td> 25 + <td class="mode nowrap"></td> 26 + <td class="size nowrap"></td> 27 + <td class="fill"><a href="/{{ $repo }}/tree/{{ $ref }}/{{ .dotdot }}">..</a></td> 28 28 </tr> 29 29 {{ end }} 30 30 31 31 {{ range .files }} 32 32 {{ if not .IsFile }} 33 33 <tr> 34 - <td class="mode">{{ .Mode }}</td> 35 - <td class="size">{{ .Size }}</td> 36 - <td class="name"> 34 + <td class="mode nowrap">{{ .Mode }}</td> 35 + <td class="size nowrap">{{ .Size }}</td> 36 + <td class="fill"> 37 37 {{ if $parent }} 38 38 <a href="/{{ $repo }}/tree/{{ $ref }}/{{ $parent }}/{{ .Name }}">{{ .Name }}/</a> 39 39 {{ else }} 路路路 47 47 {{ range .files }} 48 48 {{ if .IsFile }} 49 49 <tr> 50 - <td class="mode">{{ .Mode }}</td> 51 - <td class="size">{{ .Size }}</td> 52 - <td class="name"> 50 + <td class="mode nowrap">{{ .Mode }}</td> 51 + <td class="size nowrap">{{ .Size }}</td> 52 + <td class="fill"> 53 53 {{ if $parent }} 54 54 <a href="/{{ $repo }}/blob/{{ $ref }}/{{ $parent }}/{{ .Name }}">{{ .Name }}</a> 55 55 {{ else }}