Menu Family: Website Top Nav With Submenus From JavaScript

このExample(YUIのこのExampleページはこちら)では、先の例「Menu Family: Website Top Nav With Submenus Built From Markup」と同じ画面をスクリプトで作成する。
2つの方法で、画面の様子やその動きはまったく同じである。
(したがって、画面については、先の例を参照)

MarkUpから生成したメニューを、Scriptに書き直すという作業は、これも以前の「Menu Family: Website Left Nav With Submenus Built From Markup」のサンプルを、「Menu Family: Website Left Nav With Submenus From JavaScript」のサンプルに直すときの作業をまったく同じ方法をとっている。

以下にJavascriptを含むhtmlの全文を示す。

<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<TITLE>Ajax_Sampling</TITLE>
<style type="text/css">
body {
	margin:0;
	padding:0;
}
</style>
<!-- ヘッダー部、本文(コンテンツ部、メニュー部)、フッター部を分けるグリッド表示のCSS -->
<link rel="stylesheet" type="text/css" href="scripts/yui/reset-fonts-grids/reset-fonts-grids.css">
 
<link rel="stylesheet" type="text/css" href="scripts/yui/menu/assets/skins/sam/menu.css" />
<script type="text/javascript" src="scripts/yui/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript" src="scripts/yui/container/container_core-min.js"></script>
<script type="text/javascript" src="scripts/yui/menu/menu-min.js"></script>

<style type="text/css" id="defaultstyle">

div.yui-b p {
    margin: 0 0 .5em 0;
    color: #999;
}
            
div.yui-b p strong {
    font-weight: bold;
    color: #000;
}
            
div.yui-b p em {
    color: #000;
}            

h1 {
   font-weight: bold;
   margin: 0 0 1em 0;
   padding: .25em .5em;
   background-color: #ccc;
}

#productsandservices {
   margin: 0 0 10px 0;
}

</style>

<script type="text/javascript">
//モジュールパターンで実装する。
YAHOO.namespace("EGP");

YAHOO.EGP.ScriptMenu = function() {

	var oMenuBar;
    var aSubmenuData = [
                        {
                            id: "communication", 
                            itemdata: [ 
                                { text: "360", url: "http://360.yahoo.com" },
                                { text: "Alerts", url: "http://alerts.yahoo.com" },
                                { text: "Avatars", url: "http://avatars.yahoo.com" },
                                { text: "Groups", url: "http://groups.yahoo.com " },
                                { text: "Internet Access", url: "http://promo.yahoo.com/broadband" },
                                {
                                    text: "PIM", 
                                    submenu: { 
                                                id: "pim", 
                                                itemdata: [
                                                    { text: "Yahoo! Mail", url: "http://mail.yahoo.com" },
                                                    { text: "Yahoo! Address Book", url: "http://addressbook.yahoo.com" },
                                                    { text: "Yahoo! Calendar",  url: "http://calendar.yahoo.com" },
                                                    { text: "Yahoo! Notepad", url: "http://notepad.yahoo.com" }
                                                ] 
                                            }
                                
                                }, 
                                { text: "Member Directory", url: "http://members.yahoo.com" },
                                { text: "Messenger", url: "http://messenger.yahoo.com" },
                                { text: "Mobile", url: "http://mobile.yahoo.com" },
                                { text: "Flickr Photo Sharing", url: "http://www.flickr.com" },
                            ]
                        },

                        {
                            id: "shopping", 
                            itemdata: [
                                { text: "Auctions", url: "http://auctions.shopping.yahoo.com" },
                                { text: "Autos", url: "http://autos.yahoo.com" },
                                { text: "Classifieds", url: "http://classifieds.yahoo.com" },
                                { text: "Flowers & Gifts", url: "http://shopping.yahoo.com/b:Flowers%20%26%20Gifts:20146735" },
                                { text: "Real Estate", url: "http://realestate.yahoo.com" },
                                { text: "Travel", url: "http://travel.yahoo.com" },
                                { text: "Wallet", url: "http://wallet.yahoo.com" },
                                { text: "Yellow Pages", url: "http://yp.yahoo.com" }                    
                            ]    
                        },
                        
                        {
                            id: "entertainment", 
                            itemdata: [
                                { text: "Fantasy Sports", url: "http://fantasysports.yahoo.com" },
                                { text: "Games", url: "http://games.yahoo.com" },
                                { text: "Kids", url: "http://www.yahooligans.com" },
                                { text: "Music", url: "http://music.yahoo.com" },
                                { text: "Movies", url: "http://movies.yahoo.com" },
                                { text: "Radio", url: "http://music.yahoo.com/launchcast" },
                                { text: "Travel", url: "http://travel.yahoo.com" },
                                { text: "TV", url: "http://tv.yahoo.com" }              
                            ] 
                        },
                        
                        {
                            id: "information",
                            itemdata: [
                                { text: "Downloads", url: "http://downloads.yahoo.com" },
                                { text: "Finance", url: "http://finance.yahoo.com" },
                                { text: "Health", url: "http://health.yahoo.com" },
                                { text: "Local", url: "http://local.yahoo.com" },
                                { text: "Maps & Directions", url: "http://maps.yahoo.com" },
                                { text: "My Yahoo!", url: "http://my.yahoo.com" },
                                { text: "News", url: "http://news.yahoo.com" },
                                { text: "Search", url: "http://search.yahoo.com" },
                                { text: "Small Business", url: "http://smallbusiness.yahoo.com" },
                                { text: "Weather", url: "http://weather.yahoo.com" }
                            ]
                        }                    
                    ];
    	
	
	return{
    	init: function() {
            /*
		    Menuのインスタンス化;第1引数はMenu部を意味するDivのid.
		          第2引数はCOnfigプロパティー。
	        */
           oMenuBar = new YAHOO.widget.MenuBar("productsandservices", 
					// Menuのコンフィグのためのオブジェクトリテラル
                   { 
	                // MouseOverでsubmenuが展開される。
    	            autosubmenudisplay: true, 
                    // Menuが消えるまでの時間(msec)
                    hidedelay:  750,
                    // 表示するときまで、レンダリングを待つ。
                    lazyload: true 
                    }
           );

           oMenuBar.subscribe("beforeRender", function () {
               // ここで取れるthisは、oMenu(発火するインスタンス)
               if (this.getRoot() == this) {

                   this.getItem(0).cfg.setProperty("submenu", aSubmenuData[0]);
                   this.getItem(1).cfg.setProperty("submenu", aSubmenuData[1]);
                   this.getItem(2).cfg.setProperty("submenu", aSubmenuData[2]);
                   this.getItem(3).cfg.setProperty("submenu", aSubmenuData[3]);
               }
           });

           //renderだけで、showはいらない
           oMenuBar.render();            
   		
		}
	};
}();

//DOMが完全にloadされたら、サンプルを初期化する。
YAHOO.util.Event.onDOMReady(
	//DomReadyイベントで発火するハンドラ
	YAHOO.EGP.ScriptMenu.init,
	//ハンドラに渡すオブジェクト(関数)
	YAHOO.EGP.ScriptMenu,
	//ハンドラは、上記のオブジェクトのスコープをもつ。   
	true
);

</script>
</HEAD>
<body class="yui-skin-sam">
   <div id="doc" class="yui-t1">
      <div>
          <!-- start: your content here -->
          <p>ヘッダー:ここがヘッダーです。</p>
          <h1>Example: Website Top Nav With Submenus Built From Script (YUI Library)</h1>
          <!-- end: your content here -->
      </div>

      <div id="bd">
         <div id="yui-main">
			<!-- 1コラム目のスタート(メニューバー、とコンテンツ) -->
             <div class="yui-b">
                <!-- start: stack grids here -->
				<!-- メニュー部 -->
          		<div id="productsandservices" class="yuimenubar yuimenubarnav">
              		<div class="bd">
                 	  <ul>
                     	<li class="yuimenubaritem"><a href="#communication">Communication</a>
                     	</li>
                     	<li class="yuimenubaritem"><a href="http://shopping.yahoo.com">Shopping</a>
                     	</li>
                     	<li class="yuimenubaritem"><a href="http://entertainment.yahoo.com">Entertainment</a>
                     	</li>
                     	<li class="yuimenubaritem"><a href="#">Information</a>                      
                     	</li>
                      </ul>            
             		</div>
         		</div>
                        
				<!-- コンテンツ部 -->
                <p id="note"><strong>NOTE:</strong> <em>This example demonstrates how to add submenus to a menu bar using existing markup.</em></p>

                    <form name="example">
                       <select name="test">
                         <option value="one">One</option>
                         <option value="two">Two</option>
                         <option value="three">Three</option>                                
                       </select>
                    </form>

	     		<p>今日はいい天気だね。</p> 
				<p>散歩でも行こうかね。</p>
                <!-- end: stack grids here -->
          </div>
       </div>
                <!-- 1コラム目の終わり -->

                <!-- 2コラム目 -->
                <div class="yui-b">
                    <p>左ペインです。</p>
                </div>
                <!-- 2コラム目の終わり -->
            </div>

            <div>
                <p>フッター:ここがフッターです。</p>
            </div>
        </div>
    </body>
</HTML>