/* Progressive enhancement JavaScript for Jena web site. * If JavaScript is available, we make the navigation links * look a bit more visually appealing and less overwhelming. */ var JenaNavigation = function() { var currentPage = {}; var currentSection = {}; var currentTopicListElem = null; var init = function(){ getLocation(); setTopLevelNavigation(); setSideNavigationVisibility(); moveToC( currentTopicListElem ); }; /** * Attache class 'selected' to the given menu element * @param {Object} el */ var setSelectedMenu = function( el ) { $(el).addClass( "selected" ); }; /** * Set the top-level (horizontal) menu to show the current section * selection */ var setTopLevelNavigation = function() { findTopMenu( currentSection.fileName, setSelectedMenu ); }; /** * Identify which top-level menu element matches the current file name, * and apply the given function to it. * @param {Object} fileName * @param {Object} fn */ var findTopMenu = function( fileName, fn ) { var expr = (fileName == 'about_jena') ? "#home_menu" : "#topmenu a[href*='" + fileName + "']"; $(expr).first().each( function( n ) { fn( this ); } ); }; /** * Identify current page and section. */ var getLocation = function() { var url = document.URL; var matches = url.match( /^.*jena.*apache\.org\/([^\/]*)\/(.*)$/ ); if (matches) { currentSection.fileName = matches[1]; currentPage.fileName = matches[2]; } else { currentSection.fileName = "about_jena"; currentPage.fileName = "index.html"; } currentSection.title = asTitle( currentSection.fileName ); currentPage.title = asTitle( currentPage.fileName.replace( /.html$/, '' ) ); }; /** * Hide the irrelevant parts of the side menu. We keep the * quick links section and the ASF section, and the section * containing the current page. Also styles the menu to * highlight the current page, and adds to the navigation * menu the ToC from the main page. */ var setSideNavigationVisibility = function() { $("#navigation>h1").hide(); $("#navigation>ul").hide(); showMenu( "#quick-links" ); showMenu( "#asf-links" ); var currentTopicMenu = "#" + currentSection.fileName.replace( /\_/g, "-" ); showMenu( currentTopicMenu ); // make the current topic link styled as 'current' currentTopicListElem = $( currentTopicMenu ).next() .find( "a[href$='" + currentPage.fileName + "']" ) .first() .parent(); currentTopicListElem.toggleClass( "selected" ); }; /** * Show a menu with the given element ID, which we take to * that element and its next sibling * @param {Object} id */ var showMenu = function( id ) { $(id).show(); $(id).next().show(); }; /** * Return the given name as a title (space separators, * leading capital letter) * @param {Object} f */ var asTitle = function( f ) { f = f.replace( /\_/g, " " ); return f.slice( 0, 1 ).toUpperCase() + f.slice( 1 ); }; /** * Move the table of contents to be the child of the given node */ var moveToC = function( newParent ) { $( "#table_of_contents" ).next().appendTo( newParent ); $( "#table_of_contents" ).hide(); }; // Return the public variables/functions for this module return { init : init }; }(); // Initialize on load $(function(){ JenaNavigation.init(); });