Skip to content

Move rustdoc header out of rustdoc container (Fixes #935) #982

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Aug 18, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion src/utils/html.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ pub(crate) fn rewrite_lol(
let templates = templates.templates.load();
let tera_head = templates.render("rustdoc/head.html", &ctx).unwrap();
let tera_body = templates.render("rustdoc/body.html", &ctx).unwrap();
let tera_rustdoc_header = templates.render("rustdoc/header.html", &ctx).unwrap();

let head_handler = |head: &mut Element| {
head.append(&tera_head, ContentType::Html);
Expand Down Expand Up @@ -51,8 +52,11 @@ pub(crate) fn rewrite_lol(
rustdoc_body_class.set_tag_name("div")?;
// Prepend the tera content
rustdoc_body_class.prepend(&tera_body, ContentType::Html);
// Now, make this a full <body> tag
// Wrap the tranformed body and rustdoc header into a <body> element
rustdoc_body_class.before("<body>", ContentType::Html);
// Insert the header outside of the rustdoc div
rustdoc_body_class.before(&tera_rustdoc_header, ContentType::Html);
// Finalize body with </body>
rustdoc_body_class.after("</body>", ContentType::Html);

Ok(())
Expand Down
238 changes: 0 additions & 238 deletions templates/rustdoc/body.html
Original file line number Diff line number Diff line change
@@ -1,241 +1,3 @@
{%- import "macros.html" as macros -%}

{# The url of the current release, `/crate/:name/:version` #}
{%- set crate_url = "/crate/" ~ krate.name ~ "/" ~ krate.version -%}

<div class="nav-container nav-container-rustdoc">
<div class="container-rustdoc rustdoc-navigation">
<div class="pure-menu pure-menu-horizontal">
<form action="/releases/search" method="GET" class="landing-search-form-nav">
<div id="search-input-nav">
<label for="nav-search">
{{ "search" | fas(fw=true) }}
</label>

<input id="nav-search" name="query" tabindex="-1" type="text"
aria-label="Find crate by search query" placeholder="Find crate">
</div>

<a href="/" class="pure-menu-heading pure-menu-link">
{{ "cube" | fas(fw=true) }} <span class="title">Docs.rs</span>
</a>

<ul class="pure-menu-list">
<li class="pure-menu-item pure-menu-has-children pure-menu-allow-hover">
<a href="{{ crate_url | safe }}" class="pure-menu-link" title="{{ krate.description }}">
{{ "cube" | fas(fw=true) }}
<span class="title"> {{ krate.name }}-{{ krate.version }}</span>
</a>

{# Crate details #}
<div class="pure-menu-children package-details-menu">
{# Crate name, description and license #}
<ul class="pure-menu-list menu-item-divided">
<li class="pure-menu-heading" id="crate-title">
{{ krate.name }} {{ krate.version }}
{{ "copy" | far(id="clipboard", aria_label="Copy crate name and version information", fw=true) }}
</li>

<li class="pure-menu-item">
<a href="{{ crate_url | safe }}" class="pure-menu-link" class="description">
{{ "cube" | fas(fw=true) }} {{ krate.description }}
</a>
</li>

<li class="pure-menu-item">
<a href="{{ crate_url | safe }}" class="pure-menu-link">
{{ "balance-scale-right" | fas(fw=true) }} {{ krate.license }}
</a>
</li>
</ul>

<div class="pure-g menu-item-divided">
<div class="pure-u-1-2 right-border">
<ul class="pure-menu-list">
<li class="pure-menu-heading">Links</li>

{# If the crate has a homepage, show a link to it #}
{%- if krate.homepage_url -%}
<li class="pure-menu-item">
<a href="{{ krate.homepage_url }}" class="pure-menu-link">
{{ "home" | fas(fw=true) }} Homepage
</a>
</li>
{%- endif -%}

{# If the crate has external docs, show a link #}
{%- if krate.documentation_url -%}
<li class="pure-menu-item">
<a href="{{ krate.documentation_url }}" title="Canonical documentation" class="pure-menu-link">
{{ "file-alt" | far(fw=true) }} Documentation
</a>
</li>
{%- endif -%}

{# If the crate is hosted on GitHub, show some stats #}
{%- if krate.github -%}
<li class="pure-menu-item">
<a href="{{ krate.repository_url }}" class="pure-menu-link">
{{ "github" | fab(fw=true) }}
{{ "star" | fas(fw=true) }} {{ krate.github_stars }}
{{ "code-branch" | fas(fw=true) }} {{ krate.github_forks }}
{{ "exclamation-circle" | fas(fw=true) }} {{ krate.github_issues }}
</a>
</li>

{# If all the crate has is a repo url, show it #}
{%- elif repository_url -%}
<li class="pure-menu-item">
<a href="{{ krate.repository_url }}" class="pure-menu-link">
{{ "code-branch" | fas(fw=true) }} Repository
</a>
</li>
{%- endif -%}

<li class="pure-menu-item">
<a href="https://crates.io/crates/{{ krate.name }}" class="pure-menu-link" title="See {{ krate.name }} in crates.io">
{{ "cube" | fas(fw=true) }} Crates.io
</a>
</li>
</ul>
</div>

{# Show the crate authors #}
<div class="pure-u-1-2">
<ul class="pure-menu-list">
<li class="pure-menu-heading">Authors</li>

{%- for author in krate.authors -%}
<li class="pure-menu-item">
<a href="/releases/{{ author[1] }}" class="pure-menu-link">
{{ "user" | fas(fw=true) }} {{ author[0] }}
</a>
</li>
{%- endfor -%}
</ul>
</div>
</div>

<div class="pure-g menu-item-divided">
<div class="pure-u-1-2 right-border">
<ul class="pure-menu-list">
<li class="pure-menu-heading">Dependencies</li>

{# Display all dependencies that the crate has #}
<li class="pure-menu-item">
<div class="pure-menu pure-menu-scrollable sub-menu">
<ul class="pure-menu-list">
{%- for dep in krate.dependencies -%}
<li class="pure-menu-item">
<a href="/{{ dep[0] }}/{{ dep[1] }}" class="pure-menu-link">
{{ dep[0] }} {{ dep[1] }}
<i class="dependencies {{ dep[2] | default(value='') }}">{{ dep[2] | default(value="") }}</i>
</a>
</li>
{%- endfor -%}
</ul>
</div>
</li>
</ul>
</div>

<div class="pure-u-1-2">
<ul class="pure-menu-list">
<li class="pure-menu-heading">Versions</li>

<li class="pure-menu-item">
<div class="pure-menu pure-menu-scrollable sub-menu">
<ul class="pure-menu-list">
{# Display all releases of this crate #}
{{ macros::releases_list(name=krate.name, releases=krate.releases) }}
</ul>
</div>
</li>
</ul>
</div>
</div>
{%- if krate.documented_items and krate.total_items -%}
{% set percent = krate.documented_items * 100 / krate.total_items %}
<div class="pure-g">
<div class="pure-u-1">
<ul class="pure-menu-list">
<li>
<a href="{{ crate_url | safe }}" class="pure-menu-link">
<b>{{ percent | round(precision=2) }}%</b>
of the crate is documented
</a>
</li>
</ul>
</div>
</div>
{%- endif -%}
</div>
</li>

{# If this is the latest release and it's been yanked, just display a warning #}
{%- if is_latest_version and krate.yanked -%}
<li class="pure-menu-item">
<span class="pure-menu-link warn">
{{ "exclamation-triangle" | fas(fw=true) }}
<span class="title"> This release has been yanked</span>
</span>
</li>

{# If the crate isn't the latest & is yanked, display a warning and offer a link to the latest release #}
{%- elif not is_latest_version and krate.yanked -%}
<li class="pure-menu-item">
<a href="{{ latest_path | safe }}" class="pure-menu-link warn"
title="You are seeing a yanked version of {{ krate.name }} crate. Click here to go to latest version.">
{{ "exclamation-triangle" | fas(fw=true) }}
<span class="title"> This release has been yanked, go to latest version</span>
</a>
</li>

{# If this isn't the most recent release, offer a link to the latest #}
{%- elif not is_latest_version -%}
<li class="pure-menu-item">
<a href="{{ latest_path | safe }}" class="pure-menu-link warn"
title="You are seeing an outdated version of {{ krate.name }} crate. Click here to go to latest version.">
{{ "exclamation-triangle" | fas(fw=true) }}
<span class="title"> Go to latest version</span>
</a>
</li>
{%- endif -%}

{# A link to the release's source view #}
<li class="pure-menu-item">
<a href="{{ crate_url | safe }}/source/" title="Browse source of {{ krate.name }}-{{ krate.version }}" class="pure-menu-link">
{{ "folder-open" | far(fw=true) }}
<span class="title"> Source</span>
</a>
</li>

{# Display the platforms that the release has been built for #}
<li class="pure-menu-item pure-menu-has-children pure-menu-allow-hover">
<a href="#" class="pure-menu-link" aria-label="Platform">
{{ "cogs" | fas(fw=true) }}
<span class="title"> Platform</span>
</a>

{# Build the dropdown list showing available targets #}
<ul class="pure-menu-children">
{%- for target in krate.doc_targets -%}
{%- set target_url = "/crate/" ~ krate.name ~ "/" ~ krate.version ~ "/target-redirect/" ~ target ~ "/" ~ inner_path -%}

<li class="pure-menu-item">
<a href="{{ target_url | safe }}" class="pure-menu-link">{{ target }}</a>
</li>
{%- endfor -%}
</ul>
</li>

{%- include "header/global_alert.html" -%}
</ul>
</form>
</div>
</div>
</div>

<script type="text/javascript" src="/menu.js?{{ docsrs_version() | slugify }}"></script>
<script type="text/javascript" src="/index.js?{{ docsrs_version() | slugify }}"></script>
<script>
Expand Down
Loading