Skip to content

Commit 061d128

Browse files
KixironJoshua Nelson
authored and
Joshua Nelson
committed
Macro'd out the release list, uncow'd some things
1 parent 68f2c52 commit 061d128

File tree

5 files changed

+54
-170
lines changed

5 files changed

+54
-170
lines changed

src/web/mod.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ macro_rules! ctry {
1616
// This is very ugly, but it makes it impossible to get a type inference error
1717
// from this macro
1818
let error = $crate::web::ErrorPage {
19-
title: ::std::borrow::Cow::Borrowed("Internal Server Error"),
19+
title: "Internal Server Error",
2020
message: ::std::option::Option::Some(::std::borrow::Cow::Owned(
2121
::std::format!("{}", error),
2222
)),
@@ -44,7 +44,7 @@ macro_rules! cexpect {
4444
// This is very ugly, but it makes it impossible to get a type inference error
4545
// from this macro
4646
let error = $crate::web::ErrorPage {
47-
title: ::std::borrow::Cow::Borrowed("Internal Server Error"),
47+
title: "Internal Server Error",
4848
message: None,
4949
status: ::iron::status::BadRequest,
5050
};
@@ -616,7 +616,7 @@ impl MetaData {
616616
#[derive(Debug, Clone, PartialEq, Serialize)]
617617
pub(crate) struct ErrorPage {
618618
/// The title of the page
619-
pub title: Cow<'static, str>,
619+
pub title: &'static str,
620620
/// The error message, displayed as a description
621621
pub message: Option<Cow<'static, str>>,
622622
#[serde(skip)]

src/web/releases.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ use postgres::Connection;
1818
use router::Router;
1919
use serde::Serialize;
2020
use serde_json::Value;
21-
use std::borrow::Cow;
2221

2322
/// Number of release in home page
2423
const RELEASES_IN_HOME: i64 = 15;
@@ -660,7 +659,7 @@ pub fn search_handler(req: &mut Request) -> IronResult<Response> {
660659

661660
#[derive(Debug, Clone, PartialEq, Serialize)]
662661
struct ReleaseActivity {
663-
description: Cow<'static, str>,
662+
description: &'static str,
664663
activity_data: Value,
665664
}
666665

@@ -682,7 +681,7 @@ pub fn activity_handler(req: &mut Request) -> IronResult<Response> {
682681
.map_or(Value::Null, |row| row.get("value"));
683682

684683
ReleaseActivity {
685-
description: Cow::Borrowed("Monthly release activity"),
684+
description: "Monthly release activity",
686685
activity_data,
687686
}
688687
.into_response(req)

templates/crate/details.html

+1-128
Original file line numberDiff line numberDiff line change
@@ -96,37 +96,7 @@
9696
<div class="pure-menu pure-menu-scrollable sub-menu">
9797
<ul class="pure-menu-list">
9898
{# Display all releases of this crate #}
99-
{%- for release in details.releases -%}
100-
<li class="pure-menu-item">
101-
{# If the release was yanked but built, show a warning #}
102-
{%- if release.yanked and release.build_status -%}
103-
<a href="/crate/{{ details.name }}/{{ release.version }}" class="pure-menu-link warn"
104-
title="{{ details.name }}-{{ release.version }} is yanked">
105-
<i class="fa fa-fw fa-warning"></i> {{ release.version }}
106-
</a>
107-
108-
{# If the release was yanked and failed to build, show a warning #}
109-
{%- elif release.yanked -%}
110-
<a href="/crate/{{ details.name }}/{{ release.version }}" class="pure-menu-link warn"
111-
title="{{ details.name }}-{{ release.version }} is yanked and docs.rs failed to build it">
112-
<i class="fa fa-fw fa-warning"></i> {{ release.version }}
113-
</a>
114-
115-
{# If the release wasn't yanked and built correctly, display it normally #}
116-
{%- elif release.build_status -%}
117-
<a href="/crate/{{ details.name }}/{{ release.version }}" class="pure-menu-link">
118-
{{ release.version }}
119-
</a>
120-
121-
{# If the release wasn't yanked but failed to build, show a warning #}
122-
{%- else -%}
123-
<a href="/crate/{{ details.name }}/{{ release.version }}" class="pure-menu-link warn"
124-
title="docs.rs failed to build {{ details.name }}-{{ release.version }}">
125-
<i class="fa fa-fw fa-warning"></i> {{ release.version }}
126-
</a>
127-
{%- endif -%}
128-
</li>
129-
{%- endfor -%}
99+
{{ macros::releases_list(name=details.name, releases=details.releases) }}
130100
</ul>
131101
</div>
132102
</li>
@@ -204,101 +174,4 @@
204174
{%- block javascript -%}
205175
{# Enable and load Rust and TOML syntax highlighting #}
206176
{{ macros::highlight_js(languages=["rust", "ini"]) }}
207-
208-
<script type="text/javascript" charset="utf-8">
209-
function getKey(ev) {
210-
if ("key" in ev && typeof ev.key != "undefined") {
211-
return ev.key;
212-
}
213-
214-
return String.fromCharCode(ev.charCode || ev.keyCode);
215-
}
216-
217-
document.getElementById("i-am-feeling-lucky-button").onclick = function () {
218-
var form = document.getElementsByClassName("landing-search-form");
219-
var input = document.createElement('input');
220-
221-
input.type = 'hidden';
222-
input.name = 'i-am-feeling-lucky';
223-
input.value = 1;
224-
document.getElementsByClassName("landing-search-form")[0].appendChild(input);
225-
226-
return true;
227-
};
228-
229-
function handleShortcut(ev) {
230-
if (ev.ctrlKey || ev.altKey || ev.metaKey || document.activeElement.tagName === "INPUT") {
231-
return;
232-
}
233-
234-
switch (getKey(ev)) {
235-
case "s":
236-
case "S":
237-
ev.preventDefault();
238-
document.getElementById("search").focus();
239-
break;
240-
}
241-
}
242-
243-
document.onkeypress = handleShortcut;
244-
document.onkeydown = handleShortcut;
245-
246-
var active = null;
247-
248-
function handleKey(ev) {
249-
if (ev.ctrlKey || ev.altKey || ev.metaKey || document.activeElement.tagName === "INPUT") {
250-
return;
251-
}
252-
253-
if (ev.which === 40) { // Down arrow
254-
ev.preventDefault();
255-
if (active === null) {
256-
active = document.getElementsByClassName("recent-releases-container")[0].getElementsByTagName("li")[0];
257-
} else if (active.nextElementSibling) {
258-
active.classList.remove("selected");
259-
active = active.nextElementSibling;
260-
}
261-
262-
active.classList.add("selected");
263-
} else if (ev.which === 38) { // Up arrow
264-
ev.preventDefault();
265-
266-
if (active === null) {
267-
active = document.getElementsByClassName("recent-releases-container")[0].getElementsByTagName("li")[0];
268-
} else if (active.previousElementSibling) {
269-
active.classList.remove("selected");
270-
active = active.previousElementSibling;
271-
}
272-
273-
active.classList.add("selected");
274-
active.focus();
275-
} else if (ev.which === 13) { // Return
276-
if (active !== null) {
277-
document.location.href = active.getElementsByTagName("a")[0].href;
278-
}
279-
} else {
280-
switch (getKey(ev)) {
281-
case "s":
282-
case "S":
283-
ev.preventDefault();
284-
document.getElementsByClassName("search-input-nav")[0].focus();
285-
break;
286-
}
287-
}
288-
}
289-
290-
document.onkeypress = handleKey;
291-
document.onkeydown = handleKey;
292-
293-
var crates =
294-
Array.prototype.slice.call(document.getElementsByClassName("recent-releases-container")[0].getElementsByTagName("li"));
295-
296-
for (var i = 0; i < crates.length; ++i) {
297-
crates[i].addEventListener("mouseover", function (event) {
298-
this.classList.remove("selected"); active = null;
299-
}); crates[i].addEventListener("mouseout", function (event) {
300-
this.classList.remove("selected"); active = null;
301-
});
302-
}
303-
</script>
304177
{% endblock javascript -%}

templates/macros.html

+45
Original file line numberDiff line numberDiff line change
@@ -75,3 +75,48 @@
7575
Docs.rs
7676
{%- endif -%}
7777
{% endmacro doc_title %}
78+
79+
{#
80+
Constructs a list of a crate's releases
81+
* `name` The crate's name as a string
82+
* `releases` A list of crate releases where each release has the following fields:
83+
* `version` A string of the release's version
84+
* `yanked` A boolean of the release's yanked status
85+
* `build_status` A boolean of the crate's build status (true for built, false for failed build)
86+
#}
87+
{% macro releases_list(name, releases) %}
88+
{%- for release in releases -%}
89+
{# The url for the release, `/crate/:name/:version` #}
90+
{%- set release_url = "/crate/" ~ name ~ "/" ~ release.version -%}
91+
{# The release's name and version, `:name-:version` #}
92+
{%- set release_name = name ~ "-" ~ release.version -%}
93+
94+
<li class="pure-menu-item">
95+
{# If the release has been yanked and failed to build, display a warning #}
96+
{%- if release.yanked and release.build_status -%}
97+
<a href="{{ release_url }}" class="pure-menu-link warn" title="{{ release_name }} is yanked">
98+
<i class="fa fa-fw fa-warning"></i> {{ release.version }}
99+
</a>
100+
101+
{# If the release is yanked but built, display an warning #}
102+
{%- elif release.yanked and not release.build_status -%}
103+
<a href="{{ release_url }}" class="pure-menu-link warn"
104+
title="{{ release_name }} is yanked and docs.rs failed to build it">
105+
<i class="fa fa-fw fa-warning"></i> {{ release.version }}
106+
</a>
107+
108+
{# If the release failed to build, display a warning #}
109+
{%- elif release.build_status -%}
110+
<a href="{{ release_url }}" class="pure-menu-link warn" title="docs.rs failed to build {{ release_name }}">
111+
<i class="fa fa-fw fa-warning"></i> {{ release.version }}
112+
</a>
113+
114+
{# Otherwise just display the version #}
115+
{%- else -%}
116+
<a href="{{ release_url }}" class="pure-menu-link">
117+
{{ release.version }}
118+
</a>
119+
{%- endif -%}
120+
</li>
121+
{%- endfor -%}
122+
{% endmacro releases_list %}

templates/rustdoc/navigation.html

+3-36
Original file line numberDiff line numberDiff line change
@@ -135,45 +135,12 @@
135135
<div class="pure-u-1-2">
136136
<ul class="pure-menu-list">
137137
<li class="pure-menu-heading">Versions</li>
138-
139-
{# Build the list of every release this crate has #}
138+
140139
<li class="pure-menu-item">
141140
<div class="pure-menu pure-menu-scrollable sub-menu">
142141
<ul class="pure-menu-list">
143-
{%- for release in krate.releases -%}
144-
{# The url for the release, `/crate/:name/:version` #}
145-
{%- set release_url = "/crate/" ~ krate.name ~ "/" ~ release.version -%}
146-
{# The release's name and version, `{name}-{version}` #}
147-
{%- set release_name = krate.name ~ "-" ~ release.version -%}
148-
149-
<li class="pure-menu-item">
150-
{# If the release has been yanked and failed to build, display a warning #}
151-
{%- if release.yanked and release.build_status -%}
152-
<a href="{{ release_url }}" class="pure-menu-link warn" title="{{ release_name }} is yanked">
153-
<i class="fa fa-fw fa-warning"></i> {{ release.version }}
154-
</a>
155-
156-
{# If the release is yanked but built, display an warning #}
157-
{%- elif release.yanked and not release.build_status -%}
158-
<a href="{{ release_url }}" class="pure-menu-link warn"
159-
title="{{ release_name }} is yanked and docs.rs failed to build it">
160-
<i class="fa fa-fw fa-warning"></i> {{ release.version }}
161-
</a>
162-
163-
{# If the release failed to build, display a warning #}
164-
{%- elif release.build_status -%}
165-
<a href="{{ release_url }}" class="pure-menu-link warn" title="docs.rs failed to build {{ release_name }}">
166-
<i class="fa fa-fw fa-warning"></i> {{ release.version }}
167-
</a>
168-
169-
{# Otherwise just display the version #}
170-
{%- else -%}
171-
<a href="{{ release_url }}" class="pure-menu-link">
172-
{{ release.version }}
173-
</a>
174-
{%- endif -%}
175-
</li>
176-
{%- endfor -%}
142+
{# Display all releases of this crate #}
143+
{{ macros::releases_list(name=krate.name, releases=krate.releases) }}
177144
</ul>
178145
</div>
179146
</li>

0 commit comments

Comments
 (0)