@@ -69,6 +69,27 @@ book!(
6969 RustdocBook , "src/doc/rustdoc" , "rustdoc" , RustbookVersion :: MdBook1 ;
7070) ;
7171
72+ fn generate_jump_version_js ( p : & Path ) -> String {
73+ let content = fs:: read ( p) . expect ( "file not found" ) ;
74+ let s = String :: from_utf8_lossy ( & content) ;
75+ let version_parts = crate :: channel:: CFG_RELEASE_NUM . split ( "." ) . collect :: < Vec < _ > > ( ) ;
76+ let mut versions = vec ! [ "\" nightly\" " . to_owned( ) ,
77+ "\" beta\" " . to_owned( ) ,
78+ "\" stable\" " . to_owned( ) ] ;
79+ let mut middle_version = i32:: from_str_radix ( version_parts[ 1 ] , 10 ) . expect ( "unknown number" ) ;
80+
81+ while middle_version >= 0 {
82+ versions. push ( format ! ( "\" 1.{}.0\" " , middle_version) ) ;
83+ middle_version -= 1 ;
84+ }
85+ s. replace ( "var VERSIONS = [];" , & format ! ( "var VERSIONS = [{}];" , versions. join( "," ) ) )
86+ }
87+
88+ fn generate_jump_version_css ( p : & Path ) -> String {
89+ let content = fs:: read ( p) . expect ( "file not found" ) ;
90+ String :: from_utf8 ( content) . expect ( "invalid UTF8" )
91+ }
92+
7293#[ derive( Debug , Copy , Clone , Hash , PartialEq , Eq ) ]
7394enum RustbookVersion {
7495 MdBook1 ,
@@ -329,21 +350,23 @@ fn invoke_rustdoc(builder: &Builder, compiler: Compiler, target: Interned<String
329350 let favicon = builder. src . join ( "src/doc/favicon.inc" ) ;
330351 let footer = builder. src . join ( "src/doc/footer.inc" ) ;
331352 let version_info = out. join ( "version_info.html" ) ;
353+ let jump_version_js = builder. src . join ( "src/doc/jump-version.js" ) ;
354+ let jump_version_css = builder. src . join ( "src/doc/jump-version.css" ) ;
332355
333356 let mut cmd = builder. rustdoc_cmd ( compiler. host ) ;
334357
335358 let out = out. join ( "book" ) ;
336359
337360 cmd. arg ( "--html-after-content" ) . arg ( & footer)
338- . arg ( "--html-before-content" ) . arg ( & version_info)
339- . arg ( "--html-in-header" ) . arg ( & favicon)
340- . arg ( "--markdown-no-toc" )
341- . arg ( "--markdown-playground-url" )
342- . arg ( "https://play.rust-lang.org/ " )
343- . arg ( "-o " ) . arg ( & out )
344- . arg ( & path )
345- . arg ( "--markdown-css" )
346- . arg ( "../rust.css" ) ;
361+ . arg ( "--html-before-content" ) . arg ( & version_info)
362+ . arg ( "--html-in-header" ) . arg ( & favicon)
363+ . arg ( "--raw-js-in-header" ) . arg ( & generate_jump_version_js ( & jump_version_js ) )
364+ . arg ( "--raw-css-in-header" ) . arg ( & generate_jump_version_css ( & jump_version_css ) )
365+ . arg ( "--markdown-no-toc " )
366+ . arg ( "--markdown-playground-url " ) . arg ( "https://play.rust-lang.org/" )
367+ . arg ( "-o" ) . arg ( & out )
368+ . arg ( "--markdown-css" ) . arg ( "../rust. css")
369+ . arg ( & path ) ;
347370
348371 builder. run ( & mut cmd) ;
349372}
@@ -388,6 +411,8 @@ impl Step for Standalone {
388411 let favicon = builder. src . join ( "src/doc/favicon.inc" ) ;
389412 let footer = builder. src . join ( "src/doc/footer.inc" ) ;
390413 let full_toc = builder. src . join ( "src/doc/full-toc.inc" ) ;
414+ let jump_version_js = builder. src . join ( "src/doc/jump-version.js" ) ;
415+ let jump_version_css = builder. src . join ( "src/doc/jump-version.css" ) ;
391416 t ! ( fs:: copy( builder. src. join( "src/doc/rust.css" ) , out. join( "rust.css" ) ) ) ;
392417
393418 let version_input = builder. src . join ( "src/doc/version_info.html.template" ) ;
@@ -424,10 +449,13 @@ impl Step for Standalone {
424449 cmd. arg ( "--html-after-content" ) . arg ( & footer)
425450 . arg ( "--html-before-content" ) . arg ( & version_info)
426451 . arg ( "--html-in-header" ) . arg ( & favicon)
452+ . arg ( "--raw-js-in-header" )
453+ . arg ( & generate_jump_version_js ( & jump_version_js) )
454+ . arg ( "--raw-css-in-header" )
455+ . arg ( & generate_jump_version_css ( & jump_version_css) )
427456 . arg ( "--markdown-no-toc" )
428457 . arg ( "--index-page" ) . arg ( & builder. src . join ( "src/doc/index.md" ) )
429- . arg ( "--markdown-playground-url" )
430- . arg ( "https://play.rust-lang.org/" )
458+ . arg ( "--markdown-playground-url" ) . arg ( "https://play.rust-lang.org/" )
431459 . arg ( "-o" ) . arg ( & out)
432460 . arg ( & path) ;
433461
@@ -506,6 +534,10 @@ impl Step for Std {
506534 let mut cargo = builder. cargo ( compiler, Mode :: Std , target, "rustdoc" ) ;
507535 compile:: std_cargo ( builder, & compiler, target, & mut cargo) ;
508536
537+
538+ let jump_version_js = builder. src . join ( "src/doc/jump-version.js" ) ;
539+ let jump_version_css = builder. src . join ( "src/doc/jump-version.css" ) ;
540+
509541 // Keep a whitelist so we do not build internal stdlib crates, these will be
510542 // build by the rustc step later if enabled.
511543 cargo. arg ( "-Z" ) . arg ( "unstable-options" )
@@ -518,6 +550,10 @@ impl Step for Std {
518550 . arg ( "--markdown-css" ) . arg ( "rust.css" )
519551 . arg ( "--markdown-no-toc" )
520552 . arg ( "--generate-redirect-pages" )
553+ . arg ( "--raw-js-in-header" )
554+ . arg ( & generate_jump_version_js ( & jump_version_js) )
555+ . arg ( "--raw-css-in-header" )
556+ . arg ( & generate_jump_version_css ( & jump_version_css) )
521557 . arg ( "--index-page" ) . arg ( & builder. src . join ( "src/doc/index.md" ) ) ;
522558
523559 builder. run ( & mut cargo) ;
0 commit comments