Application Menu

The Application Menu appears at the top of each page. It is a bar-separated list of links to application pages. If the current page is on that list, the corresponding link is disabled (that is, rendered as plain text).

The Sakai Style Guide 1.4 describes this as Intra-tool Navigation, but does not specify context-sensitive disabling of links.

Samigo has a similar page element, currently coded in-line on each page. CVS contains a NavigationMapTag which seems close to what's needed, but lacks support for disabling the current context.

APPROACH

Since the Sakai 2.0 Baseline Gradebook has a relatively small number of pages, we'll begin, like Samigo, by accepting the copy-paste-and-edit overhead. That is, we'll in-line the variant menus and statically include the invariant form when we can.

If a full-featured implementation of the Intra-tool Navigation component becomes available in time for us to integrate it without hurting our delivery schedule, we'll try switching to it.

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.
  1. Mar 17, 2005

    Jon Andersen says:

    (FROM ED) I suggest we might do the following: essentially use an already develo...

    (FROM ED)
    I suggest we might do the following:

    essentially use an already developed tag: dataLine (Samigo)
    what it does:supports iteration through a list, but without a table
    notes on attributes: same as dataTable, but with a separator attribute, you can put a dynaCommandLink in it...it supports all the menu capability... and more

    add a tag: dynaCommandLink...to add the on/off switchable command link
    what it does: an alternate renderer for commandLink, renders just the name of the link if currentLink, otehrwise it works just like a commandLink.
    notes on attributes: add a currentLink attribute

    so you would have a dynamic list of link names, actions, and current boolean
    something like:

    <sakaix:dataLine value="#{mylist.links}" var="link" separator=" | "
      first="0" rows="10">
      <h:column>
        <sakaix:commandLink
          action="#{link.getAction}" currentLink="#{link.current}" >
          <h:outputText value="#{link.text}" />
        </sakaix:commandLink>
      </h:column>
    </sakaix:dataLine>
  2. Mar 17, 2005

    Jon Andersen says:

    (FROM ED) I have a solution that will eliminate the need to develop another tag ...

    (FROM ED)

    I have a solution that will eliminate the need to develop another tag entirely.

    Since we will have the dataLine component you can write:

    <sakaix:dataLine value="#{mylist.links}" var="link" separator=" | " >
      <h:column>
        <h:commandLink rendered="#{!link.current}"
          action="#{link.getAction}" currentLink="="#{link.current}" >
          <h:outputText value="#{link.text}" />
        </h:commandLink>
        <h:outputText value="#{link.text}" rendered="#{link.current}"/>
      </h:column>
    </sakaix:dataLine>

    You would just set up a tool bean with a list of link beans each of which has properties for current and text and a getAction method.

    My suggested approach (without typo) would be:

    <sakaix:dataLine value="#{mylist.links}" var="link" separator=" | "
      first="0" rows="10">
      <h:column>
        <sakaix:dynaCommandLink
          action="#{link.getAction}" currentLink="="#{link.current}" >
          <h:outputText value="#{link.text}" />
        </sakaix:commandLink>
      </h:column>
    </sakaix:dataLine>

    If we created another tag, I don't think that it would be very much work to implement if we take this subclassing approach.

    if (currentLink)
    {
      // delegate to the HTML link renderer (super)
    }
    else
      // render the children only
    }