sourcforge > sotacs
 

Advanced

Example 3 : Advanced Example

This example demonstrates a complex navigation bar with individual icons and three differently layouted types of items

Screenshots

This is the preview
of the
static layout HTML

preview
Note
This is static documentation.
There is a client-dynamics version of this example showing mouse-over and folder open/closing live
(without server dynamics)

You can see this example in full action if you install the examples web-app
A Screenshot 'live'
  • Two folders are opened
  • The 'fish' item is selected
  • The Mouse is over the first item (DirectLink)
screenshot

How to build it?

  • A table with 3 columns is used to render the preview
  • There are 8 dynamically used rows and 3 more rows for preview
  • The individual items defined in the model are retrieved with the getIcon(key) and hasIcon(key) methods of the INavBarItem(key) interface.

Advanced.html

<link rel="stylesheet" href="../css/navbar/advanced.css" type="text/css"/>
		<table jwcid="@sotacs:NavigationBar" width="180" 
		    xmlSource="asset:model" 
		    value="ognl:item" itemMode="ognl:mode"
		    cellspacing="0" cellpadding="2"
		    selected="ognl:selected" cache="examples_advanced"
		    listener="listener:onClickDirectItem">
		     
		  <!-- normal item -->
		  <tr class="menuItem" jwcid="@sotacs:NavigationItem" type="leaf;OUT">
		     <td align="center" class="icon">
		         <img src="../../images/navbar/menuitem.gif"
		         jwcid="@Image" image="asset:whiteball" />
		     </td>
		     <td><span jwcid="@Insert" value="ognl:item.value">Caption 1</span></td>
		     <td class="icon">&nbsp;</td>
		  </tr>
		  
		  <!-- normal item mouse over -->
		  <tr class="menuItemOver" jwcid="@sotacs:NavigationItem" type="leaf;OVER">
		    <td align="center" class="icon">
		         <img src="../../images/navbar/menuitem.gif"
		         jwcid="@Image" image="asset:whiteball" />
		     </td>
		    <td><span jwcid="@Insert" value="ognl:item.value">Mouse Over</span></td>
		    <td class="icon">&nbsp;</td>
		  </tr> 
		  
		  <!-- normal item selected -->
		  <tr class="menuItemSel" jwcid="@sotacs:NavigationItem" type="leaf;OUT_SEL">
		    <td align="center" class="icon">
		         <img src="../../images/navbar/menuitem_hl.gif"
		         jwcid="@Image" image="asset:orangeball" />
		     </td>
		    <td ><span jwcid="@Insert" value="ognl:item.value">Selected</span></td>
		    <td class="icon">&nbsp;</td>
		  </tr> 
		  
		  <!-- folder -->
		  <tr class="folder" jwcid="@sotacs:NavigationItem" type="folder;OUT|OUT_OPEN">
		    <td align="center" class="licon">
		         <img src="../../images/navbar/folder.gif"
		         jwcid="@Image" image="ognl:mode.opened ? assets.whitevertical : assets.whitehorizontal" />
		     </td>
		    <td><span jwcid="@Insert" value="ognl:item.value">Folder</span>
		    </td>
		    <td class="icon"><img jwcid="subimage5" src="../../images/navbar/world.gif"/></td>
		  </tr>  
		  <tr class="folder" >
		    <td align="center" class="icon">
		         <img src="../../images/navbar/folder_opened.gif"/>
		     </td>
		    <td>Open Folder</td>
		    <td class="icon">&nbsp;</td>
		  </tr>  
		  
		  <!--  subitems -->
		  <tr class="subItem" jwcid="@sotacs:NavigationItem" type="sub;OUT">
		    <td colspan="2">
		        <img vspace="1" src="../../images/navbar/subitem.png"
		         jwcid="@Image" image="asset:subgreen" />
		        <span jwcid="@Insert" value="ognl:item.value">Subitem</span></td>
		    <td class="icon"><img jwcid="subimage" src="../../images/navbar/book.gif"/></td>    
		  </tr>  
		  <tr class="subItem">
		    <td colspan="2">
		        <img vspace="1" src="../../images/navbar/subitem.png"/>
		        Subitem 2</td>
		    <td class="icon"><img src="../../images/navbar/fish.gif"/></td>       
		  </tr>  
		  <tr class="subItem">
		    <td colspan="2">
		        <img vspace="1" src="../../images/navbar/subitem.png"/>
		        Subitem 3</td>
		    <td  class="icon"><img src="../../images/navbar/book.gif"/></td>       
		  </tr> 
		  
		  <!-- subitem over -->
		  <tr class="subItemOver" jwcid="@sotacs:NavigationItem" type="sub;OVER">
		    <td colspan="2">
		        <img vspace="1" src="../../images/navbar/subitem_hl.png"
		         jwcid="@Image" image="asset:subwhite" />
		       <span jwcid="@Insert" value="ognl:item.value">Subitem Over</span></td>
		    <td class="icon"><img jwcid="subimage2" src="../../images/navbar/book.gif"/></td>      
		  </tr>  
		  
		  <!-- subitem selected -->
		  <tr class="subItemSel" jwcid="@sotacs:NavigationItem" type="sub;OUT_SEL">
		    <td colspan="2">
		        <img vspace="0" src="../../images/navbar/menuitem_hl.gif"
		         jwcid="@Image" image="asset:orangeball" />
		       <span jwcid="@Insert" value="ognl:item.value">Subitem Sel</span></td>
		    <td class="icon"><img jwcid="subimage3" src="../../images/navbar/book.gif"/></td>      
		  </tr>  
		  

		  <!-- folder over -->
		  <tr class="menuItemOver" jwcid="@sotacs:NavigationItem" type="folder;OVER|OVER_OPEN">
		    <td align="center" class="icon">
		         <img src="../../images/navbar/folder.gif"
		         jwcid="@Image" image="ognl:mode.opened ? assets.whitevertical : assets.whitehorizontal" />
		     </td>
		    <td><span jwcid="@Insert" value="ognl:item.value">Folder Over</span>
		    </td>
		    <td class="icon"><img jwcid="subimage4" src="../../images/navbar/world.gif"/></td>
		  </tr>  
		</table>

advanced-menu.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE navigation PUBLIC "-//sf//sotacs//NavigationBar0.7//EN" 
  "http://sotacs.sourceforge.net/dtds/navigation-bar_0.7.dtd">
<navigation>	
	<item value="DirectLink" type="leaf" id="dl1">
		<directLink/>
	</item>
	<item value="I am an ExternalLink" type="leaf" id="dl1">
		<externalLink page="navbar/Advanced"/>
	</item>
	<item value="Folder with iconed subitems" type="folder" id="folder1">
		<item value="books" type="sub" id="books">
			<directLink/>
			<icon key="icon" type="context" path="/images/navbar/advanced/book.gif"/>
		</item>
		<item value="glass" type="sub" id="glass">
			<directLink/>
			<icon key="icon" type="context" path="/images/navbar/advanced/glass.gif"/>
		</item>
		<item value="fish" type="sub" id="fish">
			<directLink/>
			<icon key="icon" type="context" path="/images/navbar/advanced/fish.gif"/>
		</item>		
	</item>
	<item value="Another Folder" type="folder" id="folder2">
		<item value="Scheme=https" type="sub" id="sub4">
			<directLink scheme="https"/>
		</item>
		<item value="Goto Anchor 'java'" type="sub" id="sub5">
			<directLink anchor="java"/>
		</item>
		<item value="Goto Anchor 'html'" type="sub" id="sub6">
			<directLink anchor="html"/>
		</item>		
	</item>
	<item value="Call A JavaScript" type="leaf" id="gl1">
		<genericLink href="javascript:alert(\'hello world\')"/>
	</item>
	<item value="GenericLink to SourceForge" type="leaf" id="gl1">
		<genericLink href="http://www.sourceforge.net"/>
	</item>
	<item value="A PageLink" type="leaf" id="pl1">
		<pageLink page="dynimg/Circle"/>
	</item>
	<item value="I18N Folder" type="folder" id="folder3">
		<icon key="icon" type="context" path="/images/navbar/advanced/world.gif"/>
		<item value="message:m1" type="sub" id="m1">
			<directLink/>
		</item>
		<item value="message:m2" type="sub" id="m2">
			<directLink/>
		</item>
		<item value="message:m3" type="sub" id="m3">
			<directLink/>
		</item>
	</item>	
</navigation>

Advanced.java

public abstract class Advanced extends BasePage implements IExternalPage{
   
	public abstract INavBarItem getItem();
	public abstract ItemMode getMode();
	
public abstract void setSelected(String sel);
	
	public abstract void setNotice(String notice);
	   
	/**
	 * listens to the DirectLinks
	 */
	public void onClickDirectItem(IRequestCycle cycle, String id){
		String notice = "item '" + id + "' was invoked (DirectLink)";
		setNotice(notice);
		setSelected(id);
	}

	/**
	 * listens to the ExternalLinks
	 */
	public void activateExternalPage(Object[] args, IRequestCycle cycle) {
		String notice = "item '" + args[0] + "' was invoked (DirectLink)";
		setNotice(notice);
		setSelected((String)args[0]);
	}
	
}

Advanced.page

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE page-specification PUBLIC
  "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
  "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">

<page-specification >
	<asset path="classpath:/examples/navbar/advanced-menu.xml" name="model"/>
	<asset path="context:/images/navbar/advanced/menuitem.gif" name="whiteball"/>
	<asset path="context:/images/navbar/advanced/menuitem_hl.gif" name="orangeball"/>
	<asset path="context:/images/navbar/advanced/folder.gif" name="whitehorizontal"/>
	<asset path="context:/images/navbar/advanced/folder_opened.gif" name="whitevertical"/>
	<asset path="context:/images/navbar/advanced/subitem.png" name="subgreen"/>
	<asset path="context:/images/navbar/advanced/subitem_hl.png" name="subwhite"/>
	<component id="subimage" type="Any" >
		<binding name="src" value="ognl:item.hasIcon('icon') ? item.getIcon('icon') : '../images/navbar/advanced/spacer.gif'"/>
	</component>
	<component id="subimage2" copy-of="subimage"/>
	<component id="subimage3" copy-of="subimage"/>	
	<component id="subimage4" copy-of="subimage"/>
	<component id="subimage5" copy-of="subimage"/>
	<property name="selected" persist="client" initial-value="literal:fish"/>
</page-specification>

advanced.css

/* normal level 0 item */

.menuItem{
   background-color: rgb(20,120,20);
   color: white;
}

.menuItemOver{
   background-color: rgb(50,130,200);
   color: white;
}

.menuItemSel{
   background-color: yellow;
   color: black;
}

/* folder */

.folder{
	background-color: #1a5d17;
	color: white;
}

.menuItem TD,
.menuItemOver TD,
.menuItemSel TD,
.folder TD{	
   font-size: 12pt;
   font-weight: bold;
   border-bottom: 2px solid white;
}

.icon{
   width: 20px;
   text-indent: 0px;	
}

/* subitem */

.subItem{
  	background-color: rgb(180,220,180);
  	color: #1a5d17;
    text-indent: 20px;	
}	

.subItemOver{
  	background-color: rgb(50,130,200);
    color: white;
    text-indent: 20px;	
}	

.subItemSel{
  	background-color: yellow;
    color: black;
    text-indent: 17px;	
}	

.subItem TD,
.subItemOver TD,
.subItemSel TD{
   font-size: 11pt;
   font-weight: normal;
   border-bottom: 2px solid white;
}