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