d23464c0 Andy McCall 1 month ago ↶
1
{% extends "base.html" %}
2
{% import "repo_tabs.html" as m %}
3
{% block title %}{{ repo.owner }}/{{ repo.name }}{% endblock %}
4
{% block bodyattrs %} data-repo="{{ repo.url }}" data-ref="{{ repo.default_bookmark }}"{% endblock %}
5
{% block tabs %}{% call m::tabs(repo, "code") %}{% endblock %}
6
{% block content %}
7
< div class = " side-layout rev " >
8
< div >
83d5052b Andy McCall 1 month ago ↶
9
{% if o.heads > 1 %}< div class = " strip warn " > {{ repo.default_bookmark }} has {{ o.heads }} heads; the tree below is their union. < a href = " {{ repo.url }}/bookmarks" > Bookmarks</ a > </ div > {% endif %}
10
{% if o.conflicted %}< div class = " strip bad " > This state carries conflicts. < a href = " {{ repo.url }}/conflicts" > See them</ a > </ div > {% endif %}
d23464c0 Andy McCall 1 month ago ↶
11
< div class = " bar " >
12
< span class = " ref px " > < a href = " {{ repo.url }}/bookmarks" > ◆ {{ repo.default_bookmark }}</ a > </ span >
c9aacc0e Andy McCall 23 days ago ↶
13
{% if o.latest.is_none() %}< a class = " go small " href = " {{ repo.url }}/changes/{{ repo.default_bookmark }}" > {{ o.changes|plural("change", "changes") }}</ a > {% endif %}
14530604 Andy McCall 1 month ago ↶
14
{% if repo.can(crate::auth::Access::Write) %}< a class = " go small " href = " {{ repo.url }}/newfile/{{ repo.default_bookmark }}" > new file</ a > {% endif %}
3f4b0ea6 Andy McCall 1 month ago ↶
15
< form class = " find inline-find " method = " get" action = " {{ repo.url }}/search" > < input type = " search" name = " q" placeholder = " Search code…" > </ form >
83d5052b Andy McCall 1 month ago ↶
16
< details class = " clone-pop " >
7f283f8e Andy McCall 23 days ago ↶
17
< summary class = " go small primary " aria-haspopup = " true" > < span aria-hidden = " true" > & lt; & gt; </ span > Code</ summary >
67b24adb Andy McCall 1 month ago ↶
18
< div class = " clone-panel " role = " group" aria-label = " Clone or download this repository" >
83d5052b Andy McCall 1 month ago ↶
19
< label for = " clone-cmd" class = " small mute " > Clone with oxy</ label >
20
< div class = " clone " > < input id = " clone-cmd " type = " text" readonly value = " oxy clone {{ repo.clone_url }}" onfocus = " this . select ( ) " onclick = " this . select ( ) " > < button type = " button" class = " small " data-copy = " oxy clone {{ repo.clone_url }}" > copy</ button > </ div >
21
< p class = " small mute " > The URL alone: < code > {{ repo.clone_url }}</ code > </ p >
67b24adb Andy McCall 1 month ago ↶
22
{% if quickstart.is_none() %}
23
< a class = " download " href = " {{ repo.url }}/archive?ref={{ repo.default_bookmark|urlencode }}& amp; format=zip" download > < span aria-hidden = " true" > ⤓</ span > Download ZIP</ a >
24
< p class = " small mute " > {{ repo.default_bookmark }} as it is now, without its history. Also as < a href = " {{ repo.url }}/archive?ref={{ repo.default_bookmark|urlencode }}& amp; format=tar.zst" download > .tar.zst</ a > .</ p >
25
{% endif %}
83d5052b Andy McCall 1 month ago ↶
26
</ div >
27
</ details >
d23464c0 Andy McCall 1 month ago ↶
28
</ div >
4edcf240 Andy McCall 1 month ago ↶
29
{% if let Some(q) = quickstart %}
30
{% include "quickstart.html" %}
31
{% else %}
c9aacc0e Andy McCall 23 days ago ↶
32
< div class = " tree-box " >
33
{% if let Some(c) = o.latest %}< div class = " tree-head " >
34
< span class = " tree-title " > {% if let Some(a) = c.author.account %}< a class = " who " href = " /{{ a }}" > < img class = " avatar " src = " /avatar/{{ a }}" alt = " " width = " 20" height = " 20" > {{ a }}</ a > {% else %}< span class = " who " > {{ c.author.name }}</ span > {% endif %} < a class = " t " href = " {{ repo.url }}/change/{{ c.hash }}" title = " {{ c.title }}" > {{ c.title }}</ a > </ span >
35
< span class = " tree-meta " > < a href = " {{ repo.url }}/change/{{ c.hash }}" > < code > {{ c.short }}</ code > </ a > < time class = " ago " title = " {{ c.when_ms|when }}" > {{ c.when_ms|ago }}</ time > < a class = " hist " href = " {{ repo.url }}/changes/{{ repo.default_bookmark }}" > {{ crate::web::icons::svg("history")|safe }} {{ o.changes|plural("change", "changes") }}</ a > </ span >
36
</ div > {% endif %}
d23464c0 Andy McCall 1 month ago ↶
37
{% include "tree_table.html" %}
c9aacc0e Andy McCall 23 days ago ↶
38
</ div >
4edcf240 Andy McCall 1 month ago ↶
39
{% endif %}
d23464c0 Andy McCall 1 month ago ↶
40
{% if let Some(html) = readme_html %}
41
< article class = " doc readme " > < h2 class = " small mute " > {{ o.tree.readme.as_ref().unwrap().path }}</ h2 > {{ html|safe }}</ article >
42
{% endif %}
43
</ div >
c9aacc0e Andy McCall 23 days ago ↶
44
< aside class = " side cards " >
7f283f8e Andy McCall 23 days ago ↶
45
< section class = " side-card about " > < h3 > About < span class = " more about-counts " > < span title = " {{ stars|plural(" star", "stars") }}"> {{ crate::web::icons::svg("star")|safe }} {{ stars }}</ span > < span title = " {{ watchers|plural(" watcher", "watchers") }}"> {{ crate::web::icons::svg("eye")|safe }} {{ watchers }}</ span > {% if fork.forks > 0 %}< a href = " {{ repo.url }}/forks" title = " {{ fork.forks|plural(" fork", "forks") }}"> {{ crate::web::icons::svg("fork")|safe }} {{ fork.forks }}</ a > {% endif %}</ span > </ h3 > < div class = " body " >
d23464c0 Andy McCall 1 month ago ↶
46
{% if repo.description.is_empty() %}< p class = " mute small " > No description.</ p > {% else %}< p > {{ repo.description }}</ p > {% endif %}
07b1a5bb Andy McCall 1 month ago ↶
47
{% if let Some(up) = fork.upstream %}< p class = " small " > forked from < a href = " /{{ up.owner }}/{{ up.name }}" > {{ up.owner }}/{{ up.name }}</ a > </ p > {% endif %}
c9aacc0e Andy McCall 23 days ago ↶
48
{% if !topics.is_empty() %}< p class = " topics " > {% for t in topics %}< a class = " topic " href = " /explore?topic={{ t }}" > {{ t }}</ a > {% endfor %}</ p > {% endif %}
49
{% if let Some(l) = o.license %}< p class = " small " > Licence: < a href = " {{ repo.url }}/file/{{ repo.default_bookmark }}/{{ l }}" > {{ l }}</ a > </ p > {% endif %}
7f283f8e Andy McCall 23 days ago ↶
50
{% if shell.user.is_some() %}< div class = " about-actions " >
51
< form class = " inline " method = " post" action = " {{ repo.url }}/star" > < input type = " hidden" name = " _csrf" value = " {{ shell.csrf }}" > < button type = " submit" class = " small " > {% if starred %}★ UNSTAR{% else %}☆ STAR{% endif %}</ button > </ form >
52
< form class = " inline " method = " post" action = " {{ repo.url }}/watch" > < input type = " hidden" name = " _csrf" value = " {{ shell.csrf }}" > < button type = " submit" class = " small " > {% if watching %}UNWATCH{% else %}WATCH{% endif %}</ button > </ form >
53
< a class = " go small " href = " {{ repo.url }}/fork" > fork</ a >
54
</ div > {% endif %}
55
{% if let Some(up) = fork.upstream %}{% if shell.user.is_some() %}< p class = " about-propose " > < a class = " go small " href = " /{{ up.owner }}/{{ up.name }}/proposals/new?source={{ repo.owner }}/{{ repo.name }}:{{ repo.default_bookmark }}" > propose to {{ up.owner }}/{{ up.name }}</ a > </ p > {% endif %}{% endif %}
c9aacc0e Andy McCall 23 days ago ↶
56
</ div > </ section >
57
{% if let Some(rel) = latest_release %}< section class = " side-card " > < h3 > Latest release</ h3 > < div class = " body " > < p > < a href = " {{ repo.url }}/releases/tag/{{ rel.tag }}" > {{ rel.title }}</ a > < span class = " small mute " > {{ rel.created_ms|ago_i }}</ span > </ p > </ div > </ section > {% endif %}
58
{% if !follows.is_empty() || !used_by.is_empty() %}
59
< section class = " side-card " > < h3 > Diffusion < a class = " more " href = " {{ repo.url }}/diffusion" > details ›</ a > </ h3 > < div class = " body " >
7f283f8e Andy McCall 23 days ago ↶
60
{% if !follows.is_empty() %}< h4 > Takes from < span class = " count-chip " > {{ follows.len() }}</ span > </ h4 >
61
< ul class = " plain df-list " > {% for (up, c) in follows %}< li >
62
< div class = " df-row " > < a class = " df-name " href = " /{{ up.owner }}/{{ up.name }}" title = " {{ up.owner }}/{{ up.name }}, pinned at {{ c.path }}" > {{ up.owner }}/{{ up.name }}</ a > < span class = " df-pill " role = " img" aria-label = " upstream {{ c.upstream.word }}, here {{ c.downstream.word }}" > < span class = " df-half {{ c.upstream.class }} " title = " Upstream: {{ c.upstream.title }}" > {{ c.upstream.word }}</ span > < span class = " df-half {{ c.downstream.class }} " title = " Here: {{ c.downstream.title }}" > {{ c.downstream.word }}</ span > </ span > </ div >
63
{% if c.behind.unwrap_or(0) > 0 || c.bump.is_some() %}< div class = " df-sub " > {% match c.behind %}{% when Some(0) %}{% when Some(n) %}< span > {{ n }} behind</ span > {% when None %}{% endmatch %}{% if let Some(n) = c.bump %}< a href = " {{ repo.url }}/proposal/{{ n }}" > bump #{{ n }}</ a > {% endif %}</ div > {% endif %}
64
</ li > {% endfor %}</ ul > {% endif %}
c9aacc0e Andy McCall 23 days ago ↶
65
{% if !used_by.is_empty() %}< h4 > Diffuses to < span class = " count-chip " > {{ used_by.len() }}</ span > </ h4 >
7f283f8e Andy McCall 23 days ago ↶
66
< ul class = " plain df-list " > {% for c in used_by %}< li >
67
< div class = " df-row " > < a class = " df-name " href = " /{{ c.owner }}/{{ c.name }}" title = " {{ c.owner }}/{{ c.name }}" > {{ c.owner }}/{{ c.name }}</ a > < span class = " df-pill " role = " img" aria-label = " here {{ c.upstream.word }}, {{ c.name }} {{ c.downstream.word }}" > < span class = " df-half {{ c.upstream.class }} " title = " Here: {{ c.upstream.title }}" > {{ c.upstream.word }}</ span > < span class = " df-half {{ c.downstream.class }} " title = " {{ c.owner }}/{{ c.name }}: {{ c.downstream.title }}" > {{ c.downstream.word }}</ span > </ span > </ div >
68
{% match c.behind %}{% when Some(0) %}{% when Some(n) %}< div class = " df-sub " > < span > {{ n }} behind</ span > </ div > {% when None %}{% endmatch %}
69
</ li > {% endfor %}</ ul > {% endif %}
c9aacc0e Andy McCall 23 days ago ↶
70
</ div > </ section >
71
{% endif %}
83d5052b Andy McCall 1 month ago ↶
72
{% if !o.contributors.is_empty() %}
c9aacc0e Andy McCall 23 days ago ↶
73
< section class = " side-card " > < h3 > Contributors < span class = " count-chip " > {{ o.contributors.len() }}</ span > </ h3 > < div class = " body " >
83d5052b Andy McCall 1 month ago ↶
74
< ul class = " plain contributors " > {% for c in o.contributors.iter().take(10) %}
c9aacc0e Andy McCall 23 days ago ↶
75
< li class = " c " > {% if let Some(u) = c.account %}< img class = " avatar sm " src = " /avatar/{{ u }}" alt = " " width = " 20" height = " 20" > < a class = " who " href = " /{{ u }}" title = " {{ c.name }}" > {{ u }} < span class = " mute small " > {{ c.name }}</ span > </ a > {% else if c.hub %}< img class = " avatar sm " src = " /favicon.svg" alt = " " width = " 20" height = " 20" > < span class = " who " title = " {{ c.name }}: this hub's delegate key, signing the changes made in the browser for people who allowed it" > {{ c.name }}</ span > {% else %}< span class = " avatar-none " aria-hidden = " true" > ○</ span > < span class = " who " title = " {{ c.name }}" > {{ c.name }}</ span > {% endif %}< span class = " n mute small " title = " changes" > {{ c.changes }}</ span > {% if !c.via.is_empty() %}< ul class = " plain via-list " > {% for v in c.via %}< li > < span class = " mute " aria-hidden = " true" > ↳</ span > < span class = " mute small " > via</ span > < img class = " avatar sm " src = " /avatar/agent/{{ v.0 }}" alt = " " width = " 16" height = " 16" > {{ v.0 }} < span class = " mute small " title = " changes signed by this agent for them" > · {{ v.1 }}</ span > </ li > {% endfor %}</ ul > {% endif %}</ li >
83d5052b Andy McCall 1 month ago ↶
76
{% endfor %}</ ul >
77
{% if o.contributors.len() > 10 %}< p class = " small mute " > and {{ o.contributors.len() - 10 }} more</ p > {% endif %}
c9aacc0e Andy McCall 23 days ago ↶
78
</ div > </ section >
83d5052b Andy McCall 1 month ago ↶
79
{% endif %}
80
{% if !o.languages.is_empty() %}
c9aacc0e Andy McCall 23 days ago ↶
81
< section class = " side-card " > < h3 > Languages</ h3 > < div class = " body " >
83d5052b Andy McCall 1 month ago ↶
82
< div class = " lang-bar " role = " img" aria-label = " {% for l in o.languages %}{{ l.name }} {{ " {:.1}"|format(l.percent) }}%{% if !loop.last %}, {% endif %}{% endfor %}"> {% for l in o.languages %}< span style = " width : {{ " {:.3}"|format(l.percent) }}%; background: {{ l.colour }}" title = " {{ l.name }} {{ " {:.1}"|format(l.percent) }}%"> </ span > {% endfor %}</ div >
83
< ul class = " plain langs " > {% for l in o.languages %}< li > < span class = " lang-dot " style = " background : {{ l.colour }}" aria-hidden = " true" > </ span > < strong > {{ l.name }}</ strong > < span class = " mute " > {{ "{:.1}"|format(l.percent) }}%</ span > </ li > {% endfor %}</ ul >
c9aacc0e Andy McCall 23 days ago ↶
84
</ div > </ section >
83d5052b Andy McCall 1 month ago ↶
85
{% endif %}
c9aacc0e Andy McCall 23 days ago ↶
86
< section class = " side-card " > < h3 > Bookmarks < span class = " count-chip " > {{ o.bookmarks.len() }}</ span > {% if o.bookmarks.len() > 10 %}< a class = " more " href = " {{ repo.url }}/bookmarks" > all {{ o.bookmarks.len() }} ›</ a > {% endif %}</ h3 > < div class = " body " >
87
< ul class = " plain bookmarks " > {% for b in o.recent_bookmarks() %}< li > < a href = " {{ repo.url }}/tree/{{ b.name }}" title = " {{ b.name }}" > {{ b.name }}</ a > {% if b.heads.len() > 1 %}< span class = " tag warn " > {{ b.heads.len() }} heads</ span > {% endif %}{% if b.conflicted %}< span class = " tag bad " > conflicts</ span > {% endif %}< time class = " small mute " title = " {{ b.latest_ms|when }}" > {{ b.latest_ms|ago }}</ time > </ li > {% endfor %}</ ul >
88
</ div > </ section >
89
< section class = " side-card " > < h3 > Tags</ h3 > < div class = " body " >
d23464c0 Andy McCall 1 month ago ↶
90
{% if o.tags.is_empty() %}< p class = " mute small " > None.</ p > {% else %}< ul class = " plain " > {% for t in o.tags %}< li > < a href = " {{ repo.url }}/tree/{{ t.name }}" > {{ t.name }}</ a > {% if t.signer.is_some() %} < span class = " sig sig-valid " title = " signed" > ✔</ span > {% endif %}</ li > {% endfor %}</ ul > {% endif %}
c9aacc0e Andy McCall 23 days ago ↶
91
</ div > </ section >
92
< section class = " side-card " > < h3 > Trust</ h3 > < div class = " body " >
d23464c0 Andy McCall 1 month ago ↶
93
{% match o.policy %}
94
{% when crate::repos::view::PolicyBadge::Active %}< p > < a href = " {{ repo.url }}/trust" > < span class = " sig sig-valid " > ✔</ span > policy in force</ a > </ p >
95
{% when crate::repos::view::PolicyBadge::Expired %}< p > < a href = " {{ repo.url }}/trust" > < span class = " sig sig-invalid " > ✘</ span > policy expired</ a > </ p >
96
{% when crate::repos::view::PolicyBadge::None %}< p > < a href = " {{ repo.url }}/trust" > < span class = " sig sig-unsigned " > ○</ span > no policy</ a > </ p >
97
{% endmatch %}
c9aacc0e Andy McCall 23 days ago ↶
98
</ div > </ section >
d23464c0 Andy McCall 1 month ago ↶
99
</ aside >
100
</ div >
101
{% endblock %}