TreeView Control: TreeView with Tooltips

このExample(ページへのリンクはこちら)では、Treeを形成する各ノードにTooltipをつける。

TooltipはContainerの一種なので、まだ、サンプリングしていないが、Exampleの説明とソースコードも元にして、サンプルを書いてみる。

このExampleのページでは、以下のように書いてある。

  • テキストノード(TextNode)のそれぞれに、'title'属性をつける。この属性が、ノードのTooltipとして使われる。
  • 各ノードにラベルを配置し、ラベルIDを配列に格納する。この配列をTooltipのコンストラクタに食わせる。(YAHOO.widget.TooltipAPIドキュメントはこちら。実際にあは、APIドキュメントの下の方にある「Configuration Attrites」の「context」に、その配列を使用する)

以下がサンプルの初期画面である。YUIに掲載されているExampleの画面と殆ど変わりがない。

以下がTooltipを表示させたところである。

以下のJavscriptを含む、HTMLの全文を示す。Exampleのソースでは、通り得ないif文や実験的なコードが入っているので、その部分は修正を行った。
また、HTML内のScriptの位置の変更を行い、module patternで書き直しを行った。

<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>
<link rel="stylesheet" type="text/css" href="scripts/yui/fonts/fonts-min.css" />
<link rel="stylesheet" type="text/css" href="scripts/yui/treeview/assets/skins/sam/treeview.css" />
<link rel="stylesheet" type="text/css" href="scripts/yui/container/assets/skins/sam/container.css" />

<style type="text/css" id="defaultstyle">
#container {
	margin: 2px;
	padding: 3px;
	width: 300px;
	height: auto;
	border:1px dashed #999999;
}
#treeDiv1 { 
	background: #fff 
}
</style>

<!-- 読み込むjs --> 
<script type="text/javascript" src="scripts/yui/yahoo-dom-event/yahoo-dom-event.js" ></script> 
<script type="text/javascript" src="scripts/yui/treeview/treeview-min.js" ></script>
<script type="text/javascript" src="scripts/yui/container/container-min.js"></script>
<script type="text/javascript">
//
//モジュールパターンで、サンプルのソースを書き直した。
//
YAHOO.namespace("EGP");

YAHOO.EGP.TtTree = function() {
	var tree;
	var tt, contextElements = [];

    function buildRandomTextNodeTree() {
    	
        tree = new YAHOO.widget.TreeView("treeDiv1");

        // 0から7個のトップレベルノードを作る
        for (var i = 0; i < Math.floor((Math.random()*4) + 3); i++) {
            var o = {
				// labelを設定。Tooltipはこのラベルidをキーにtitleを使う。
            	label: "label-" + i,
                // Tooltipは、(自動的に)titleを使う。
                title: "This is " + "label-" + i
            };
            // ノード生成
            var tmpNode = new YAHOO.widget.TextNode(o, tree.getRoot(), false);

            // node.renderHidden = true(defaultはfalse)
            // とすると、レンダリングが始めてノードを展開するまで行われない。
            // (画面の初速を早くするためのフラグ)
            // YUIのサンプルでは、trueにしてあるが、コメントアウト。 
            // tmpNode.renderHidden = true;

            // TooltipのためにラベルIDを保管。
            contextElements.push(tmpNode.labelElId);

        	// 10個の子ノードを作る。
            buildLargeBranch(tmpNode);
        }

        // レンダリング
        tree.draw();
    }

	// 10個の子ノードを作る。
    function buildLargeBranch(node) {
        //if (node.depth < 10) { このプログラムではありえないので、コメントアウト
            for ( var i = 0; i < 10; i++ ) {
                var o = {
       		    // labelを設定。Tooltipはこのラベルidをキーにtitleを使う。
                    label: node.label + "-" + i,
                    // Tooltipは、(自動的に)titleを使う。
                    title: "This is " + node.label + "-" + i
                };
                // ノード生成
                var tmpNode = new YAHOO.widget.TextNode(o, node, false);
                // TooltipのためにラベルIDを保管。
                contextElements.push(tmpNode.labelElId);
            }
        //}
    }

    return{
    	init: function() {
		// Treeを作りながら、Tooltip用のデータcontextElementsを作る。
		buildRandomTextNodeTree();
	        // ツールチップの生成
	        tt = new YAHOO.widget.Tooltip("tt", 
	    	        { 
		            // 引数contextは、ツールチップの要素。
		            // contextElementsには、nodeのラベルidが入っている。
	                    context: contextElements 
	            	}
            );
    	}
    };
}();

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

<!-- class=" yui-skin-sam"の指定が必要 -->
<BODY class=" yui-skin-sam">
<div id="container">
<p>
ツールチップ付のテキストノードのサンプルです。
</p>
<div id="treeDiv1"></div>
</div>
</BODY>
</HTML>