summaryrefslogtreecommitdiffstats
path: root/front_end/templates/reverse_dependencies.rs.html
blob: 10bcb75349acaf1b6cb0dbacf28c24c3a959afa5 (plain)
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
@use crate::templates::base;
@use crate::reverse_dependencies::CratePageRevDeps;
@use crate::Urler;

@(url: &Urler, p: &CratePageRevDeps)

@:base(&p.page(), {
  <header id="rev-deps" @if p.ver.is_yanked() {class="yanked"} else {@if p.ver.is_nightly() {class="nightly"}}>
    <div class="inner-col">
    <div class="breadcrumbs">
      <a href="/"><span>Lib</span>.rs</a><h1>
     <a href="@url.krate(&p.ver)" rel="up">@p.ver.capitalized_name()</a>
    </h1>
     › Reverse dependencies
    </div>
    </div>
  </header>
  <main>
    <div class="inner-col">
      @if let Some(stats) = p.stats {
        <p>
          @if stats.runtime.all() > 0 {
            <a href="@url.krate(&p.ver)" rel="up">@p.ver.capitalized_name()</a> is used at run time in <b>@p.format_number(stats.runtime.all())</b> crate@if stats.runtime.all() != 1 {s}@if stats.runtime.all() > u32::from(stats.direct.runtime) {
              (@if stats.runtime.opt > 0 {of which @p.format_number(stats.runtime.opt) optionally, }@p.format_number(stats.direct.runtime) directly)}.
          }

          @if stats.build.all() > 0 {
            It's used at build time in <b>@p.format_number(stats.build.all())</b> crate@if stats.build.all() != 1 {s}@if stats.build.all() > u32::from(stats.direct.build) {
              (@if stats.build.opt > 0 {of which @p.format_number(stats.build.opt) optionally, }@p.format_number(stats.direct.build) directly)}.
          }

          @if stats.dev > 0 {
            It's used only as a dev dependency in <b>@p.format_number(stats.dev)</b> crate@if stats.dev != 1 {s}@if stats.dev > stats.direct.dev && stats.direct.dev > 0 {
            (@p.format_number(stats.direct.dev) directly)}.
          }
        </p>

        @if stats.versions.len() > 1 {
          <table class="version-pop">
            <thead><th>Number of dependers</th><th>@p.ver.capitalized_name() version</th><th>Downloads/month</th></thead>
            @for x in p.version_breakdown() {
              <tr>
                <td class="rv">@if x.num == 0 || x.perc <= x.num_width {@x.num_str} @if x.num > 0 {<span style="width:@x.perc%">@if x.perc > x.num_width {@x.num_str}</span>}</td>
                <th>@x.ver</th>
                <td class="dl">
                  @if x.dl > 0 {
                    <span style="width:@x.dl_perc%">@if x.dl_perc > x.dl_num_width {@x.dl_str.0<b>@x.dl_str.1</b>}</span>
                  }
                  @if x.dl == 0 || x.dl_perc <= x.dl_num_width {@x.dl_str.0<b>@x.dl_str.1</b>}
                </td>
            }
          </table>
        }
      }

      @if !p.deps.is_empty() {
        <table class="reverse-deps @if !p.has_download_columns {no-dl-columns}">
          <thead>
              <tr><th colspan="3">Depender
                @if p.has_download_columns {<small>(with downloads and own rev deps)</small>}
              </th> <th colspan="2">@p.ver.capitalized_name() version</th></tr>
          </thead>
          @for r in &p.deps {
            <tr>
              <td>@if r.downloads > 100 {
                <span class=downloads>@if let Some((num,unit)) = Some(p.downloads(r.downloads)) {@num<b>@unit</b>}</span>
              }</td>
              <td>@if r.rev_dep_count > 0 {
                @if let Some(link) = url.reverse_deps(&r.origin) {<a href="@link">@r.rev_dep_count</a>}}</td>
              <td><a href="@url.crate_by_origin(&r.origin)">@r.depender.name()</a></td>
              <td>@if r.is_optional {<span class=feature>optional</span>}
             @if r.kind != "normal" && r.kind != "" {<span class="label label-@r.kind">@r.kind</span>}</td>
              <td @if !r.matches_latest {class="outdated"}>@r.req</td>
            </tr>
          }
        </table>
      } else {
        <p>This crate isn't used by any other public crates. <a href="@url.krate(&p.ver)" rel="up">Go back to @p.ver.capitalized_name()</a>.</p>
      }
    </div>
  </main>

  <footer>
    <div class="inner-col">
        <p><a href="/revdeps">How this data is computed</a>. Back to <a href="@url.krate(&p.ver)" rel="up">@p.ver.capitalized_name()</a>.</p>
    </div>
  </footer>
})