It is a very nice menu only on becarefull when using the horizontal version
a screen wide menu-item that has a nested submenu does not expand back into
the screen but falls of the side of the screen.

Rolf

On 3/2/06, Barry Books <[EMAIL PROTECTED]> wrote:
>
> Tapestry MenuBar component based on
> http://www.cssplay.co.uk/menus/dropdown.html
>
> The packaging is a bit rough and I don't have the container correct but
> the
> included one will work (Note the if IE). I'll make a better library out of
> if soon and put it somewhere. Make sure your doctype is correct or it will
> not work. The pull aside menu on IE has a format problem. I'm also hoping
> it
> can do this
>
> http://www.cssplay.co.uk/menus/flyoutt.html
>
> with the same input.
>
> -- My Border --
> <html xmlns="http://www.w3.org/1999/xhtml"; jwcid="@Shell" title="Acumera"
>     doctype='html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
> http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";'
>
>
>     >
>
> <link rel="stylesheet" media="all" type="text/css"
> href="/Acumera/css/layout/fullWidth.css" />
> <link rel="stylesheet" media="all" type="text/css"
> href="/Acumera/css/layout/menu.css" />
>
>
> <!--[if lte IE 6]>
> <style type="text/css">@import "/Acumera/css/layout/menuie.css";</style>
> <![endif]-->
>
> --- MenuBar.html ---
> <div id="menubar">
> </div>
>
> --- MenuBar.jwc ---
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE component-specification PUBLIC "-//Apache Software
> Foundation//Tapestry Specification 4.0//EN" "
> http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd";>
> <component-specification class="menu.MenuBar">
> </component-specification>
>
> --- Menu.java ---
>
> package menu;
>
> import java.io.BufferedOutputStream;
> import java.io.ByteArrayOutputStream;
> import java.io.CharArrayWriter;
> import java.io.IOException;
> import java.io.PrintWriter;
> import java.io.Reader;
> import java.io.StringReader;
>
> import javax.xml.transform.Transformer;
> import javax.xml.transform.TransformerConfigurationException;
> import javax.xml.transform.TransformerFactory;
>
> import org.apache.tapestry.AbstractComponent;
> import org.apache.tapestry.BaseComponent;
> import org.apache.tapestry.IMarkupWriter;
> import org.apache.tapestry.IRequestCycle;
> import org.apache.tapestry.markup.AsciiMarkupFilter;
> import org.apache.tapestry.markup.MarkupFilter;
> import org.apache.tapestry.markup.MarkupWriterImpl;
>
> /*
> * based on http://www.cssplay.co.uk/menus/dropdownfun.html
> *
> * Put the non ie menu inside this component and it will output both
> * the ie version and non ie version
> * This combined with the ie and nonie stylesheets will create a
> * dropdown menu system for ie and non ie browsers
> *
> * The code does not validate the non ie menu was resonable so no
> * telling what happens if it's not.
> *
> * requires jaxp
> */
>
> public class MenuBar extends AbstractComponent {
>     protected CharArrayWriter _charArrayWriter;
>
>     protected static String noniemenu = "" +
>     "<div id='noniemenu'>"+
>         "<div class=\"holder\">"+
>             "<ul>"+
>                 "<li><a class='outer' href='#'>Title</a></li>"+
>                 "<li><a class='inner second' href='#'>Programs ></a>"+
>                     "<ul id='a3'>"+
>                         "<li><a class='inner' jwcid='@PageLink'
> page='Home'>Home</a></li>"+
>                         "<li><a class='inner' jwcid='@PageLink'
> page='AcuVigil/Overview'>AcuVigil</a></li>"+
>                         "<li><a class='inner' jwcid='@PageLink'
> page='Installer/TODO'>Installer</a></li>"+
>                         "<li><a class='inner' jwcid='@PageLink'
> page='Admin/Admin'>Adminstration</a></li>"+
>                     "</ul>"+
>                 "</li>"+
>                 "<li><a class='inner' href='#'>Preferences</a></li>"+
>                 "<li><a class='inner' jwcid='@DirectLink'
> listener='listener:doLogout'>Logout</a></li>"+
>             "</ul>"+
>         "</div>"+
>     "</div>";
>
>     protected static String iemenu = ""+
>     "<div class='menuie'>"+
>         "<a class='outer' href='#'>Title<table class='first'>"+
>             "<tr>"+
>                 "<td><a class='inner second' href='#'>Programs >"+
>                     "<table><tr><td>"+
>                         "<a class='inner' jwcid='@PageLink'
> page='Home'>Home</a>"+
>                         "<a class='inner' jwcid='@PageLink'
> page='AcuVigil/Overview'>AcuVigil</a>"+
>                         "<a class='inner' jwcid='@PageLink'
> page='Installer/TODO'>Installer</a>"+
>                         "<a class='inner' jwcid='@PageLink'
> page='Admin/Admin'>Adminstration</a>"+
>                     "</td></tr></table>"+
>                 "</a>"+
>
>
>                 "<a class='inner' href='#'>Preferences</a>"+
>                 "<a class='inner' jwcid='@DirectLink'
> listener='listener:doLogout'>Logout</a>"+
>             "</td></tr></table>" +
>         "</a>"+
>     "</div>";
>
>     protected static String xslt = "<?xml version='1.0'
> encoding='UTF-8'?>\n"+
>     "<xsl:stylesheet version='1.0' xmlns:xsl='
> http://www.w3.org/1999/XSL/Transform'>\n"+
>     "<xsl:output method='html'/>" +
>     "<xsl:template match=\"/[EMAIL PROTECTED] = 'noniemenu']\">" +
>         "<div class='menuie'>" +
>             "<xsl:apply-templates/>" +
>         "</div>" +
>     "</xsl:template>" +
>
>     "<xsl:template match=\"[EMAIL PROTECTED] = 'holder']\">" +
>     "<a class='outer' href='index.html'>" +
>         "<xsl:value-of select='ul/li'/>"+
>         "<xsl:apply-templates/>" +
>         "</a>" +
>     "</xsl:template>" +
>
>     "<xsl:template match='ul'>" +
>         "<table class='first'><tr><td>" +
>         "<xsl:apply-templates/>" +
>         "</td></tr></table>" +
>     "</xsl:template>" +
>
>     "<xsl:template match='li'>" +
>         "<xsl:apply-templates/>" +
>     "</xsl:template>"+
>
>     "<xsl:template match=\"[EMAIL PROTECTED] = 'inner']\">" +
>         "<xsl:element name='a'>" +
>                 "<xsl:copy-of select='@*'/>" +
>                 "<xsl:value-of select='.'/>" +
>         "</xsl:element>" +
>     "</xsl:template>"+
>
>     "<xsl:template match=\"[EMAIL PROTECTED] = 'outer']\">" +
>     "</xsl:template>"+
>
>     "<xsl:template match=\"[EMAIL PROTECTED] = 'a3']\">" +
>         "<a class='inner second' href='#'>" +
>             "<table class='second'><tr><td>" +
>                 "<xsl:apply-templates/>"+
>             "</td></tr></table>" +
>         "</a>" +
>     "</xsl:template>"+
>
>     "</xsl:stylesheet>";
>
>
>     public void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
> {
>         IMarkupWriter w = newBufferWriter();
>
>         renderBody(w, cycle);
>         writer.printRaw
> (_charArrayWriter.toCharArray(),0,_charArrayWriter.size()-1);
>         try {
>             writer.printRaw(getIeMenu(_charArrayWriter.toString()));
>         } catch (Exception e) {
>             writer.print(e.toString());
>         }
>     }
>
>     protected String getIeMenu(String noniemenu) throws Exception {
>         CharArrayWriter ie = new CharArrayWriter();
>         javax.xml.transform.Result result =
>             new javax.xml.transform.stream.StreamResult(ie);
>
>
>         TransformerFactory transFact = TransformerFactory.newInstance( );
>
>         Transformer trans = transFact.newTransformer(new
> javax.xml.transform.stream.StreamSource(new StringReader(xslt)));
>         trans.transform(new javax.xml.transform.stream.StreamSource(new
> StringReader(noniemenu)), result);
>
>         return ie.toString();
>     }
>
>     protected IMarkupWriter newBufferWriter() {
>         _charArrayWriter = new CharArrayWriter();
>         PrintWriter pw = new PrintWriter(_charArrayWriter);
>
>         return new MarkupWriterImpl("text/html", pw, new
> AsciiMarkupFilter());
>     }
>
>     public static void main(String[] args) {
>         MenuBar b = new MenuBar();
>         try {
>             System.out.println(b.getIeMenu(noniemenu));
>         } catch (Exception e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         }
>
>     }
>
> }
>
>
> --- menu.css ---
>
> .menuie {display:none;}
> #Anoniemenu {position:absolute; top: 110px;}
>
> #noniemenu .holder ul {padding:0; margin:0;}
> #noniemenu .holder ul li {list-style-type: none;}
> #noniemenu .holder li {}
> #noniemenu .holder li ul {display: none;}
> #noniemenu .holder li:hover > ul#a3 {
>     display:block; position:absolute; left:105px; margin-top:-20px;
> border:1px solid #000;
>     }
> #noniemenu .holder .bold {font-weight:bold;}
>
> #noniemenu .holder:hover {
>   height:auto;
>   color:black;
> }
>
> #noniemenu .holder {
>   color:#fff;
>   width:104px;
>   height:18px;
>   display:block;
>   overflow:hidden;
>   float:left;
>   border:1px solid #000;
>   margin-right:1px;
>   font-size:10px;
>   }
>
> #noniemenu a.outer, #noniemenu a.outer:visited {
>    color:#fff;
>    width:104px;
>    line-height:18px;
>    display:block;
>    background:blue;
>    text-align:center;
>    text-decoration:none;
>    font-family: verdana, arial, sans-serif;
>    background-image: url(../../images/MenuBlueGrad.gif);
> }
> #noniemenu a.outer:hover {
>   background:#blue;
>   overflow:visible;
>   }
> #noniemenu div.open {display:none;}
> #noniemenu a.inner, #noniemenu a.inner:visited {
>   display:block;
>   width:104px;
>   height:18px;
>   line-height:18px;
>   border-bottom:1px solid #000;
>   text-decoration:none;
>   color:#000;
>   background:#eee;
>   text-align:center;
>   }
> #noniemenu a.second {font-weight:bold;}
> #noniemenu a.inner:hover {
>   background:#add;
>   }
>
>
>
> --- iemenu.css ---
>
>
>
>
> #noniemenu {display:none; }
> .menuie {display:block; }
> .menuie a.outer, .menu a.outer:visited {
>    color:#fff;
>    width:104px;
>    height:18px;
>    display:block;
>    background:#e09222;
>    border:1px solid #000;
>    margin-right:1px;
>    text-align:center;
>    float:left;
>    text-decoration:none;
>    font-family: verdana, arial, sans-serif;
>    font-size:10px;
>    line-height:18px;
>    overflow:hidden;
>         background-image: url(../../images/MenuBlueGrad.gif);
>
>    }
> .menuie a.outer:hover {
>   background:blue;
>   overflow:visible;
>   }
> .menuie a.outer:hover table.first {
>   display:block;
>   background:#eee;
>   border-collapse:collapse;
>   }
> .menuie a.inner, .menu a.inner:visited {
>   display:block;
>   width:102px;
>   height:18px;
>   border-bottom:1px solid #000;
>   text-decoration:none;
>   color:#000;
>   font-family: verdana, arial, sans-serif;
>   font-size:10px;
>   text-align:center;
>   }
> .menuie a.inner:hover {
>   background:#add;
>   }
>
> .menuie a.outer table.first a.second {
>   height:18px;
>   line-height:18px;
>   overflow:hidden;
>   font-weight:bold;
>   }
> .menuie a.outer table.first a.second:hover {
>   position:relative;
>   overflow:visible;
>   }
> .menuie a.outer table.first a.second:hover table {
>   position:absolute;
>   top:-2px;
>   left:102px;
>   border-collapse:collapse;
>   background:#eee;
>   border:1px solid #000;
>   font-weight:normal
> }
>
>

Reply via email to