Skip to content

Commit 686fb37

Browse files
Migrate menus URLs under /crate/
1 parent 529aa33 commit 686fb37

File tree

4 files changed

+68
-34
lines changed

4 files changed

+68
-34
lines changed

src/web/crate_details.rs

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

12991299
fn run_check_links(
13001300
env: &TestEnvironment,
1301-
url: &str,
1301+
url_start: &str,
1302+
url_end: &str,
13021303
extra: &str,
13031304
should_contain_redirect: bool,
13041305
) {
13051306
run_check_links_redir(
13061307
env,
1307-
url,
1308+
url_start,
1309+
url_end,
13081310
extra,
13091311
should_contain_redirect,
13101312
should_contain_redirect,
@@ -1313,18 +1315,30 @@ mod tests {
13131315

13141316
fn run_check_links_redir(
13151317
env: &TestEnvironment,
1316-
url: &str,
1318+
url_start: &str,
1319+
url_end: &str,
13171320
extra: &str,
13181321
should_contain_redirect: bool,
13191322
ajax_should_contain_redirect: bool,
13201323
) {
1321-
let response = env.frontend().get(url).send().unwrap();
1324+
let response = env
1325+
.frontend()
1326+
.get(&format!("{url_start}{url_end}"))
1327+
.send()
1328+
.unwrap();
13221329
assert!(response.status().is_success());
13231330
let list1 = check_links(response.text().unwrap(), false, should_contain_redirect);
13241331
// Same test with AJAX endpoint.
1332+
let (start, extra_name) = if url_start.starts_with("/crate/") {
1333+
("", "/crate")
1334+
} else {
1335+
("/crate", "")
1336+
};
13251337
let response = env
13261338
.frontend()
1327-
.get(&format!("/-/menus/platforms{url}{extra}"))
1339+
.get(&format!(
1340+
"{start}{url_start}/menus/platforms{extra_name}{url_end}{extra}"
1341+
))
13281342
.send()
13291343
.unwrap();
13301344
assert!(response.status().is_success());
@@ -1356,17 +1370,31 @@ mod tests {
13561370

13571371
// FIXME: For some reason, there are target-redirects on non-AJAX lists on docs.rs
13581372
// crate pages other than the "default" one.
1359-
run_check_links_redir(env, "/crate/dummy/0.4.0/features", "", true, false);
1360-
run_check_links_redir(env, "/crate/dummy/0.4.0/builds", "", true, false);
1361-
run_check_links_redir(env, "/crate/dummy/0.4.0/source/", "", true, false);
1362-
run_check_links_redir(env, "/crate/dummy/0.4.0/source/README.md", "", true, false);
1363-
1364-
run_check_links(env, "/crate/dummy/0.4.0", "", false);
1365-
run_check_links(env, "/dummy/latest/dummy", "/", true);
1366-
run_check_links(env, "/dummy/0.4.0/x86_64-pc-windows-msvc/dummy", "/", true);
1373+
run_check_links_redir(env, "/crate/dummy/0.4.0", "/features", "", true, false);
1374+
run_check_links_redir(env, "/crate/dummy/0.4.0", "/builds", "", true, false);
1375+
run_check_links_redir(env, "/crate/dummy/0.4.0", "/source/", "", true, false);
1376+
run_check_links_redir(
1377+
env,
1378+
"/crate/dummy/0.4.0",
1379+
"/source/README.md",
1380+
"",
1381+
true,
1382+
false,
1383+
);
1384+
1385+
run_check_links(env, "/crate/dummy/0.4.0", "", "/", false);
1386+
run_check_links(env, "/dummy/latest", "/dummy", "/", true);
1387+
run_check_links(
1388+
env,
1389+
"/dummy/0.4.0",
1390+
"/x86_64-pc-windows-msvc/dummy",
1391+
"/",
1392+
true,
1393+
);
13671394
run_check_links(
13681395
env,
1369-
"/dummy/0.4.0/x86_64-pc-windows-msvc/dummy/struct.A.html",
1396+
"/dummy/0.4.0",
1397+
"/x86_64-pc-windows-msvc/dummy/struct.A.html",
13701398
"/",
13711399
true,
13721400
);

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(

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
);

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)