Flow and file pages: use the theme's ink and mute colours (--text does not exist), plain code for state hashes af9c6ca11c49
- Author
- Andy McCall @andymccall <[email protected]>
- When
- · 2026-09-28 11:57 UTC
- Signature
- ✔ signed by Andy McCall
- Hash
af9c6ca11c49bbc6b129307fcf16edfebac25f722fff4b5a8eb2636017b846c5- Depends on
- 42fa95540468 6ae41081ccd3 d23464c0ac60
- Depended on by
- d9b3b84605a4 745d225de344 4f6925337848 1edac4b68c6d a0d4bbfbedd1
- In bookmarks
- api-unknown-fields cancel-landed-runs clear-waiting close-proposal-140 diffusion-pin-bookmark draft-ready image-check job-waits main oh-comment-body-file proposal-list-fast run-one-job wiki-says-so
- In tags
- v0.1.0 v0.2.0 v0.3.0 v0.3.1 v0.4.0 v0.4.1 v0.4.2 v0.5.0 v0.5.1 v0.5.2 v0.6.0 v0.6.1 v0.7.0 v0.8.0 v0.9.0 v0.9.1 v0.9.11 v0.9.15 v0.9.16 v0.9.19 v0.9.2 v0.9.20 v0.9.21 v0.9.22 v0.9.23 v0.9.24 v0.9.3 v0.9.4 v0.9.5 v0.9.6 v0.9.7 v0.9.8 v0.9.9
- Edits
- 9 atoms, 0 tree operations, 3 files
Browse the tree at this change
modified templates/flow_run.html +1 −1
| … | 6 unchanged lines |
||
| 7 | 7 | {% block content %} |
|
| 8 | 8 | <div class="head"> |
|
| 9 | 9 | <h1><span class="flow-glyph st-{{ run.status }}" data-run-glyph>{{ crate::web::flow::glyph(run.status) }}</span> Run #{{ run.id }} <small data-run-status>{{ run.status }}</small></h1> |
|
| 10 | - | <p class="small mute"><span class="lbl lbl-bm">{{ run.bookmark }}</span> at <a class="px" href="{{ repo.url }}/tree/{{ run.heads }}" title="{{ run.state }}">{{ run.state|short }}</a> · pushed by {{ run.actor }} <time title="{{ run.created_ms|when_i }}">{{ run.created_ms|ago_i }}</time> · {{ duration }}{% if !run.pipeline_hash.is_empty() %} · pipeline <code title="{{ run.pipeline_hash }}">{{ run.pipeline_hash|short }}</code>{% endif %} · <a href="{{ repo.url }}/file/{{ run.heads }}/.flow/pipeline.kdl">.flow/pipeline.kdl</a> · <a href="{{ repo.url }}/flow">all runs</a></p> |
|
| 10 | + | <p class="small mute"><span class="lbl lbl-bm">{{ run.bookmark }}</span> at <a href="{{ repo.url }}/tree/{{ run.heads }}" title="state {{ run.state }}"><code>{{ run.state|short }}</code></a> · pushed by {{ run.actor }} <time title="{{ run.created_ms|when_i }}">{{ run.created_ms|ago_i }}</time> · {{ duration }}{% if !run.pipeline_hash.is_empty() %} · pipeline <code title="{{ run.pipeline_hash }}">{{ run.pipeline_hash|short }}</code>{% endif %} · <a href="{{ repo.url }}/file/{{ run.heads }}/.flow/pipeline.kdl">.flow/pipeline.kdl</a> · <a href="{{ repo.url }}/flow">all runs</a></p> |
|
| 11 | 11 | </div> |
|
| 12 | 12 | {% if run.status == "error" %} |
|
| 13 | 13 | <section class="panel"><div class="strip bad">The pipeline is not valid, so nothing ran.</div><pre class="snippet">{{ run.error }}</pre><p class="small mute">Run <code>flow check</code> locally to see the same problems.</p></section> |
|
| … | 26 unchanged lines |
modified templates/flow_runs.html +1 −1
| … | 34 unchanged lines |
||
| 35 | 35 | <td><a href="{{ repo.url }}/flow/{{ row.r.id }}"><strong>#{{ row.r.id }}</strong></a> <span class="small mute">{{ row.r.status }}</span></td> |
|
| 36 | 36 | <td class="flow-dots">{% for (n, s) in row.jobs %}<span class="flow-glyph st-{{ s }}" title="{{ n }}: {{ s }}">{{ crate::web::flow::glyph(s) }}</span>{% endfor %}{% if row.r.status == "error" %}<span class="small bad">pipeline invalid</span>{% endif %}</td> |
|
| 37 | 37 | <td><span class="lbl lbl-bm">{{ row.r.bookmark }}</span></td> |
|
| 38 | - | <td><a class="px" href="{{ repo.url }}/tree/{{ row.r.heads }}" title="{{ row.r.state }}">{{ row.r.state|short }}</a></td> |
|
| 38 | + | <td><a href="{{ repo.url }}/tree/{{ row.r.heads }}" title="state {{ row.r.state }}"><code>{{ row.r.state|short }}</code></a></td> |
|
| 39 | 39 | <td>{{ row.r.actor }}</td> |
|
| 40 | 40 | <td><time title="{{ row.r.created_ms|when_i }}">{{ row.r.created_ms|ago_i }}</time></td> |
|
| 41 | 41 | <td class="small mute">{{ row.duration }}</td> |
|
| … | 7 unchanged lines |
modified templates/style.css +8 −7
| … | 389 unchanged lines |
||
| 390 | 390 | .file-side { position: sticky; top: 12px; max-height: calc(100vh - 24px); overflow: auto; font-size: 13px; background: var(--panel); border: 1px solid var(--line); padding: 8px 0; } |
|
| 391 | 391 | .file-side .side-root { display: block; padding: 2px 12px 6px; font-weight: 600; } |
|
| 392 | 392 | .file-side ul { list-style: none; margin: 0; padding: 0; } |
|
| 393 | - | .file-side li a { display: block; padding: 2px 12px 2px calc(12px + var(--d, 0) * 14px); color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } |
|
| 393 | + | .file-side li a { display: block; padding: 2px 12px 2px calc(12px + var(--d, 0) * 14px); color: var(--ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } |
|
| 394 | 394 | .file-side li a:hover { background: var(--soft); text-decoration: none; } |
|
| 395 | 395 | .file-side li.here a { background: color-mix(in srgb, var(--acc) 16%, transparent); font-weight: 600; box-shadow: inset 3px 0 0 var(--acc); } |
|
| 396 | 396 | .file-side .glyph { color: var(--dim); font-size: 10px; } |
|
| … | 19 unchanged lines |
||
| 416 | 416 | .flow-glyph.st-passed, .node.st-passed .g { color: var(--ok); fill: var(--ok); } |
|
| 417 | 417 | .flow-glyph.st-failed, .flow-glyph.st-error, .node.st-failed .g, .node.st-error .g { color: var(--bad); fill: var(--bad); } |
|
| 418 | 418 | .flow-glyph.st-running, .node.st-running .g { color: var(--acc); fill: var(--acc); } |
|
| 419 | - | .flow-glyph.st-queued, .flow-glyph.st-skipped, .node.st-queued .g, .node.st-skipped .g { color: var(--dim); fill: var(--dim); } |
|
| 419 | + | .flow-glyph.st-queued, .flow-glyph.st-skipped, .node.st-queued .g, .node.st-skipped .g { color: var(--mute); fill: var(--mute); } |
|
| 420 | 420 | .flow-glyph.st-running, .node.st-running .g { animation: flow-pulse 1.2s ease-in-out infinite; } |
|
| 421 | 421 | @keyframes flow-pulse { 50% { opacity: .35; } } |
|
| 422 | 422 | @media (prefers-reduced-motion: reduce) { .flow-glyph.st-running, .node.st-running .g { animation: none; } } |
|
| … | 10 unchanged lines |
||
| 433 | 433 | .flow-graph .node.st-running rect { stroke: var(--acc); fill: color-mix(in srgb, var(--acc) 8%, var(--panel)); } |
|
| 434 | 434 | .flow-graph .node.st-skipped rect { stroke-dasharray: 4 3; } |
|
| 435 | 435 | .flow-graph .node .g { font-size: 18px; } |
|
| 436 | - | .flow-graph .node .name { fill: var(--text); font-size: 14px; font-weight: 600; } |
|
| 437 | - | .flow-graph .node .meta { fill: var(--dim); font-size: 11px; } |
|
| 436 | + | .flow-graph text { font-family: "Barlow", sans-serif; stroke: none; } |
|
| 437 | + | .flow-graph .node .name { fill: var(--ink); font-size: 14px; font-weight: 600; } |
|
| 438 | + | .flow-graph .node .meta { fill: var(--mute); font-size: 11.5px; font-weight: 400; } |
|
| 438 | 439 | details.flow-job { padding: 0; margin-top: 10px; } |
|
| 439 | 440 | details.flow-job > summary { padding: 10px 12px; cursor: pointer; list-style-position: inside; } |
|
| 440 | 441 | details.flow-job .pad { padding: 0 12px 10px; margin: 0; } |
|
| 441 | 442 | pre.flow-log { margin: 0; padding: 8px 0; max-height: 70vh; overflow: auto; border-top: 1px solid var(--line); background: var(--soft); font-size: 12.5px; line-height: 1.5; } |
|
| 442 | 443 | pre.flow-log:empty { display: none; } |
|
| 443 | 444 | pre.flow-log .ln { display: block; padding: 0 12px; white-space: pre-wrap; word-break: break-word; } |
|
| 444 | - | pre.flow-log .t { display: inline-block; min-width: 5.5em; color: var(--dim); user-select: none; } |
|
| 445 | - | pre.flow-log .s-err { color: color-mix(in srgb, var(--bad) 75%, var(--text)); } |
|
| 446 | - | pre.flow-log .s-flow, pre.flow-log .s-console { color: var(--dim); font-style: italic; } |
|
| 445 | + | pre.flow-log .t { display: inline-block; min-width: 5.5em; color: var(--mute); user-select: none; } |
|
| 446 | + | pre.flow-log .s-err { color: color-mix(in srgb, var(--bad) 75%, var(--ink)); } |
|
| 447 | + | pre.flow-log .s-flow, pre.flow-log .s-console { color: var(--mute); font-style: italic; } |
|
| 447 | 448 | table.flow-runs td.st { width: 1.5em; } |