Add table of contents to documentation pages
[exim-website.git] / templates / web / doc / chapter.js
diff --git a/templates/web/doc/chapter.js b/templates/web/doc/chapter.js
new file mode 100644 (file)
index 0000000..204f924
--- /dev/null
@@ -0,0 +1,54 @@
+// Sidebar table of contents
+       (function( $ ){
+               
+               var click_func = function(e){
+                       if( $('#toc').data('opened') ){
+                               $('#toc > *').animate({ left: '-=' + $('#toc > ul').width() + 'px' },'fast');
+                               $('#toc').removeData('opened');
+                       } else {
+                               $('#toc > *').animate({ left: '+=' + $('#toc > ul').width() + 'px' },'fast');
+                               $('#toc').data('opened',1);
+                       }
+               };
+
+                var type = document.location.pathname.match(/\/doc\/html\/spec_html\/filter/) ? 'filter' : 'spec';
+               
+               // Get the relevant table of contents
+               $.get( type === 'spec' ? 'index_toc.xml' : 'filter_toc.xml',
+                       function( xml ){
+
+                               // Remove the main list from the DOM for performance
+                               var $ul = $('#toc > ul').remove();
+
+                               // Traverse chapters
+                               var chapter_id = 0;
+                               $(xml).find('c').each(function(){
+                                       ++chapter_id;
+                                               var chapter_title = $(this).children('t').text();
+                                       var chapter_url   = $(this).children('u').text();
+
+                                       var chapter_li = $('<li/>').append(
+                                               $('<a/>').attr({
+                                                       href:   chapter_url,
+                                                       title:  chapter_title
+                                               }).text( chapter_id + '. ' + chapter_title ),
+                                               $('<ul/>').hide()
+                                       ).appendTo( $ul );
+                                });
+
+                               $('#toc img').fadeIn('slow',function(){
+                                       // Add the main list back to the DOM
+                                       $ul
+                                               .removeClass( 'hidden' )
+                                               .css( 'visibility', 'hidden' )
+                                               .appendTo( '#toc' )
+                                               .css( 'left', '-' + $ul.width() + 'px' )
+                                               .css( 'visibility', 'visible' );
+                                               $('#toc > img').mousedown(click_func);
+                                               $('#toc > ul').click(click_func);
+                                               $('#toc a').click(function(e){e.stopPropagation()});
+                               });
+                       }
+                );
+        })( jQuery );
+