sideNav.jspf

 

<%-- 

  Licensed Materials - Property of IBM, 5724-E76, 
  (C) Copyright IBM Corp. 2001, 2004, 2006 - All Rights reserved.

  See notes in Default.jsp for information regarding editing theme JSP fragments.  

  This JSP renders the navigation bar on the left side of the page.
  By default, this will continue rendering the navigation where the 
  previous navigation entity left off.

--%>


<c-rt:if test = "${themePolicy.renderSideNavigation}">

  <portal-logic:if navigationAvailable="yes" screen="Home,LoggedIn,LoggedOut">

    <portal-navigation:navigation startLevel="${themePolicy.sideNavigationStartLevel}">
  
    <% int previousNavLevel=0; %>

    <portal-navigation:navigationLoop>
    
    <%--
     basic logic required:
       if node is selected give selected style
       if node has children, show expand/collapse
       if node is unselectable(label), don't render anchor
       if node is external url, open in new window
       if navlevel changed, open/close uls as needed.
    --%>
  
    <% 
    // variables
    boolean isNodeSelected = wpsSelectionModel.isNodeSelected(wpsNavNode);
    String rowCssClass = isNodeSelected ? .wpsNavItem selected" : "wpsNavItem";
    boolean nodeHasChildren = wpsNavModel.hasChildren(wpsNavNode);
    boolean isExpanded = ((Boolean)((com.ibm.portal.state.StateModel)wpsNavModel).getState(wpsNavNode, com.ibm.portal.state.StateType.EXPANSION)).booleanValue() ;
    boolean openInNewWindow = com.ibm.portal.content.ContentNodeType.EXTERNALURL.equals(wpsNavNode.getContentNode().getContentNodeType());
    boolean isLabel = com.ibm.portal.content.ContentNodeType.LABEL.equals(wpsNavNode.getContentNode().getContentNodeType());
    int currentNavLevel = wpsNavLevel.intValue();
    %>
    
    
    <%--  ******************  open/close nav levels  ******************  --%>
    
    <c-rt:choose>
    
    <%-- new unordered list is created when current nav level is higher than previous nav level--%>
  
    <c-rt:when test="<%=currentNavLevel > previousNavLevel%>"><% for(int i = currentNavLevel; i > previousNavLevel; i--){%>
    <ul <% if(previousNavLevel==0){%> class="wpsSideNav"<%}%> >
    <%} %></c-rt:when>
    
    <%-- unordered list is closed and list item that the list is placed inside is also closed--%>
    
    <c-rt:when test="<%=currentNavLevel < previousNavLevel %>"><% for(int i = currentNavLevel; i < previousNavLevel; i++){%></ul></li><%} %></c-rt:when>
    </c-rt:choose>
    <li <%if (isNodeSelected) { %> id="portalSelectedNode" onmouseover="showPageAffordance(); return false;" onmouseout="hidePageAffordance(); return false;" <% } %> >
    <span class="<%=rowCssClass%>">
    
    <%--  ******************   render expand/collapse  ******************  --%>
    
    <c-rt:choose>
    <c-rt:when test="<%=nodeHasChildren && isExpanded %>">
      <a href='<portal-navigation:navigationUrl type="collapse"/>'><img alt="<portal-fmt:text key='link.collapse' bundle='nls.engine'/>" title="<portal-fmt:text key='link.collapse' bundle='nls.engine'/>" class="wpsNavIcon" src="<portal-logic:urlFindInTheme file='images/sideNav/minus.gif' />"></a>
    </c-rt:when>
    <c-rt:when test="<%=nodeHasChildren && !isExpanded %>">
      <a href='<portal-navigation:navigationUrl type="expand"/>'><img alt="<portal-fmt:text key='link.expand' bundle='nls.engine'/>" title="<portal-fmt:text key='link.expand' bundle='nls.engine'/>" class="wpsNavIcon" src="<portal-logic:urlFindInTheme file='images/sideNav/plus.gif'  />"></a>
    </c-rt:when>
    <c-rt:otherwise>
      <img alt="" class="wpsNavIcon" src="<%=wpsBaseURL%>/images/dot.gif" />
    </c-rt:otherwise>
    </c-rt:choose>
    
    <%--  ******************  render node  ******************  --%>
    
    <c-rt:choose>
    <c-rt:when test="<%=isLabel%>">
      <span class="wpsNavLevel<%=wpsNavLevel%>"><portal-fmt:title/></span>
    </c-rt:when>
    <c-rt:otherwise>
        <a class="<%=rowCssClass%> wpsNavLevel<%=wpsNavLevel%>" href="<portal-navigation:navigationUrl type="launch"/>" <% if (openInNewWindow) {%>target="_blank"<% } %> <% if (isNodeSelected) { %>onfocus="showPageAffordance()" <% } %> >
          <portal-fmt:title/>
        </a>
            <c-rt:if test = "${themePolicy.renderContextMenus}">
        <% if(isNodeSelected){%>    
          <a id="menu_<%=pageOidStr%>" href="javascript:void(0);" 
            onclick="javascript:showPageMenu(this); return false;"
             onkeypress="javascript:accessibleShowPageMenu(event);"
             style="cursor: default;"
             >
          <img id="menu_<%=pageOidStr%>_img" class="menuLinkSideNav" src='<portal-logic:urlFindInTheme file="images/topNav/menu_selected_disabled.gif"/>' 
            alt="<portal-fmt:text bundle='nls.engine' key='link.page.actions' />"
            title="<portal-fmt:text bundle='nls.engine' key='link.page.actions' />" />
          </a>
          <script>
          //Register the context menu so that the menu can easily be enabled/disabled.
          javascriptEventController.register( "menu_<%=pageOidStr%>" );
          //Register the li with the mouseover events to load the menu.
          javascriptEventController.register( "portalSelectedNode" );
          </script>
        <% } %>
    
    
                <%--  ******************  Show icon for closing transient pages  ******************  --%>
    
                <portal-dynamicui:closePage>
                        <a href="<% closePageURL.write(escapeXmlWriter); %>" >
                        <img class="menuLinkSideNav" src="<portal-logic:urlFindInTheme file='images/NavigationClose.gif'/>" border="0" align="absmiddle">
                        </a>
                </portal-dynamicui:closePage>                
       </c-rt:if>
    </c-rt:otherwise>
    </c-rt:choose>
    </span>
    
    <%-- the list item is closed if the node does not have children or it is not expanded --%>
    
    <c-rt:if test="<%=(!nodeHasChildren || !isExpanded)%>">
      </li>
    </c-rt:if>
    
    <%previousNavLevel = currentNavLevel;%>  
    </portal-navigation:navigationLoop>
    
    <%-- When no more nodes are left to be processed by the nav loop, it exits but leaves the 
       lists and list items open, there is a check to see if there is more than one level, if true, 
       the lists and list items are closed.  There is a </ul> tag after the for loop to close the initial
        list that is opened.  This initial <ul> is created when a side nav page is created  --%>
    
    <c-rt:if test="<%=previousNavLevel > 0 %>"><% for(int i = previousNavLevel; i > 1; i--){%></ul></li><%} %></ul></c-rt:if>
  
    </portal-navigation:navigation>
  
  </portal-logic:if>
  
  
  
  <portal-theme-ext:themeExtension id="com.ibm.portal.theme.plugin.VerticalPageBarItems" >
    <portal-theme-ext:themeExtensionLoop>
      <portal-theme-ext:themeExtensionRenderInclude />
      </portal-theme-ext:themeExtensionLoop>
  </portal-theme-ext:themeExtension>        
</c-rt:if>