メニューを作り直した

http://joey.sourceforge.jp/briwnie-menu-sample.html
JavaScriptでメニューを実現するクラスを作ってみました。
前にも作ったんですが、色々おかしかったので最初から作り直しました。

<div id="menu1">
    <table cellspacing="0" border="0" cellpadding="0" bgcolor="#aabbcc">
        <tr>
            <td id="menu1_0">menu1_0</td>
            <td id="menu1_1">めにゅーイチのイチ</td>
        </tr>
    </table>
</div>
<div id="menu1_0_body" style="position:absolute;display:none">
    <table cellspacing="0" border="0" cellpadding="0" bgcolor="#bbccaa" width="200">
        <tr id="menu1_0_0"><td>&nbsp;</td><td>メニューイチのゼロのゼロ</td><td align="right"><img src="triangle2_16.png"></td></tr>
        <tr id="menu1_0_1"><td>&nbsp;</td><td><a href="http://www.google.co.jp">menu1_0_1aaaaaaaaaaaaaaa</a></td><td>&nbsp;</td></tr>
        <tr id="menu1_0_2"><td>&nbsp;</td><td>menu1_0_2</td><td>&nbsp;</td></tr>
        <tr id="menu1_0_3"><td>&nbsp;</td><td>menu1_0_3</td><td>&nbsp;</td></tr>
    </table>
</div>
<div id="menu1_0_0_body" style="position:absolute;display:none">
    <table cellspacing="0" border="0" cellpadding="0" bgcolor="#ffeedd" width="200">
        <tr id="menu1_0_0_0"><td>メニューイチのゼロのゼロのゼロ</td></tr>
        <tr id="menu1_0_1_1"><td>menu1_0_1_1</td></tr>
        <tr id="menu1_0_1_2"><td>menu1_0_1_2</td></tr>
    </table>
</div>

こんな感じでメニューをdiv-table毎にメニューを書くと、動的なメニューとして表示されます。

制約
・trのidは"menu"で始めなければならない。
・trのidに"_body"をつけた文字列を対応させたいメニューのdivのidに割り振らなければならない。


特徴
・1画面に何個でも置ける。
・メニュー内に記述する内容については使う側が自由にできる(そりゃそうだ)
・縦置きに対応


ですが、サンプルのHTMLを見れば分かるとおりひっじょーに書くのが面倒くさいので、Tapestryで生成するようなコンポーネントを作ってみました。以下使用例。

<span jwcid="@brownie:Menu" bgcolor="#aabbcc" selectedBgcolor="#ffeedd">
    <span jwcid="@brownie:MenuItem" bgcolor="#bbccaa">
        <a href="javascript:void(0)" jwcid="@PageLink" page="Home">Home</a>
    </span>
    <span jwcid="@brownie:MenuItem" bgcolor="#ccaabb" caption="ああああああ">
        <span jwcid="@brownie:MenuItem" bgcolor="#ddbbcc">
            <a href="javascript:void(0)" jwcid="@PageLink" page="Home">Home</a>
            <span jwcid="@brownie:MenuItem" bgcolor="#ccddbb">
                <a href="javascript:void(0)" jwcid="@PageLink" page="Home">Home</a>
            </span>
            <span jwcid="@brownie:MenuItem" bgcolor="#ddeecc">
                <a href="javascript:void(0)" jwcid="@PageLink" page="SampleList1">SampleList1</a>
            </span>
            <span jwcid="@brownie:MenuItem" bgcolor="#eeffdd">
                <a href="javascript:void(0)" jwcid="@PageLink" page="ValidSample">ValidSample</a>
            </span>
            <span jwcid="@brownie:MenuItem" bgcolor="#ffffee">
                <a href="javascript:void(0)" jwcid="@PageLink" page="NumberFieldSample">NumberFieldSample</a>
            </span>
        </span>
        <span jwcid="@brownie:MenuItem" bgcolor="#eeccdd">
            <span jwcid="@brownie:MenuItem" bgcolor="#eeffdd">
                <a href="javascript:void(0)" jwcid="@PageLink" page="ValidSample">ValidSample</a>
            </span>
            <span jwcid="@brownie:MenuItem" bgcolor="#ffffee">
                <a href="javascript:void(0)" jwcid="@PageLink" page="NumberFieldSample">NumberFieldSample</a>
            </span>
        </span>
        <span jwcid="@brownie:MenuItem" bgcolor="#ffddee">
            <a href="javascript:void(0)" jwcid="@PageLink" page="ValidSample">ValidSample</a>
        </span>
    </span>
</span>

見ての通り、@brownie:MenuItemのbodyには何でも書けちゃいます。


これも次のbrownieでリリースする予定ですが、前にリリースするとか言ってて、全然できてない・・・・。忙しいのが終わったら出します。