1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
{% extends "_base.html" %}

{% block title %}{{ repo }}{% endblock %}

{% block nav %}
{% include "_nav.html" %}
{% endblock %}

{% block fullpage %}

{# ── Section nav + position token ───────────────────────────── #}
<nav class="repo-section-nav">
  {% include "_repo_section_nav.html" %}
  {% if let Some(h) = head %}
  <span class="repo-position">
    <span class="bookmark-glyph">※</span>
    <span class="bookmark-name">{{ h.bookmark }}</span>
    <span class="repo-meta-sep">→</span>
    <a class="change-id" href="/{{ repo }}/commits/{{ h.id.sha }}" title="commit {{ h.id.sha_short() }}">
      <span class="change-head">{{ h.id.head() }}</span><span class="change-tail">{{ h.id.tail() }}</span>
    </a>
    <span class="commit-id-secondary">{{ h.id.sha_short() }}</span>
    <span class="repo-meta-dot">·</span>
    <span class="repo-position-age">{{ h.age }}</span>
    {% if !recent_runs.is_empty() %}
    <span class="repo-meta-dot">·</span>
    <span class="ci-inline">
      <span class="ci-status-dot {{ self.latest_ci_state_class() }}"></span>
      <span>ci {{ self.latest_ci_state() }}</span>
    </span>
    {% endif %}
  </span>
  {% endif %}
</nav>

{# ── Two-column body ─────────────────────────────────────────── #}
<div class="repo-body">

  {# Left column: README #}
  <article class="repo-readme">
    {% if let Some(html) = readme_html %}
    <div class="readme-content">{{ html|safe }}</div>
    {% else %}
    <p class="readme-empty">no readme</p>
    {% endif %}
  </article>

  {# Right column: sidebar stack #}
  <aside class="repo-sidebar">

    <div class="side-block">
      <div class="side-block-title">Clone</div>
      <div class="clone-url">https://quire.local/{{ repo }}.git</div>
    </div>

    {% if !recent_runs.is_empty() %}
    <div class="side-block">
      <div class="side-block-title">CI</div>
      <div class="ci-mini-list">
        {% for run in recent_runs %}
        <div class="ci-mini-row">
          <span class="ci-status-dot {{ run.state_class() }}"></span>
          <a class="ci-mini-link" href="/{{ repo }}/ci/{{ run.id }}">{{ run.sha_short() }}</a>
          <span class="ci-mini-branch">{{ run.branch_short() }}</span>
          <span class="ci-mini-age"><time title="{{ run.queued_iso() }}">{{ run.queued_relative() }}</time></span>
          <span class="ci-mini-dur">{{ run.duration_display() }}</span>
        </div>
        {% endfor %}
      </div>
      <a class="side-more" href="/{{ repo }}/ci">all runs →</a>
    </div>
    {% endif %}

    {% if !recent_changes.is_empty() %}
    <div class="side-block side-block--last">
      <div class="side-block-title">Recent changes</div>
      <div class="change-mini-list">
        {% for ch in recent_changes %}
        <div class="change-mini-row">
          <div class="change-mini-header">
            <a class="change-id" href="{{ ch.commit_url }}" title="commit {{ ch.id.sha_full() }}">
              <span class="change-head">{{ ch.id.head() }}</span><span class="change-tail">{{ ch.id.tail() }}</span>
            </a>
            <span class="change-mini-age">{{ ch.age }}</span>
          </div>
          <div class="change-mini-desc">
            <a class="change-mini-desc-link" href="{{ ch.commit_url }}">
            {% if ch.description.is_empty() %}<span class="no-desc">(no description set)</span>{% else %}{{ ch.description }}{% endif %}
            </a>
          </div>
        </div>
        {% endfor %}
      </div>
      <a class="side-more" href="/{{ repo }}/log">full log →</a>
    </div>
    {% endif %}

  </aside>
</div>

{% endblock %}