+

Search Tips   |   Advanced Search

sideNav.jspf

 

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

    NOTE: 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.
--%>

<%--
    The navigation attributes can be overidden by the page meta data.
    Instead of using the themePolicy directly, use EL variables initialized to the page meta-data values with the
    theme policy values as a default in case the attributes aren't specified in the page meta-data.    
--%>
<portal-logic:pageMetaData varname="pageMetaData">
    <c:set var="renderSideNavigation">
        <c:out value='${pageMetaData["com.ibm.portal.themepolicy.renderSideNavigation"]}' default="${themePolicy.renderSideNavigation}"/>
    </c:set>
    <c:set var="sideNavigationStartLevel">
        <c:out value='${pageMetaData["com.ibm.portal.themepolicy.sideNavigationStartLevel"]}' default="${themePolicy.sideNavigationStartLevel}"/>
    </c:set>
</portal-logic:pageMetaData>

<c-rt:if test = "${renderSideNavigation}">
<portal-logic:if navigationAvailable="yes" screen="Home,LoggedIn,LoggedOut">
<portal-navigation:navigation  startLevel="${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 ? "wptheme-sideNavItem wptheme-sideNavSelected" : "wptheme-sideNavItem";
    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();
%>
<c:set var="sideNavItemTitle"><portal-fmt:title/></c:set>
<%--  ******************  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="wptheme-sideNav"<%}%> >
<%} %></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="wptheme_ContextMenuUtils.sideNavPageMenu.showAffordance(); return false;" onmouseout="wptheme_ContextMenuUtils.sideNavPageMenu.hideAffordance(); 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="wptheme-sideNavIcon" 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="wptheme-sideNavIcon" src="<portal-logic:urlFindInTheme file='<%=isRTL ? "images/sideNav/plus_rtl.gif" : "images/sideNav/plus.gif" %>' />"></a>
</c-rt:when>
<c-rt:otherwise>
    <img alt="" class="wptheme-sideNavIcon" src="<%=wpsBaseURL%>/images/dot.gif" />
</c-rt:otherwise>
</c-rt:choose>

<%--  ******************  render node  ******************  --%>
<c-rt:choose>
<c-rt:when test="<%=isLabel%>">
    <span class="wptheme-sideNavLabel wptheme-sideNavLevel<%=wpsNavLevel%>"><c:out value='${sideNavItemTitle}' escapeXml='true' /></span>
</c-rt:when>
<c-rt:otherwise>
        <a class="<%=rowCssClass%> wptheme-sideNavLevel<%=wpsNavLevel%>" href='<portal-navigation:navigationUrl type="launch"/>' <% if (isNodeSelected) { %>onfocus="wptheme_ContextMenuUtils.sideNavPageMenu.showAffordance();" <% } %> >
            <c:out value='${sideNavItemTitle}' escapeXml='true' />
        </a>
            <c-rt:if test = "${themePolicy.renderContextMenus}">
        <% if(isNodeSelected){%>      
            <a id="wptheme_selected_page_menu" href="javascript:void(0);" 
               onclick="javascript:wptheme_ContextMenuUtils.sideNavPageMenu.show(); return false;"
               onkeypress="javascript:wptheme_ContextMenuUtils.sideNavPageMenu.show(event); return true;"
               style="cursor: default;"
               >
            <img id="wptheme_selected_page_menu_img" class="wptheme-sideNavMenuLink" src='<portal-logic:urlFindInTheme file="colors/${colorPalette}/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 type="text/javascript">
            //Register the context menu so that the menu can easily be enabled/disabled.
            javascriptEventController.register( "wptheme_selected_page_menu" );
            //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="wptheme-sideNavMenuLink" 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>