Skip to content

Commit 52586a9

Browse files
authored
Merge pull request #58 from coq/simplify-middleware
Simplify middleware
2 parents d007c1c + 730d404 commit 52586a9

File tree

1 file changed

+9
-37
lines changed

1 file changed

+9
-37
lines changed

src/rocqproverorg_web/lib/middleware.ml

Lines changed: 9 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -15,50 +15,22 @@ let language_manual_version next_handler request =
1515
let open Data in
1616
let init_path = request |> Dream.target |> String.split_on_char '/' in
1717
let patch (release : Release.t) = Rocqproverorg.Url.patch release.version in
18-
let release str =
19-
str |> Release.get_by_version
20-
|> Option.value ~default:Release.latest
21-
|> patch
22-
in
23-
let release_path = function
24-
| [] -> (patch Release.latest, [ "index.html" ])
25-
| x :: u -> (
26-
match Release.get_by_version x with
27-
| None -> (patch Release.latest, x :: u)
28-
| Some v -> (patch v, u))
29-
in
3018
let tweak_base u =
3119
match List.rev u with
32-
| _ :: "notes" :: _ -> u
3320
| base :: _ when String.contains base '.' -> u
3421
| htap -> List.rev ("index.html" :: htap)
3522
in
3623
let path =
3724
match init_path with
38-
| "" :: ("manual" | "refman") :: path ->
39-
let version, path = release_path path in
40-
"" :: "doc" :: ("V" ^ version) :: "refman" :: tweak_base path
41-
| "" :: "stdlib" :: path ->
42-
let version, path = release_path path in
43-
"" :: "doc" :: ("V" ^ version) :: "stdlib" :: tweak_base path
44-
| [ ""; "doc"; version; ("refman" | "stdlib" | "api" | "doc") as path ] ->
45-
"" :: "doc" :: version :: path :: [ "index.html" ]
46-
| "" :: "api" :: path ->
47-
let version, path = release_path path in
48-
"" :: "doc" :: ("V" ^ version) :: "api" :: tweak_base path
49-
| [ ""; "releases"; version; "index.html" ] -> [ ""; "releases"; version ]
50-
| [ ""; "releases"; something ]
51-
when String.ends_with ~suffix:".html" something ->
52-
let prefix = String.(sub something 0 (length something - 5)) in
53-
"" :: "releases" :: (if prefix = "index" then [] else [ prefix ])
54-
| "" :: "releases" :: version :: ("htmlman" | "manual") :: tl ->
55-
"" :: "manual" :: release version
56-
:: (if tl = [] then [ "index.html" ] else tl)
57-
| "" :: "releases" :: version :: (("notes" | "api") as folder) :: tl ->
58-
"" :: "manual" :: release version :: folder
59-
:: (if tl = [] && folder = "api" then [ "index.html" ] else tl)
60-
| [ ""; "releases"; version; man ] when String.contains_s man "refman" ->
61-
[ ""; "manual"; release version; man ]
25+
(* When using the /doc/ path, a version is always already provided. *)
26+
| "" :: "doc" :: version :: path ->
27+
"" :: "doc" :: version :: tweak_base path
28+
(* We provide shorter paths that always redirect to the latest version. *)
29+
| ""
30+
:: (("api" | "corelib" | "refman" | "stdlib" | "refman-stdlib") :: _ as
31+
path) ->
32+
let version = patch Release.latest in
33+
"" :: "doc" :: ("V" ^ version) :: tweak_base path
6234
| u -> u
6335
in
6436
if init_path = path then next_handler request

0 commit comments

Comments
 (0)