Skip to content

Commit b2c47fa

Browse files
Migrate menus URLs under /crate/
1 parent 42321b6 commit b2c47fa

File tree

4 files changed

+68
-34
lines changed

4 files changed

+68
-34
lines changed

Diff for: src/web/crate_details.rs

+42-14
Original file line numberDiff line numberDiff line change
@@ -1307,13 +1307,15 @@ mod tests {
13071307

13081308
fn run_check_links(
13091309
env: &TestEnvironment,
1310-
url: &str,
1310+
url_start: &str,
1311+
url_end: &str,
13111312
extra: &str,
13121313
should_contain_redirect: bool,
13131314
) {
13141315
run_check_links_redir(
13151316
env,
1316-
url,
1317+
url_start,
1318+
url_end,
13171319
extra,
13181320
should_contain_redirect,
13191321
should_contain_redirect,
@@ -1322,18 +1324,30 @@ mod tests {
13221324

13231325
fn run_check_links_redir(
13241326
env: &TestEnvironment,
1325-
url: &str,
1327+
url_start: &str,
1328+
url_end: &str,
13261329
extra: &str,
13271330
should_contain_redirect: bool,
13281331
ajax_should_contain_redirect: bool,
13291332
) {
1330-
let response = env.frontend().get(url).send().unwrap();
1333+
let response = env
1334+
.frontend()
1335+
.get(&format!("{url_start}{url_end}"))
1336+
.send()
1337+
.unwrap();
13311338
assert!(response.status().is_success());
13321339
let list1 = check_links(response.text().unwrap(), false, should_contain_redirect);
13331340
// Same test with AJAX endpoint.
1341+
let (start, extra_name) = if url_start.starts_with("/crate/") {
1342+
("", "/crate")
1343+
} else {
1344+
("/crate", "")
1345+
};
13341346
let response = env
13351347
.frontend()
1336-
.get(&format!("/-/menus/platforms{url}{extra}"))
1348+
.get(&format!(
1349+
"{start}{url_start}/menus/platforms{extra_name}{url_end}{extra}"
1350+
))
13371351
.send()
13381352
.unwrap();
13391353
assert!(response.status().is_success());
@@ -1365,17 +1379,31 @@ mod tests {
13651379

13661380
// FIXME: For some reason, there are target-redirects on non-AJAX lists on docs.rs
13671381
// crate pages other than the "default" one.
1368-
run_check_links_redir(env, "/crate/dummy/0.4.0/features", "", true, false);
1369-
run_check_links_redir(env, "/crate/dummy/0.4.0/builds", "", true, false);
1370-
run_check_links_redir(env, "/crate/dummy/0.4.0/source/", "", true, false);
1371-
run_check_links_redir(env, "/crate/dummy/0.4.0/source/README.md", "", true, false);
1372-
1373-
run_check_links(env, "/crate/dummy/0.4.0", "", false);
1374-
run_check_links(env, "/dummy/latest/dummy", "/", true);
1375-
run_check_links(env, "/dummy/0.4.0/x86_64-pc-windows-msvc/dummy", "/", true);
1382+
run_check_links_redir(env, "/crate/dummy/0.4.0", "/features", "", true, false);
1383+
run_check_links_redir(env, "/crate/dummy/0.4.0", "/builds", "", true, false);
1384+
run_check_links_redir(env, "/crate/dummy/0.4.0", "/source/", "", true, false);
1385+
run_check_links_redir(
1386+
env,
1387+
"/crate/dummy/0.4.0",
1388+
"/source/README.md",
1389+
"",
1390+
true,
1391+
false,
1392+
);
1393+
1394+
run_check_links(env, "/crate/dummy/0.4.0", "", "/", false);
1395+
run_check_links(env, "/dummy/latest", "/dummy", "/", true);
1396+
run_check_links(
1397+
env,
1398+
"/dummy/0.4.0",
1399+
"/x86_64-pc-windows-msvc/dummy",
1400+
"/",
1401+
true,
1402+
);
13761403
run_check_links(
13771404
env,
1378-
"/dummy/0.4.0/x86_64-pc-windows-msvc/dummy/struct.A.html",
1405+
"/dummy/0.4.0",
1406+
"/x86_64-pc-windows-msvc/dummy/struct.A.html",
13791407
"/",
13801408
true,
13811409
);

Diff for: src/web/routes.rs

+11-15
Original file line numberDiff line numberDiff line change
@@ -237,51 +237,47 @@ pub(super) fn build_axum_routes() -> AxumRouter {
237237
get_internal(super::source::source_browser_handler),
238238
)
239239
.route(
240-
"/-/menus/platforms/crate/:name/:version",
240+
"/crate/:name/:version/menus/platforms/crate/",
241241
get_internal(super::crate_details::get_all_platforms_root),
242242
)
243243
.route(
244-
"/-/menus/platforms/crate/:name/:version/features",
244+
"/crate/:name/:version/menus/platforms/crate/features",
245245
get_internal(super::crate_details::get_all_platforms_root),
246246
)
247247
.route(
248-
"/-/menus/platforms/crate/:name/:version/builds",
248+
"/crate/:name/:version/menus/platforms/crate/builds",
249249
get_internal(super::crate_details::get_all_platforms_root),
250250
)
251251
.route(
252-
"/-/menus/platforms/crate/:name/:version/builds/*path",
252+
"/crate/:name/:version/menus/platforms/crate/builds/*path",
253253
get_internal(super::crate_details::get_all_platforms_root),
254254
)
255255
.route(
256-
"/-/menus/platforms/crate/:name/:version/source/",
256+
"/crate/:name/:version/menus/platforms/crate/source/",
257257
get_internal(super::crate_details::get_all_platforms_root),
258258
)
259259
.route(
260-
"/-/menus/platforms/crate/:name/:version/source/*path",
260+
"/crate/:name/:version/menus/platforms/crate/source/*path",
261261
get_internal(super::crate_details::get_all_platforms_root),
262262
)
263263
.route(
264-
"/-/menus/platforms/crate/:name/:version/:target",
264+
"/crate/:name/:version/menus/platforms/:target",
265265
get_internal(super::crate_details::get_all_platforms),
266266
)
267267
.route(
268-
"/-/menus/platforms/crate/:name/:version/:target/*path",
268+
"/crate/:name/:version/menus/platforms/:target/*path",
269269
get_internal(super::crate_details::get_all_platforms),
270270
)
271271
.route(
272-
"/-/menus/platforms/:name/:version/",
272+
"/crate/:name/:version/menus/platforms/",
273273
get_internal(super::crate_details::get_all_platforms),
274274
)
275275
.route(
276-
"/-/menus/platforms/:name/:version/:target/",
276+
"/crate/:name/:version/menus/platforms/:target/",
277277
get_internal(super::crate_details::get_all_platforms),
278278
)
279279
.route(
280-
"/-/menus/platforms/:name/:version/:target/*path",
281-
get_internal(super::crate_details::get_all_platforms),
282-
)
283-
.route(
284-
"/-/menus/releases/:name",
280+
"/crate/:name/:version/menus/releases",
285281
get_internal(super::crate_details::get_all_releases),
286282
)
287283
.route(

Diff for: src/web/rustdoc.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2259,7 +2259,7 @@ mod test {
22592259
// test rustdoc pages stay on the documentation
22602260
let page = kuchikiki::parse_html().one(
22612261
env.frontend()
2262-
.get("/-/menus/releases/hexponent")
2262+
.get("/crate/hexponent/0.3.1/menus/releases")
22632263
.send()?
22642264
.text()?,
22652265
);

Diff for: static/menu.js

+14-4
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,14 @@ function loadAjaxMenu(menu, id, msg, path, extra) {
2020
// We're not in a documentation page, so no need to do anything.
2121
return;
2222
}
23-
const crateName = window.location.pathname.split('/')[1];
23+
const parts = window.location.pathname.split("/");
24+
let crateName = parts[1];
25+
let version = parts[2];
26+
if (crateName === "crate") {
27+
crateName = parts[2];
28+
version = parts[3];
29+
path += "/crate";
30+
}
2431
const xhttp = new XMLHttpRequest();
2532
xhttp.onreadystatechange = function() {
2633
if (xhttp.readyState !== XMLHttpRequest.DONE) {
@@ -33,7 +40,8 @@ function loadAjaxMenu(menu, id, msg, path, extra) {
3340
document.getElementById(id).innerHTML = `Failed to load ${msg}`;
3441
}
3542
};
36-
xhttp.open("GET", `/-/menus/${path}/${crateName}${extra}`, true);
43+
console.log(extra, path);
44+
xhttp.open("GET", `/crate/${crateName}/${version}/menus/${path}${extra}`, true);
3745
xhttp.send();
3846
};
3947

@@ -88,13 +96,15 @@ function loadAjaxMenu(menu, id, msg, path, extra) {
8896
if (newMenu.querySelector("#releases-list")) {
8997
loadAjaxMenu(newMenu, "releases-list", "release list", "releases", "");
9098
} else if (newMenu.querySelector("#platforms")) {
99+
const parts = window.location.pathname.split("/");
100+
const startFrom = parts[1] === "crate" ? 4 : 3;
91101
loadAjaxMenu(
92102
newMenu,
93103
"platforms",
94104
"platforms list",
95105
"platforms",
96-
// We get everything except the first crate name.
97-
"/" + window.location.pathname.split("/").slice(2).join("/")
106+
// We get everything except the first crate name and the version.
107+
"/" + parts.slice(startFrom).join("/")
98108
);
99109
}
100110
}

0 commit comments

Comments
 (0)