@@ -37,27 +37,34 @@ pub fn parse_cmd(name: &str) -> Option<Box<Subcommand>> {
3737 }
3838}
3939
40- fn write_toc ( book : & Book , path_to_root : & Path , out : & mut Write ) -> io:: Result < ( ) > {
40+ fn write_toc ( book : & Book , current_page : & BookItem , out : & mut Write ) -> io:: Result < ( ) > {
4141 fn walk_items ( items : & [ BookItem ] ,
4242 section : & str ,
43- path_to_root : & Path ,
43+ current_page : & BookItem ,
4444 out : & mut Write ) -> io:: Result < ( ) > {
4545 for ( i, item) in items. iter ( ) . enumerate ( ) {
46- try!( walk_item ( item, & format ! ( "{}{}." , section, i + 1 ) [ ..] , path_to_root , out) ) ;
46+ try!( walk_item ( item, & format ! ( "{}{}." , section, i + 1 ) [ ..] , current_page , out) ) ;
4747 }
4848 Ok ( ( ) )
4949 }
5050 fn walk_item ( item : & BookItem ,
5151 section : & str ,
52- path_to_root : & Path ,
52+ current_page : & BookItem ,
5353 out : & mut Write ) -> io:: Result < ( ) > {
54- try!( writeln ! ( out, "<li><a href='{}'><b>{}</b> {}</a>" ,
55- path_to_root. join( & item. path. with_extension( "html" ) ) . display( ) ,
54+ let class_string = if item. path == current_page. path {
55+ "class='active'"
56+ } else {
57+ ""
58+ } ;
59+
60+ try!( writeln ! ( out, "<li><a {} href='{}'><b>{}</b> {}</a>" ,
61+ class_string,
62+ item. path_to_root. join( & item. path. with_extension( "html" ) ) . display( ) ,
5663 section,
5764 item. title) ) ;
5865 if !item. children . is_empty ( ) {
5966 try!( writeln ! ( out, "<ul class='section'>" ) ) ;
60- let _ = walk_items ( & item. children [ ..] , section, path_to_root , out) ;
67+ let _ = walk_items ( & item. children [ ..] , section, current_page , out) ;
6168 try!( writeln ! ( out, "</ul>" ) ) ;
6269 }
6370 try!( writeln ! ( out, "</li>" ) ) ;
@@ -67,7 +74,7 @@ fn write_toc(book: &Book, path_to_root: &Path, out: &mut Write) -> io::Result<()
6774
6875 try!( writeln ! ( out, "<div id='toc' class='mobile-hidden'>" ) ) ;
6976 try!( writeln ! ( out, "<ul class='chapter'>" ) ) ;
70- try!( walk_items ( & book. chapters [ ..] , "" , path_to_root , out) ) ;
77+ try!( walk_items ( & book. chapters [ ..] , "" , & current_page , out) ) ;
7178 try!( writeln ! ( out, "</ul>" ) ) ;
7279 try!( writeln ! ( out, "</div>" ) ) ;
7380
@@ -115,7 +122,7 @@ fn render(book: &Book, tgt: &Path) -> CliResult<()> {
115122 <span class="bar"></span>
116123 </button>
117124 </div>"# ) ) ;
118- let _ = write_toc ( book, & item. path_to_root , & mut toc) ;
125+ let _ = write_toc ( book, & item, & mut toc) ;
119126 try!( writeln ! ( & mut toc, "<div id='page-wrapper'>" ) ) ;
120127 try!( writeln ! ( & mut toc, "<div id='page'>" ) ) ;
121128 }
0 commit comments