Repository Public MIT Selected
1{#2 ─────────────────────────────────────────────3 SPB Git — Personal Git Platform4 ─────────────────────────────────────────────5 Author : Simon-Pierre Boucher6 Contact : contact@spboucher.ai7 File : src/web/views/insights.njk8 Purpose : Repository insights — ruled figures, commit calendar, declared dependencies, contributors, most changed paths9 License : MIT © Simon-Pierre Boucher10 ─────────────────────────────────────────────11#}{% extends "layout.njk" %}12{% import "components/ui.njk" as ui %}13{% block content %}14{% include "partials/repo-header.njk" %}1516{{ ui.statStrip([17 { value: insights.commitsAllTime | num, label: 'commits, all time', title: 'Commits reachable from ' + overview.defaultBranch },18 { value: insights.calendar.total | num, label: 'commits, last 52 weeks' },19 { value: insights.calendar.activeDays | num, label: 'active days (52 w)' },20 { value: insights.calendar.longest | num, label: 'longest streak, days' },21 { value: insights.fileCount | num, label: 'files at HEAD' },22 { value: insights.totalBytes | bytes, label: 'tracked bytes' }23], 'stat-strip-repo') }}2425<section class="section" aria-labelledby="cal-h">26 {% call ui.sectionHead('cal-h', '01', 'Calendar', 'Commit calendar') %}27 <a class="link-arrow" href="/about/metrics">Definitions {{ ui.icon('arrow-right', 14) }}</a>28 {% endcall %}29 <figure class="figure-block">30 <div class="heatmap-scroll" tabindex="0" aria-label="Commit calendar, scroll horizontally">{{ insights.calendar.svg | safe }}</div>31 <figcaption>32 <span>Fig. 1 — {{ insights.calendar.total | num }} commits in the last 52 weeks{% if insights.firstCommit %} · first commit {{ insights.firstCommit | datefull }}{% endif %}{% if insights.calendar.busiest %} · busiest {{ insights.calendar.busiest.date }} ({{ insights.calendar.busiest.count }}){% endif %}</span>33 <span class="heatmap-legend" aria-hidden="true">Less<i class="heatmap-cell-demo" data-level="0"></i><i class="heatmap-cell-demo" data-level="1"></i><i class="heatmap-cell-demo" data-level="2"></i><i class="heatmap-cell-demo" data-level="3"></i><i class="heatmap-cell-demo" data-level="4"></i>More</span>34 </figcaption>35 </figure>36</section>3738<div class="split-columns">39 <section class="section" aria-labelledby="dep-h">40 {{ ui.sectionHead('dep-h', '02', 'Dependencies', 'Declared dependencies', 'Parsed from manifests at HEAD — no install, no network.') }}41 {% if insights.manifests.length %}42 {% for m in insights.manifests %}43 <div class="card manifest-card">44 <div class="card-head"><h3><code>{{ m.path }}</code></h3><span class="card-head-note">{{ m.ecosystem }} · {{ m.deps.length }}</span></div>45 <div class="chip-row manifest-deps">46 {% for d in m.deps %}<a class="chip chip-{{ 'topic' if d.kind == 'runtime' else 'neutral' }}" href="{{ m.registry }}{{ d.name }}" rel="noopener nofollow" title="{{ d.kind }} {{ d.version }}">{{ d.name }}{% if d.version %} <span class="chip-ver">{{ d.version }}</span>{% endif %}</a>{% endfor %}47 </div>48 </div>49 {% endfor %}50 {% else %}{{ ui.emptyState('No dependency manifest found', 'package.json, requirements.txt, pyproject.toml, Cargo.toml, go.mod and Package.swift are recognised.', '', 'layers') }}{% endif %}51 </section>52 <aside class="side-stack">53 <section aria-labelledby="auth-h">54 <h2 id="auth-h" class="label-head">Contributors</h2>55 <ul class="rank-list">56 {% for a in insights.authors %}<li><span class="commit-avatar">{{ a.email | identicon(18) }}</span><span class="rank-name">{{ a.name }}</span><span class="rank-val">{{ a.commits | num }}</span></li>{% else %}<li class="activity-empty">No commits.</li>{% endfor %}57 </ul>58 </section>59 <section aria-labelledby="hot-h">60 <h2 id="hot-h" class="label-head">Most changed paths <span class="label-note">last 400 commits</span></h2>61 <ul class="rank-list">62 {% for p in insights.hotPaths %}<li><a class="rank-name rank-path" href="/{{ overview.name }}/commits/{{ currentRef }}?path={{ p.path | urlencode }}" title="{{ p.path }}">{{ p.path }}</a><span class="rank-val">{{ p.changes }}</span></li>{% endfor %}63 </ul>64 </section>65 </aside>66</div>67{% endblock %}68