Parent [>]
1{% extends "base.html" %}
2
3{% block title %}
4{{ name }}
5{% endblock %}
6
7{% block breadcrumbs %}
8<ul>
9  <li><a href="{{ crate::base_url() }}/">{{ crate::hostname() }}</a></li>
10  <li><a href="{{ crate::base_url() }}/{{ name }}">{{ name }}</a></li>
11</ul>
12{% endblock %}
13
14{% block content %}
15<h1>{{ name }}</h1>
16
17{% if let Some(description) = description %}
18<p>{{ description }}</p>
19{% endif %}
20<details>
21  <summary><svg class="summary-icon"><use href="#icon-copy"/></svg>Clone</summary>
22  <ul>
23    <li><button data-url="git@{{ crate::hostname() }}:{{ crate::ssh_prefix() }}{{ name }}.git"><span>git@{{ crate::hostname() }}:{{ crate::ssh_prefix() }}{{ name }}.git</span><span>SSH</span></button></li>
24    <li><button data-url="https://{{ crate::hostname() }}{{ crate::base_url() }}/{{ name }}.git"><span>https://{{ crate::hostname() }}/{{ name }}.git</span><span>HTTPS</span></button></li>
25  </ul>
26</details>
27
28{% if let Some(branch) = default_branch %}
29<details>
30  <summary><svg class="summary-icon"><use href="#icon-archive"/></svg>Archive</summary>
31  <ul>
32    <li><a href="{{ crate::base_url() }}/{{ name }}/archive/tar.gz/refs/heads/{{ branch }}" download="{{ name }}-{{ branch }}.tar.gz"><span class="archive-link">{{ name }}-{{ branch }}.tar.gz</span><span>tar.gz</span></a></li>
33    <li><a href="{{ crate::base_url() }}/{{ name }}/archive/tar.xz/refs/heads/{{ branch }}" download="{{ name }}-{{ branch }}.tar.xz"><span class="archive-link">{{ name }}-{{ branch }}.tar.xz</span><span>tar.xz</span></a></li>
34    <li><a href="{{ crate::base_url() }}/{{ name }}/archive/zip/refs/heads/{{ branch }}" download="{{ name }}-{{ branch }}.zip"><span class="archive-link">{{ name }}-{{ branch }}.zip</span><span>zip</span></a></li>
35  </ul>
36</details>
37{% endif %}
38
39<details>
40  <summary><svg class="summary-icon"><use href="#icon-branch"/></svg>Branches <span>[{{ branches.len() }}]</span></summary>
41  <ul>
42    {% for branch in branches.iter().take(5) %}
43    <li><a href="{{ crate::base_url() }}/{{ name }}/branches/{{ branch.name }}"><span class="branch-name">{{ branch.name }}</span>{% if branch.is_default %}<span>default</span>{% endif %}<span>{{ branch.date }}</span></a></li>
44    {% endfor %}
45    {% if branches.len() > 5 %}
46    <li><a href="{{ crate::base_url() }}/{{ name }}/branches" class="see-all"><span>see all {{ branches.len() }} branches</span><span>[&gt;]</span></a></li>
47    {% endif %}
48    {% if branches.is_empty() %}
49    <li>no branches</li>
50    {% endif %}
51  </ul>
52</details>
53
54<details>
55  <summary><svg class="summary-icon"><use href="#icon-tag"/></svg>Tags <span>[{{ tags.len() }}]</span></summary>
56  <ul>
57    {% for tag in tags.iter().take(5) %}
58    <li><a href="{{ crate::base_url() }}/{{ name }}/tags/{{ tag.name }}"><span class="tag-name">{{ tag.name }}</span><span>{{ tag.date }}</span></a></li>
59    {% endfor %}
60    {% if tags.len() > 5 %}
61    <li><a href="{{ crate::base_url() }}/{{ name }}/tags" class="see-all"><span>see all {{ tags.len() }} tags</span><span>[&gt;]</span></a></li>
62    {% endif %}
63    {% if tags.is_empty() %}
64    <li>no tags</li>
65    {% endif %}
66  </ul>
67</details>
68
69<div class="repo-nav">
70  {% if let Some(sha) = head_sha %}
71  <a href="{{ crate::base_url() }}/{{ name }}/commits/{{ sha }}/tree" class="repo-nav-item">
72    <svg class="summary-icon"><use href="#icon-tree"/></svg>
73    <span>Tree</span>
74    <span class="repo-nav-item-meta">[{{ sha[..8] }}]</span>
75    <span class="repo-nav-item-arrow">[&gt;]</span>
76  </a>
77  {% endif %}
78  <a href="{{ crate::base_url() }}/{{ name }}/commits" class="repo-nav-item">
79    <svg class="summary-icon"><use href="#icon-commits"/></svg>
80    <span>Commits</span>
81    <span class="repo-nav-item-meta">[{{ commit_count }}]</span>
82    <span class="repo-nav-item-arrow">[&gt;]</span>
83  </a>
84</div>
85
86{% if let Some(readme) = readme %}
87<article>
88  {{ readme | safe }}
89</article>
90{% endif %}
91{% endblock %}
92
93{% block scripts %}
94<script>
95  document.querySelectorAll('[data-url]').forEach(btn => {
96    const span = btn.querySelector('span:first-child');
97    const url = btn.dataset.url;
98    btn.addEventListener('click', () => {
99      navigator.clipboard.writeText(url);
100      span.style.opacity = '0';
101      setTimeout(() => { span.textContent = 'copied!'; span.style.opacity = '1'; }, 100);
102      setTimeout(() => {
103        span.style.opacity = '0';
104        setTimeout(() => { span.textContent = url; span.style.opacity = '1'; }, 100);
105      }, 1100);
106    });
107  });
108</script>
109{% endblock %}