src/cm/media/js/lib/yui/yui3-3.15.0/build/node-menunav/node-menunav.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 602 e16a97fb364a
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
602
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     1
YUI.add('node-menunav', function (Y, NAME) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     2
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     3
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     4
* <p>The MenuNav Node Plugin makes it easy to transform existing list-based
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
* markup into traditional, drop down navigational menus that are both accessible
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
* and easy to customize, and only require a small set of dependencies.</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
*
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
*
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
* <p>To use the MenuNav Node Plugin, simply pass a reference to the plugin to a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
* Node instance's <code>plug</code> method.</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
*
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
* <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
* <code>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
* &#60;script type="text/javascript"&#62; <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
* <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
* 		//	Call the "use" method, passing in "node-menunav".  This will <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
* 		//	load the script and CSS for the MenuNav Node Plugin and all of <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
* 		//	the required dependencies. <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
* <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
* 		YUI().use("node-menunav", function(Y) { <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
* <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
* 			//	Use the "contentready" event to initialize the menu when <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
* 			//	the subtree of element representing the root menu <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
* 			//	(&#60;div id="menu-1"&#62;) is ready to be scripted. <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
* <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
* 			Y.on("contentready", function () { <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
* <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
* 				//	The scope of the callback will be a Node instance <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
* 				//	representing the root menu (&#60;div id="menu-1"&#62;). <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
* 				//	Therefore, since "this" represents a Node instance, it <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
* 				//	is possible to just call "this.plug" passing in a <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
*				//	reference to the MenuNav Node Plugin. <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
* <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
* 				this.plug(Y.Plugin.NodeMenuNav); <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
* <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
* 			}, "#menu-1"); <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
* <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
* 		}); <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
* <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
* 	&#60;/script&#62; <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
* </code>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
* </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
*
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
* <p>The MenuNav Node Plugin has several configuration properties that can be
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
* set via an object literal that is passed as a second argument to a Node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
* instance's <code>plug</code> method.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
* </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
*
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
* <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
* <code>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
* &#60;script type="text/javascript"&#62; <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
* <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
* 		//	Call the "use" method, passing in "node-menunav".  This will <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
* 		//	load the script and CSS for the MenuNav Node Plugin and all of <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
* 		//	the required dependencies. <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
* <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
* 		YUI().use("node-menunav", function(Y) { <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
* <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
* 			//	Use the "contentready" event to initialize the menu when <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
* 			//	the subtree of element representing the root menu <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
* 			//	(&#60;div id="menu-1"&#62;) is ready to be scripted. <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
* <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
* 			Y.on("contentready", function () { <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
* <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
* 				//	The scope of the callback will be a Node instance <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
* 				//	representing the root menu (&#60;div id="menu-1"&#62;). <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
* 				//	Therefore, since "this" represents a Node instance, it <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
* 				//	is possible to just call "this.plug" passing in a <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
*				//	reference to the MenuNav Node Plugin. <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
* <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
* 				this.plug(Y.Plugin.NodeMenuNav, { mouseOutHideDelay: 1000 });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
* <br><br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
* 			}, "#menu-1"); <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
* <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
* 		}); <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
* <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
* 	&#60;/script&#62; <br>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
* </code>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
* </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
*
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
DEPRECATED. The MenuNav Node Plugin has been deprecated as of YUI 3.9.0. This module will be removed from the library in a future version. If you require functionality similar to the one provided by this module, consider taking a look at the various modules in the YUI Gallery <http://yuilibrary.com/gallery/>.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
@module node-menunav
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
@deprecated 3.9.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
	//	Util shortcuts
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
var UA = Y.UA,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
	later = Y.later,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
	getClassName = Y.ClassNameManager.getClassName,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
	//	Frequently used strings
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
	MENU = "menu",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
	MENUITEM = "menuitem",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
	HIDDEN = "hidden",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
	PARENT_NODE = "parentNode",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
	CHILDREN = "children",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
	OFFSET_HEIGHT = "offsetHeight",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
	OFFSET_WIDTH = "offsetWidth",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
	PX = "px",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
	ID = "id",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
	PERIOD = ".",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
	HANDLED_MOUSEOUT = "handledMouseOut",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
	HANDLED_MOUSEOVER = "handledMouseOver",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   110
	ACTIVE = "active",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   111
	LABEL = "label",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   112
	LOWERCASE_A = "a",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
	MOUSEDOWN = "mousedown",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   114
	KEYDOWN = "keydown",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   115
	CLICK = "click",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   116
	EMPTY_STRING = "",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
	FIRST_OF_TYPE = "first-of-type",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
	ROLE = "role",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
	PRESENTATION = "presentation",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
	DESCENDANTS = "descendants",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
	UI = "UI",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
	ACTIVE_DESCENDANT = "activeDescendant",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
	USE_ARIA = "useARIA",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
	ARIA_HIDDEN = "aria-hidden",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
	CONTENT = "content",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
	HOST = "host",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
	ACTIVE_DESCENDANT_CHANGE = ACTIVE_DESCENDANT + "Change",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   128
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   129
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   130
	//	Attribute keys
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   131
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   132
	AUTO_SUBMENU_DISPLAY = "autoSubmenuDisplay",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   133
	MOUSEOUT_HIDE_DELAY = "mouseOutHideDelay",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   134
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   135
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   136
	//	CSS class names
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   137
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   138
	CSS_MENU = getClassName(MENU),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   139
	CSS_MENU_HIDDEN = getClassName(MENU, HIDDEN),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   140
	CSS_MENU_HORIZONTAL = getClassName(MENU, "horizontal"),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   141
	CSS_MENU_LABEL = getClassName(MENU, LABEL),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   142
	CSS_MENU_LABEL_ACTIVE = getClassName(MENU, LABEL, ACTIVE),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   143
	CSS_MENU_LABEL_MENUVISIBLE = getClassName(MENU, LABEL, (MENU + "visible")),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   144
	CSS_MENUITEM = getClassName(MENUITEM),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   145
	CSS_MENUITEM_ACTIVE = getClassName(MENUITEM, ACTIVE),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   146
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   147
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   148
	//	CSS selectors
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   149
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   150
	MENU_SELECTOR = PERIOD + CSS_MENU,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   151
	MENU_TOGGLE_SELECTOR = (PERIOD + getClassName(MENU, "toggle")),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   152
    MENU_CONTENT_SELECTOR = PERIOD + getClassName(MENU, CONTENT),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   153
    MENU_LABEL_SELECTOR = PERIOD + CSS_MENU_LABEL,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   154
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   155
	STANDARD_QUERY = ">" + MENU_CONTENT_SELECTOR + ">ul>li>a",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   156
	EXTENDED_QUERY = ">" + MENU_CONTENT_SELECTOR + ">ul>li>" + MENU_LABEL_SELECTOR + ">a:first-child";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   157
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   158
//	Utility functions
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   159
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   160
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   161
var getPreviousSibling = function (node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   162
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   163
	var oPrevious = node.previous(),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   164
		oChildren;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   165
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   166
	if (!oPrevious) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   167
		oChildren = node.get(PARENT_NODE).get(CHILDREN);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   168
		oPrevious = oChildren.item(oChildren.size() - 1);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   169
	}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   170
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   171
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   172
	return oPrevious;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   173
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   174
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   175
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   176
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   177
var getNextSibling = function (node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   178
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   179
	var oNext = node.next();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   180
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   181
	if (!oNext) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   182
		oNext = node.get(PARENT_NODE).get(CHILDREN).item(0);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   183
	}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   184
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   185
	return oNext;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   186
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   187
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   188
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   189
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   190
var isAnchor = function (node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   191
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   192
	var bReturnVal = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   193
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   194
	if (node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   195
		bReturnVal = node.get("nodeName").toLowerCase() === LOWERCASE_A;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   196
	}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   197
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   198
	return bReturnVal;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   199
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   200
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   201
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   202
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   203
var isMenuItem = function (node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   204
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   205
	return node.hasClass(CSS_MENUITEM);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   206
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   207
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   208
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   209
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   210
var isMenuLabel = function (node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   211
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   212
	return node.hasClass(CSS_MENU_LABEL);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   213
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   214
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   215
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   216
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   217
var isHorizontalMenu = function (menu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   218
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   219
	return menu.hasClass(CSS_MENU_HORIZONTAL);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   220
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   221
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   222
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   223
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   224
var hasVisibleSubmenu = function (menuLabel) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   225
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   226
	return menuLabel.hasClass(CSS_MENU_LABEL_MENUVISIBLE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   227
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   228
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   229
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   230
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   231
var getItemAnchor = function (node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   232
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   233
	return isAnchor(node) ? node : node.one(LOWERCASE_A);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   234
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   235
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   236
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   237
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   238
var getNodeWithClass = function (node, className, searchAncestors) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   239
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   240
	var oItem;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   241
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   242
	if (node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   243
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   244
		if (node.hasClass(className)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   245
			oItem = node;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   246
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   247
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   248
		if (!oItem && searchAncestors) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   249
			oItem = node.ancestor((PERIOD + className));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   250
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   251
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   252
	}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   253
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   254
	return oItem;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   255
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   256
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   257
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   258
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   259
var getParentMenu = function (node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   260
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   261
	return node.ancestor(MENU_SELECTOR);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   262
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   263
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   264
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   265
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   266
var getMenu = function (node, searchAncestors) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   267
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   268
	return getNodeWithClass(node, CSS_MENU, searchAncestors);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   269
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   270
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   271
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   272
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   273
var getMenuItem = function (node, searchAncestors) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   274
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   275
	var oItem;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   276
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   277
	if (node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   278
		oItem = getNodeWithClass(node, CSS_MENUITEM, searchAncestors);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   279
	}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   280
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   281
	return oItem;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   282
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   283
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   284
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   285
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   286
var getMenuLabel = function (node, searchAncestors) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   287
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   288
	var oItem;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   289
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   290
	if (node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   291
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   292
		if (searchAncestors) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   293
			oItem = getNodeWithClass(node, CSS_MENU_LABEL, searchAncestors);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   294
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   295
		else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   296
			oItem = getNodeWithClass(node, CSS_MENU_LABEL) ||
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   297
				node.one((PERIOD + CSS_MENU_LABEL));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   298
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   299
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   300
	}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   301
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   302
	return oItem;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   303
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   304
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   305
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   306
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   307
var getItem = function (node, searchAncestors) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   308
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   309
	var oItem;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   310
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   311
	if (node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   312
		oItem = getMenuItem(node, searchAncestors) ||
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   313
			getMenuLabel(node, searchAncestors);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   314
	}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   315
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   316
	return oItem;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   317
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   318
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   319
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   320
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   321
var getFirstItem = function (menu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   322
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   323
	return getItem(menu.one("li"));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   324
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   325
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   326
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   327
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   328
var getActiveClass = function (node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   329
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   330
	return isMenuItem(node) ? CSS_MENUITEM_ACTIVE : CSS_MENU_LABEL_ACTIVE;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   331
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   332
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   333
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   334
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   335
var handleMouseOverForNode = function (node, target) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   336
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   337
	return node && !node[HANDLED_MOUSEOVER] &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   338
		(node.compareTo(target) || node.contains(target));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   339
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   340
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   341
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   342
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   343
var handleMouseOutForNode = function (node, relatedTarget) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   344
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   345
	return node && !node[HANDLED_MOUSEOUT] &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   346
		(!node.compareTo(relatedTarget) && !node.contains(relatedTarget));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   347
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   348
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   349
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   350
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   351
* The NodeMenuNav class is a plugin for a Node instance.  The class is used via
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   352
* the <a href="Node.html#method_plug"><code>plug</code></a> method of Node and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   353
* should not be instantiated directly.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   354
* @namespace plugin
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   355
* @class NodeMenuNav
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   356
*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   357
var NodeMenuNav = function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   358
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   359
	NodeMenuNav.superclass.constructor.apply(this, arguments);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   360
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   361
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   362
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   363
NodeMenuNav.NAME = "nodeMenuNav";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   364
NodeMenuNav.NS = "menuNav";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   365
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   366
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   367
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   368
* @property SHIM_TEMPLATE_TITLE
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   369
* @description String representing the value for the <code>title</code>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   370
* attribute for the shim used to prevent <code>&#60;select&#62;</code> elements
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   371
* from poking through menus in IE 6.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   372
* @default "Menu Stacking Shim"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   373
* @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   374
*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   375
NodeMenuNav.SHIM_TEMPLATE_TITLE = "Menu Stacking Shim";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   376
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   377
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   378
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   379
* @property SHIM_TEMPLATE
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   380
* @description String representing the HTML used to create the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   381
* <code>&#60;iframe&#62;</code> shim used to prevent
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   382
* <code>&#60;select&#62;</code> elements from poking through menus in IE 6.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   383
* @default &#34;&#60;iframe frameborder=&#34;0&#34; tabindex=&#34;-1&#34;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   384
* class=&#34;yui-shim&#34; title=&#34;Menu Stacking Shim&#34;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   385
* src=&#34;javascript:false;&#34;&#62;&#60;/iframe&#62;&#34;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   386
* @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   387
*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   388
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   389
//	<iframe> shim notes:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   390
//
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   391
//	1) Need to set the "frameBorder" property to 0 to suppress the default
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   392
//	<iframe> border in IE.  (Setting the CSS "border" property alone doesn't
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   393
//	suppress it.)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   394
//
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   395
//	2) The "src" attribute of the <iframe> is set to "javascript:false;" so
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   396
//	that it won't load a page inside it, preventing the secure/nonsecure
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   397
//	warning in IE when using HTTPS.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   398
//
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   399
//	3) Since the role of the <iframe> shim is completely presentational, its
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   400
//	"tabindex" attribute is set to "-1" and its title attribute is set to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   401
//	"Menu Stacking Shim".  Both strategies help users of screen readers to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   402
//	avoid mistakenly interacting with the <iframe> shim.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   403
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   404
NodeMenuNav.SHIM_TEMPLATE = '<iframe frameborder="0" tabindex="-1" class="' +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   405
							getClassName("shim") +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   406
							'" title="' + NodeMenuNav.SHIM_TEMPLATE_TITLE +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   407
							'" src="javascript:false;"></iframe>';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   408
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   409
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   410
NodeMenuNav.ATTRS = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   411
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   412
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   413
	* Boolean indicating if use of the WAI-ARIA Roles and States should be
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   414
	* enabled for the menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   415
	*
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   416
	* @attribute useARIA
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   417
	* @readOnly
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   418
	* @writeOnce
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   419
	* @default true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   420
	* @type boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   421
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   422
	useARIA: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   423
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   424
		value: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   425
		writeOnce: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   426
		lazyAdd: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   427
		setter: function (value) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   428
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   429
			var oMenu = this.get(HOST),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   430
				oMenuLabel,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   431
				oMenuToggle,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   432
				oSubmenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   433
				sID;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   434
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   435
			if (value) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   436
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   437
				oMenu.set(ROLE, MENU);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   438
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   439
				oMenu.all("ul,li," + MENU_CONTENT_SELECTOR).set(ROLE, PRESENTATION);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   440
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   441
				oMenu.all((PERIOD + getClassName(MENUITEM, CONTENT))).set(ROLE, MENUITEM);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   442
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   443
				oMenu.all((PERIOD + CSS_MENU_LABEL)).each(function (node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   444
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   445
					oMenuLabel = node;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   446
					oMenuToggle = node.one(MENU_TOGGLE_SELECTOR);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   447
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   448
					if (oMenuToggle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   449
						oMenuToggle.set(ROLE, PRESENTATION);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   450
						oMenuLabel = oMenuToggle.previous();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   451
					}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   452
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   453
					oMenuLabel.set(ROLE, MENUITEM);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   454
					oMenuLabel.set("aria-haspopup", true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   455
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   456
					oSubmenu = node.next();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   457
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   458
					if (oSubmenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   459
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   460
						oSubmenu.set(ROLE, MENU);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   461
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   462
						oMenuLabel = oSubmenu.previous();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   463
						oMenuToggle = oMenuLabel.one(MENU_TOGGLE_SELECTOR);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   464
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   465
						if (oMenuToggle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   466
							oMenuLabel = oMenuToggle;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   467
						}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   468
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   469
						sID = Y.stamp(oMenuLabel);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   470
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   471
						if (!oMenuLabel.get(ID)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   472
							oMenuLabel.set(ID, sID);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   473
						}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   474
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   475
						oSubmenu.set("aria-labelledby", sID);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   476
						oSubmenu.set(ARIA_HIDDEN, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   477
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   478
					}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   479
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   480
				});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   481
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   482
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   483
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   484
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   485
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   486
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   487
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   488
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   489
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   490
	* Boolean indicating if submenus are automatically made visible when the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   491
	* user mouses over the menu's items.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   492
	*
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   493
	* @attribute autoSubmenuDisplay
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   494
	* @readOnly
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   495
	* @writeOnce
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   496
	* @default true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   497
	* @type boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   498
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   499
	autoSubmenuDisplay: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   500
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   501
		value: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   502
		writeOnce: true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   503
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   504
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   505
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   506
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   507
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   508
	* Number indicating the time (in milliseconds) that should expire before a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   509
	* submenu is made visible when the user mouses over the menu's label.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   510
	*
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   511
	* @attribute submenuShowDelay
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   512
	* @readOnly
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   513
	* @writeOnce
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   514
	* @default 250
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   515
	* @type Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   516
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   517
	submenuShowDelay: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   518
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   519
		value: 250,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   520
		writeOnce: true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   521
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   522
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   523
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   524
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   525
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   526
	* Number indicating the time (in milliseconds) that should expire before a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   527
	* submenu is hidden when the user mouses out of a menu label heading in the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   528
	* direction of a submenu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   529
	*
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   530
	* @attribute submenuHideDelay
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   531
	* @readOnly
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   532
	* @writeOnce
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   533
	* @default 250
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   534
	* @type Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   535
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   536
	submenuHideDelay: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   537
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   538
		value: 250,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   539
		writeOnce: true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   540
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   541
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   542
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   543
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   544
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   545
	* Number indicating the time (in milliseconds) that should expire before a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   546
	* submenu is hidden when the user mouses out of it.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   547
	*
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   548
	* @attribute mouseOutHideDelay
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   549
	* @readOnly
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   550
	* @writeOnce
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   551
	* @default 750
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   552
	* @type Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   553
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   554
	mouseOutHideDelay: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   555
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   556
		value: 750,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   557
		writeOnce: true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   558
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   559
	}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   560
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   561
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   562
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   563
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   564
Y.extend(NodeMenuNav, Y.Plugin.Base, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   565
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   566
	//	Protected properties
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   567
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   568
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   569
	* @property _rootMenu
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   570
	* @description Node instance representing the root menu in the menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   571
	* @default null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   572
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   573
	* @type Node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   574
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   575
	_rootMenu: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   576
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   577
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   578
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   579
	* @property _activeItem
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   580
	* @description Node instance representing the menu's active descendent:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   581
	* the menuitem or menu label the user is currently interacting with.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   582
	* @default null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   583
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   584
	* @type Node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   585
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   586
	_activeItem: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   587
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   588
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   589
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   590
	* @property _activeMenu
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   591
	* @description Node instance representing the menu that is the parent of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   592
	* the menu's active descendent.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   593
	* @default null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   594
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   595
	* @type Node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   596
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   597
	_activeMenu: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   598
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   599
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   600
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   601
	* @property _hasFocus
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   602
	* @description Boolean indicating if the menu has focus.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   603
	* @default false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   604
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   605
	* @type Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   606
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   607
	_hasFocus: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   608
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   609
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   610
	//	In gecko-based browsers a mouseover and mouseout event will fire even
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   611
	//	if a DOM element moves out from under the mouse without the user
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   612
	//	actually moving the mouse.  This bug affects NodeMenuNav because the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   613
	//	user can hit the Esc key to hide a menu, and if the mouse is over the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   614
	//	menu when the user presses Esc, the _onMenuMouseOut handler will be
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   615
	//	called.  To fix this bug the following flag (_blockMouseEvent) is used
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   616
	// to block the code in the _onMenuMouseOut handler from executing.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   617
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   618
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   619
	* @property _blockMouseEvent
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   620
	* @description Boolean indicating whether or not to handle the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   621
	* "mouseover" event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   622
	* @default false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   623
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   624
	* @type Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   625
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   626
	_blockMouseEvent: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   627
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   628
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   629
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   630
	* @property _currentMouseX
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   631
	* @description Number representing the current x coordinate of the mouse
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   632
	* inside the menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   633
	* @default 0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   634
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   635
	* @type Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   636
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   637
	_currentMouseX: 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   638
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   639
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   640
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   641
	* @property _movingToSubmenu
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   642
	* @description Boolean indicating if the mouse is moving from a menu
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   643
	* label to its corresponding submenu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   644
	* @default false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   645
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   646
	* @type Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   647
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   648
	_movingToSubmenu: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   649
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   650
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   651
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   652
	* @property _showSubmenuTimer
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   653
	* @description Timer used to show a submenu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   654
	* @default null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   655
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   656
	* @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   657
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   658
	_showSubmenuTimer: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   659
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   660
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   661
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   662
	* @property _hideSubmenuTimer
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   663
	* @description Timer used to hide a submenu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   664
	* @default null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   665
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   666
	* @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   667
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   668
	_hideSubmenuTimer: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   669
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   670
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   671
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   672
	* @property _hideAllSubmenusTimer
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   673
	* @description Timer used to hide a all submenus.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   674
	* @default null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   675
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   676
	* @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   677
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   678
	_hideAllSubmenusTimer: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   679
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   680
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   681
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   682
	* @property _firstItem
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   683
	* @description Node instance representing the first item (menuitem or menu
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   684
	* label) in the root menu of a menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   685
	* @default null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   686
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   687
	* @type Node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   688
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   689
	_firstItem: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   690
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   691
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   692
	//	Public methods
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   693
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   694
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   695
    initializer: function (config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   696
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   697
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   698
			oRootMenu = this.get(HOST),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   699
			aHandlers = [],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   700
			oDoc;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   701
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   702
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   703
		if (oRootMenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   704
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   705
			menuNav._rootMenu = oRootMenu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   706
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   707
			oRootMenu.all("ul:first-child").addClass(FIRST_OF_TYPE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   708
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   709
			//	Hide all visible submenus
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   710
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   711
			oRootMenu.all(MENU_SELECTOR).addClass(CSS_MENU_HIDDEN);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   712
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   713
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   714
			//	Wire up all event handlers
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   715
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   716
			aHandlers.push(oRootMenu.on("mouseover", menuNav._onMouseOver, menuNav));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   717
			aHandlers.push(oRootMenu.on("mouseout", menuNav._onMouseOut, menuNav));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   718
			aHandlers.push(oRootMenu.on("mousemove", menuNav._onMouseMove, menuNav));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   719
			aHandlers.push(oRootMenu.on(MOUSEDOWN, menuNav._toggleSubmenuDisplay, menuNav));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   720
			aHandlers.push(Y.on("key", menuNav._toggleSubmenuDisplay, oRootMenu, "down:13", menuNav));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   721
			aHandlers.push(oRootMenu.on(CLICK, menuNav._toggleSubmenuDisplay, menuNav));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   722
			aHandlers.push(oRootMenu.on("keypress", menuNav._onKeyPress, menuNav));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   723
			aHandlers.push(oRootMenu.on(KEYDOWN, menuNav._onKeyDown, menuNav));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   724
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   725
			oDoc = oRootMenu.get("ownerDocument");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   726
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   727
		    aHandlers.push(oDoc.on(MOUSEDOWN, menuNav._onDocMouseDown, menuNav));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   728
			aHandlers.push(oDoc.on("focus", menuNav._onDocFocus, menuNav));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   729
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   730
			this._eventHandlers = aHandlers;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   731
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   732
			menuNav._initFocusManager();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   733
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   734
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   735
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   736
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   737
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   738
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   739
	destructor: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   740
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   741
		var aHandlers = this._eventHandlers;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   742
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   743
		if (aHandlers) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   744
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   745
			Y.Array.each(aHandlers, function (handle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   746
				handle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   747
			});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   748
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   749
			this._eventHandlers = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   750
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   751
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   752
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   753
		this.get(HOST).unplug("focusManager");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   754
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   755
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   756
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   757
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   758
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   759
	//	Protected methods
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   760
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   761
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   762
	* @method _isRoot
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   763
	* @description Returns a boolean indicating if the specified menu is the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   764
	* root menu in the menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   765
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   766
	* @param {Node} menu Node instance representing a menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   767
	* @return {Boolean} Boolean indicating if the specified menu is the root
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   768
	* menu in the menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   769
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   770
	_isRoot: function (menu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   771
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   772
		return this._rootMenu.compareTo(menu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   773
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   774
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   775
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   776
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   777
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   778
	* @method _getTopmostSubmenu
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   779
	* @description Returns the topmost submenu of a submenu hierarchy.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   780
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   781
	* @param {Node} menu Node instance representing a menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   782
	* @return {Node} Node instance representing a menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   783
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   784
	_getTopmostSubmenu: function (menu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   785
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   786
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   787
			oMenu = getParentMenu(menu),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   788
			returnVal;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   789
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   790
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   791
		if (!oMenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   792
			returnVal = menu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   793
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   794
		else if (menuNav._isRoot(oMenu)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   795
			returnVal = menu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   796
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   797
		else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   798
			returnVal = menuNav._getTopmostSubmenu(oMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   799
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   800
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   801
		return returnVal;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   802
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   803
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   804
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   805
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   806
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   807
	* @method _clearActiveItem
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   808
	* @description Clears the menu's active descendent.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   809
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   810
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   811
	_clearActiveItem: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   812
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   813
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   814
			oActiveItem = menuNav._activeItem;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   815
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   816
		if (oActiveItem) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   817
			oActiveItem.removeClass(getActiveClass(oActiveItem));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   818
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   819
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   820
		menuNav._activeItem = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   821
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   822
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   823
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   824
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   825
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   826
	* @method _setActiveItem
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   827
	* @description Sets the specified menuitem or menu label as the menu's
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   828
	* active descendent.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   829
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   830
	* @param {Node} item Node instance representing a menuitem or menu label.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   831
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   832
	_setActiveItem: function (item) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   833
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   834
		var menuNav = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   835
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   836
		if (item) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   837
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   838
			menuNav._clearActiveItem();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   839
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   840
			item.addClass(getActiveClass(item));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   841
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   842
			menuNav._activeItem = item;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   843
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   844
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   845
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   846
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   847
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   848
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   849
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   850
	* @method _focusItem
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   851
	* @description Focuses the specified menuitem or menu label.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   852
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   853
	* @param {Node} item Node instance representing a menuitem or menu label.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   854
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   855
	_focusItem: function (item) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   856
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   857
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   858
			oMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   859
			oItem;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   860
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   861
		if (item && menuNav._hasFocus) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   862
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   863
			oMenu = getParentMenu(item);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   864
			oItem = getItemAnchor(item);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   865
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   866
			if (oMenu && !oMenu.compareTo(menuNav._activeMenu)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   867
				menuNav._activeMenu = oMenu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   868
				menuNav._initFocusManager();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   869
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   870
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   871
			menuNav._focusManager.focus(oItem);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   872
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   873
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   874
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   875
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   876
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   877
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   878
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   879
	* @method _showMenu
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   880
	* @description Shows the specified menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   881
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   882
	* @param {Node} menu Node instance representing a menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   883
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   884
	_showMenu: function (menu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   885
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   886
		var oParentMenu = getParentMenu(menu),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   887
			oLI = menu.get(PARENT_NODE),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   888
			aXY = oLI.getXY();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   889
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   890
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   891
		if (this.get(USE_ARIA)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   892
			menu.set(ARIA_HIDDEN, false);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   893
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   894
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   895
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   896
		if (isHorizontalMenu(oParentMenu)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   897
			aXY[1] = aXY[1] + oLI.get(OFFSET_HEIGHT);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   898
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   899
		else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   900
			aXY[0] = aXY[0] + oLI.get(OFFSET_WIDTH);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   901
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   902
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   903
		menu.setXY(aXY);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   904
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   905
		if (UA.ie < 8) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   906
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   907
			if (UA.ie === 6 && !menu.hasIFrameShim) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   908
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   909
				menu.appendChild(Y.Node.create(NodeMenuNav.SHIM_TEMPLATE));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   910
				menu.hasIFrameShim = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   911
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   912
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   913
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   914
			//	Clear previous values for height and width
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   915
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   916
			menu.setStyles({ height: EMPTY_STRING, width: EMPTY_STRING });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   917
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   918
			//	Set the width and height of the menu's bounding box - this is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   919
			//	necessary for IE 6 so that the CSS for the <iframe> shim can
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   920
			//	simply set the <iframe>'s width and height to 100% to ensure
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   921
			//	that dimensions of an <iframe> shim are always sync'd to the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   922
			//	that of its parent menu.  Specifying a width and height also
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   923
			//	helps when positioning decorator elements (for creating effects
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   924
			//	like rounded corners) inside a menu's bounding box in IE 7.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   925
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   926
			menu.setStyles({
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   927
				height: (menu.get(OFFSET_HEIGHT) + PX),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   928
				width: (menu.get(OFFSET_WIDTH) + PX) });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   929
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   930
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   931
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   932
		menu.previous().addClass(CSS_MENU_LABEL_MENUVISIBLE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   933
		menu.removeClass(CSS_MENU_HIDDEN);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   934
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   935
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   936
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   937
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   938
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   939
	* @method _hideMenu
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   940
	* @description Hides the specified menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   941
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   942
	* @param {Node} menu Node instance representing a menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   943
	* @param {Boolean} activateAndFocusLabel Boolean indicating if the label
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   944
	* for the specified
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   945
	* menu should be focused and set as active.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   946
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   947
	_hideMenu: function (menu, activateAndFocusLabel) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   948
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   949
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   950
			oLabel = menu.previous(),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   951
			oActiveItem;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   952
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   953
		oLabel.removeClass(CSS_MENU_LABEL_MENUVISIBLE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   954
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   955
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   956
		if (activateAndFocusLabel) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   957
			menuNav._focusItem(oLabel);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   958
			menuNav._setActiveItem(oLabel);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   959
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   960
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   961
		oActiveItem = menu.one((PERIOD + CSS_MENUITEM_ACTIVE));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   962
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   963
		if (oActiveItem) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   964
			oActiveItem.removeClass(CSS_MENUITEM_ACTIVE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   965
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   966
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   967
		//	Clear the values for top and left that were set by the call to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   968
		//	"setXY" when the menu was shown so that the hidden position
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   969
		//	specified in the core CSS file will take affect.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   970
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   971
		menu.setStyles({ left: EMPTY_STRING, top: EMPTY_STRING });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   972
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   973
		menu.addClass(CSS_MENU_HIDDEN);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   974
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   975
		if (menuNav.get(USE_ARIA)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   976
			menu.set(ARIA_HIDDEN, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   977
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   978
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   979
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   980
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   981
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   982
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   983
	* @method _hideAllSubmenus
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   984
	* @description Hides all submenus of the specified menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   985
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   986
	* @param {Node} menu Node instance representing a menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   987
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   988
	_hideAllSubmenus: function (menu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   989
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   990
		var menuNav = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   991
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   992
		menu.all(MENU_SELECTOR).each(Y.bind(function (submenuNode) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   993
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   994
			menuNav._hideMenu(submenuNode);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   995
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   996
		}, menuNav));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   997
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   998
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   999
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1000
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1001
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1002
	* @method _cancelShowSubmenuTimer
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1003
	* @description Cancels the timer used to show a submenu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1004
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1005
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1006
	_cancelShowSubmenuTimer: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1007
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1008
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1009
			oShowSubmenuTimer = menuNav._showSubmenuTimer;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1010
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1011
		if (oShowSubmenuTimer) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1012
			oShowSubmenuTimer.cancel();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1013
			menuNav._showSubmenuTimer = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1014
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1015
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1016
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1017
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1018
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1019
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1020
	* @method _cancelHideSubmenuTimer
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1021
	* @description Cancels the timer used to hide a submenu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1022
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1023
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1024
	_cancelHideSubmenuTimer: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1025
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1026
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1027
			oHideSubmenuTimer = menuNav._hideSubmenuTimer;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1028
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1029
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1030
		if (oHideSubmenuTimer) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1031
			oHideSubmenuTimer.cancel();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1032
			menuNav._hideSubmenuTimer = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1033
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1034
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1035
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1036
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1037
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1038
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1039
	* @method _initFocusManager
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1040
	* @description Initializes and updates the Focus Manager so that is is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1041
	* always managing descendants of the active menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1042
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1043
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1044
	_initFocusManager: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1045
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1046
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1047
			oRootMenu = menuNav._rootMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1048
			oMenu = menuNav._activeMenu || oRootMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1049
			sSelectorBase =
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1050
				menuNav._isRoot(oMenu) ? EMPTY_STRING : ("#" + oMenu.get("id")),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1051
			oFocusManager = menuNav._focusManager,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1052
			sKeysVal,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1053
			sDescendantSelector,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1054
			sQuery;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1055
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1056
		if (isHorizontalMenu(oMenu)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1057
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1058
			sDescendantSelector = sSelectorBase + STANDARD_QUERY + "," +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1059
				sSelectorBase + EXTENDED_QUERY;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1060
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1061
			sKeysVal = { next: "down:39", previous: "down:37" };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1062
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1063
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1064
		else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1065
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1066
			sDescendantSelector = sSelectorBase + STANDARD_QUERY;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1067
			sKeysVal = { next: "down:40", previous: "down:38" };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1068
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1069
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1070
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1071
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1072
		if (!oFocusManager) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1073
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1074
			oRootMenu.plug(Y.Plugin.NodeFocusManager, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1075
				descendants: sDescendantSelector,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1076
				keys: sKeysVal,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1077
				circular: true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1078
			});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1079
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1080
			oFocusManager = oRootMenu.focusManager;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1081
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1082
			sQuery = "#" + oRootMenu.get("id") + MENU_SELECTOR + " a," +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1083
							MENU_TOGGLE_SELECTOR;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1084
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1085
			oRootMenu.all(sQuery).set("tabIndex", -1);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1086
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1087
			oFocusManager.on(ACTIVE_DESCENDANT_CHANGE,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1088
				this._onActiveDescendantChange, oFocusManager, this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1089
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1090
			oFocusManager.after(ACTIVE_DESCENDANT_CHANGE,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1091
				this._afterActiveDescendantChange, oFocusManager, this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1092
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1093
			menuNav._focusManager = oFocusManager;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1094
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1095
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1096
		else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1097
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1098
			oFocusManager.set(ACTIVE_DESCENDANT, -1);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1099
			oFocusManager.set(DESCENDANTS, sDescendantSelector);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1100
			oFocusManager.set("keys", sKeysVal);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1101
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1102
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1103
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1104
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1105
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1106
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1107
	//	Event handlers for discrete pieces of pieces of the menu
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1108
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1109
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1110
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1111
	* @method _onActiveDescendantChange
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1112
	* @description "activeDescendantChange" event handler for menu's
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1113
	* Focus Manager.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1114
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1115
	* @param {Object} event Object representing the Attribute change event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1116
	* @param {NodeMenuNav} menuNav Object representing the NodeMenuNav instance.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1117
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1118
	_onActiveDescendantChange: function (event, menuNav) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1119
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1120
		if (event.src === UI && menuNav._activeMenu &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1121
				!menuNav._movingToSubmenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1122
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1123
			menuNav._hideAllSubmenus(menuNav._activeMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1124
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1125
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1126
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1127
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1128
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1129
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1130
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1131
	* @method _afterActiveDescendantChange
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1132
	* @description "activeDescendantChange" event handler for menu's
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1133
	* Focus Manager.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1134
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1135
	* @param {Object} event Object representing the Attribute change event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1136
	* @param {NodeMenuNav} menuNav Object representing the NodeMenuNav instance.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1137
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1138
	_afterActiveDescendantChange: function (event, menuNav) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1139
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1140
		var oItem;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1141
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1142
		if (event.src === UI) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1143
			oItem = getItem(this.get(DESCENDANTS).item(event.newVal), true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1144
			menuNav._setActiveItem(oItem);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1145
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1146
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1147
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1148
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1149
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1150
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1151
	* @method _onDocFocus
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1152
	* @description "focus" event handler for the owner document of the MenuNav.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1153
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1154
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1155
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1156
	_onDocFocus: function (event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1157
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1158
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1159
			oActiveItem = menuNav._activeItem,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1160
			oTarget = event.target,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1161
			oMenu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1162
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1163
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1164
		if (menuNav._rootMenu.contains(oTarget)) {	//	The menu has focus
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1165
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1166
			if (menuNav._hasFocus) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1167
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1168
				oMenu = getParentMenu(oTarget);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1169
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1170
				//	If the element that was focused is a descendant of the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1171
				//	root menu, but is in a submenu not currently being
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1172
				//	managed by the Focus Manager, update the Focus Manager so
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1173
				//	that it is now managing the submenu that is the parent of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1174
				//	the element that was focused.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1175
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1176
				if (!menuNav._activeMenu.compareTo(oMenu)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1177
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1178
					menuNav._activeMenu = oMenu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1179
					menuNav._initFocusManager();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1180
					menuNav._focusManager.set(ACTIVE_DESCENDANT, oTarget);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1181
					menuNav._setActiveItem(getItem(oTarget, true));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1182
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1183
				}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1184
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1185
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1186
			else { //	Initial focus
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1187
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1188
				//	First time the menu has been focused, need to setup focused
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1189
				//	state and established active active descendant
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1190
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1191
				menuNav._hasFocus = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1192
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1193
				oActiveItem = getItem(oTarget, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1194
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1195
				if (oActiveItem) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1196
					menuNav._setActiveItem(oActiveItem);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1197
				}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1198
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1199
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1200
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1201
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1202
		else {	//	The menu has lost focus
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1203
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1204
			menuNav._clearActiveItem();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1205
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1206
			menuNav._cancelShowSubmenuTimer();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1207
			menuNav._hideAllSubmenus(menuNav._rootMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1208
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1209
			menuNav._activeMenu = menuNav._rootMenu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1210
			menuNav._initFocusManager();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1211
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1212
			menuNav._focusManager.set(ACTIVE_DESCENDANT, 0);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1213
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1214
			menuNav._hasFocus = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1215
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1216
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1217
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1218
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1219
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1220
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1221
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1222
	* @method _onMenuMouseOver
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1223
	* @description "mouseover" event handler for a menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1224
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1225
	* @param {Node} menu Node instance representing a menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1226
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1227
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1228
	_onMenuMouseOver: function (menu, event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1229
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1230
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1231
			oHideAllSubmenusTimer = menuNav._hideAllSubmenusTimer;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1232
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1233
		if (oHideAllSubmenusTimer) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1234
			oHideAllSubmenusTimer.cancel();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1235
			menuNav._hideAllSubmenusTimer = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1236
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1237
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1238
		menuNav._cancelHideSubmenuTimer();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1239
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1240
		//	Need to update the FocusManager in advance of focus a new
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1241
		//	Menu in order to avoid the FocusManager thinking that
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1242
		//	it has lost focus
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1243
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1244
		if (menu && !menu.compareTo(menuNav._activeMenu)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1245
			menuNav._activeMenu = menu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1246
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1247
			if (menuNav._hasFocus) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1248
				menuNav._initFocusManager();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1249
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1250
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1251
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1252
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1253
		if (menuNav._movingToSubmenu && isHorizontalMenu(menu)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1254
			menuNav._movingToSubmenu = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1255
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1256
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1257
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1258
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1259
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1260
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1261
	* @method _hideAndFocusLabel
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1262
	* @description Hides all of the submenus of the root menu and focuses the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1263
	* label of the topmost submenu
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1264
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1265
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1266
	_hideAndFocusLabel: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1267
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1268
		var	menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1269
			oActiveMenu = menuNav._activeMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1270
			oSubmenu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1271
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1272
		menuNav._hideAllSubmenus(menuNav._rootMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1273
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1274
		if (oActiveMenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1275
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1276
			//	Focus the label element for the topmost submenu
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1277
			oSubmenu = menuNav._getTopmostSubmenu(oActiveMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1278
			menuNav._focusItem(oSubmenu.previous());
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1279
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1280
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1281
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1282
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1283
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1284
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1285
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1286
	* @method _onMenuMouseOut
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1287
	* @description "mouseout" event handler for a menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1288
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1289
	* @param {Node} menu Node instance representing a menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1290
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1291
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1292
	_onMenuMouseOut: function (menu, event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1293
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1294
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1295
			oActiveMenu = menuNav._activeMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1296
			oRelatedTarget = event.relatedTarget,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1297
			oActiveItem = menuNav._activeItem,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1298
			oParentMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1299
			oMenu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1300
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1301
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1302
		if (oActiveMenu && !oActiveMenu.contains(oRelatedTarget)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1303
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1304
			oParentMenu = getParentMenu(oActiveMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1305
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1306
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1307
			if (oParentMenu && !oParentMenu.contains(oRelatedTarget)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1308
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1309
				if (menuNav.get(MOUSEOUT_HIDE_DELAY) > 0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1310
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1311
					menuNav._cancelShowSubmenuTimer();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1312
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1313
					menuNav._hideAllSubmenusTimer =
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1314
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1315
						later(menuNav.get(MOUSEOUT_HIDE_DELAY),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1316
							menuNav, menuNav._hideAndFocusLabel);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1317
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1318
				}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1319
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1320
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1321
			else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1322
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1323
				if (oActiveItem) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1324
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1325
					oMenu = getParentMenu(oActiveItem);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1326
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1327
					if (!menuNav._isRoot(oMenu)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1328
						menuNav._focusItem(oMenu.previous());
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1329
					}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1330
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1331
				}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1332
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1333
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1334
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1335
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1336
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1337
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1338
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1339
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1340
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1341
	* @method _onMenuLabelMouseOver
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1342
	* @description "mouseover" event handler for a menu label.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1343
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1344
	* @param {Node} menuLabel Node instance representing a menu label.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1345
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1346
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1347
	_onMenuLabelMouseOver: function (menuLabel, event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1348
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1349
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1350
			oActiveMenu = menuNav._activeMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1351
			bIsRoot = menuNav._isRoot(oActiveMenu),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1352
			bUseAutoSubmenuDisplay =
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1353
				(menuNav.get(AUTO_SUBMENU_DISPLAY) && bIsRoot || !bIsRoot),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1354
            submenuShowDelay = menuNav.get("submenuShowDelay"),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1355
			oSubmenu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1356
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1357
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1358
        var showSubmenu = function (delay) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1359
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1360
			menuNav._cancelHideSubmenuTimer();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1361
			menuNav._cancelShowSubmenuTimer();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1362
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1363
			if (!hasVisibleSubmenu(menuLabel)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1364
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1365
				oSubmenu = menuLabel.next();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1366
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1367
				if (oSubmenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1368
					menuNav._hideAllSubmenus(oActiveMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1369
					menuNav._showSubmenuTimer = later(delay, menuNav, menuNav._showMenu, oSubmenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1370
				}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1371
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1372
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1373
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1374
        };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1375
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1376
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1377
		menuNav._focusItem(menuLabel);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1378
		menuNav._setActiveItem(menuLabel);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1379
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1380
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1381
		if (bUseAutoSubmenuDisplay) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1382
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1383
	        if (menuNav._movingToSubmenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1384
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1385
	            //  If the user is moving diagonally from a submenu to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1386
	            //  another submenu and they then stop and pause on a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1387
	            //  menu label for an amount of time equal to the amount of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1388
	            //  time defined for the display of a submenu then show the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1389
	            //  submenu immediately.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1390
	            //  http://yuilibrary.com/projects/yui3/ticket/2528316
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1391
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1392
	            //Y.message("Pause path");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1393
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1394
	            menuNav._hoverTimer = later(submenuShowDelay, menuNav, function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1395
                    showSubmenu(0);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1396
	            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1397
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1398
	        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1399
	        else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1400
                showSubmenu(submenuShowDelay);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1401
	        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1402
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1403
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1404
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1405
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1406
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1407
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1408
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1409
	* @method _onMenuLabelMouseOut
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1410
	* @description "mouseout" event handler for a menu label.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1411
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1412
	* @param {Node} menuLabel Node instance representing a menu label.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1413
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1414
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1415
	_onMenuLabelMouseOut: function (menuLabel, event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1416
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1417
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1418
			bIsRoot = menuNav._isRoot(menuNav._activeMenu),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1419
			bUseAutoSubmenuDisplay =
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1420
				(menuNav.get(AUTO_SUBMENU_DISPLAY) && bIsRoot || !bIsRoot),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1421
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1422
			oRelatedTarget = event.relatedTarget,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1423
			oSubmenu = menuLabel.next(),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1424
			hoverTimer = menuNav._hoverTimer;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1425
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1426
        if (hoverTimer) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1427
            hoverTimer.cancel();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1428
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1429
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1430
		menuNav._clearActiveItem();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1431
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1432
		if (bUseAutoSubmenuDisplay) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1433
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1434
			if (menuNav._movingToSubmenu &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1435
					!menuNav._showSubmenuTimer && oSubmenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1436
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1437
				//	If the mouse is moving diagonally toward the submenu and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1438
				//	another submenu isn't in the process of being displayed
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1439
				//	(via a timer), then hide the submenu via a timer to give
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1440
				//	the user some time to reach the submenu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1441
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1442
				menuNav._hideSubmenuTimer =
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1443
					later(menuNav.get("submenuHideDelay"), menuNav,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1444
						menuNav._hideMenu, oSubmenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1445
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1446
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1447
			else if (!menuNav._movingToSubmenu && oSubmenu && (!oRelatedTarget ||
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1448
			        (oRelatedTarget &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1449
			            !oSubmenu.contains(oRelatedTarget) &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1450
			            !oRelatedTarget.compareTo(oSubmenu)))) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1451
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1452
				//	If the mouse is not moving toward the submenu, cancel any
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1453
				//	submenus that might be in the process of being displayed
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1454
				//	(via a timer) and hide this submenu immediately.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1455
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1456
				menuNav._cancelShowSubmenuTimer();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1457
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1458
				menuNav._hideMenu(oSubmenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1459
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1460
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1461
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1462
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1463
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1464
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1465
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1466
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1467
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1468
	* @method _onMenuItemMouseOver
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1469
	* @description "mouseover" event handler for a menuitem.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1470
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1471
	* @param {Node} menuItem Node instance representing a menuitem.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1472
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1473
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1474
	_onMenuItemMouseOver: function (menuItem, event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1475
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1476
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1477
			oActiveMenu = menuNav._activeMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1478
			bIsRoot = menuNav._isRoot(oActiveMenu),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1479
			bUseAutoSubmenuDisplay =
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1480
				(menuNav.get(AUTO_SUBMENU_DISPLAY) && bIsRoot || !bIsRoot);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1481
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1482
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1483
		menuNav._focusItem(menuItem);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1484
		menuNav._setActiveItem(menuItem);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1485
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1486
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1487
		if (bUseAutoSubmenuDisplay && !menuNav._movingToSubmenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1488
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1489
			menuNav._hideAllSubmenus(oActiveMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1490
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1491
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1492
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1493
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1494
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1495
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1496
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1497
	* @method _onMenuItemMouseOut
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1498
	* @description "mouseout" event handler for a menuitem.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1499
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1500
	* @param {Node} menuItem Node instance representing a menuitem.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1501
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1502
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1503
	_onMenuItemMouseOut: function (menuItem, event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1504
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1505
		this._clearActiveItem();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1506
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1507
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1508
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1509
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1510
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1511
	* @method _onVerticalMenuKeyDown
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1512
	* @description "keydown" event handler for vertical menus.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1513
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1514
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1515
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1516
	_onVerticalMenuKeyDown: function (event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1517
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1518
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1519
			oActiveMenu = menuNav._activeMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1520
			oRootMenu = menuNav._rootMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1521
			oTarget = event.target,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1522
			bPreventDefault = false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1523
			nKeyCode = event.keyCode,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1524
			oSubmenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1525
			oParentMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1526
			oLI,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1527
			oItem;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1528
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1529
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1530
		switch (nKeyCode) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1531
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1532
			case 37:	//	left arrow
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1533
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1534
				oParentMenu = getParentMenu(oActiveMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1535
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1536
				if (oParentMenu && isHorizontalMenu(oParentMenu)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1537
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1538
					menuNav._hideMenu(oActiveMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1539
					oLI = getPreviousSibling(oActiveMenu.get(PARENT_NODE));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1540
					oItem = getItem(oLI);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1541
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1542
					if (oItem) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1543
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1544
						if (isMenuLabel(oItem)) {	//	Menu label
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1545
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1546
							oSubmenu = oItem.next();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1547
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1548
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1549
							if (oSubmenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1550
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1551
								menuNav._showMenu(oSubmenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1552
								menuNav._focusItem(getFirstItem(oSubmenu));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1553
								menuNav._setActiveItem(getFirstItem(oSubmenu));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1554
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1555
							}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1556
							else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1557
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1558
								menuNav._focusItem(oItem);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1559
								menuNav._setActiveItem(oItem);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1560
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1561
							}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1562
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1563
						}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1564
						else {	//	MenuItem
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1565
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1566
							menuNav._focusItem(oItem);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1567
							menuNav._setActiveItem(oItem);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1568
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1569
						}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1570
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1571
					}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1572
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1573
				}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1574
				else if (!menuNav._isRoot(oActiveMenu)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1575
					menuNav._hideMenu(oActiveMenu, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1576
				}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1577
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1578
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1579
				bPreventDefault = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1580
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1581
			break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1582
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1583
			case 39:	//	right arrow
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1584
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1585
				if (isMenuLabel(oTarget)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1586
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1587
					oSubmenu = oTarget.next();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1588
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1589
					if (oSubmenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1590
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1591
						menuNav._showMenu(oSubmenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1592
						menuNav._focusItem(getFirstItem(oSubmenu));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1593
						menuNav._setActiveItem(getFirstItem(oSubmenu));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1594
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1595
					}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1596
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1597
				}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1598
				else if (isHorizontalMenu(oRootMenu)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1599
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1600
					oSubmenu = menuNav._getTopmostSubmenu(oActiveMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1601
					oLI = getNextSibling(oSubmenu.get(PARENT_NODE));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1602
					oItem = getItem(oLI);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1603
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1604
					menuNav._hideAllSubmenus(oRootMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1605
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1606
					if (oItem) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1607
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1608
						if (isMenuLabel(oItem)) {	//	Menu label
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1609
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1610
							oSubmenu = oItem.next();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1611
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1612
							if (oSubmenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1613
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1614
								menuNav._showMenu(oSubmenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1615
								menuNav._focusItem(getFirstItem(oSubmenu));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1616
								menuNav._setActiveItem(getFirstItem(oSubmenu));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1617
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1618
							}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1619
							else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1620
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1621
								menuNav._focusItem(oItem);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1622
								menuNav._setActiveItem(oItem);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1623
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1624
							}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1625
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1626
						}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1627
						else {	//	MenuItem
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1628
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1629
							menuNav._focusItem(oItem);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1630
							menuNav._setActiveItem(oItem);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1631
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1632
						}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1633
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1634
					}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1635
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1636
				}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1637
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1638
				bPreventDefault = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1639
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1640
			break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1641
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1642
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1643
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1644
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1645
		if (bPreventDefault) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1646
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1647
			//	Prevent the browser from scrolling the window
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1648
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1649
			event.preventDefault();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1650
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1651
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1652
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1653
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1654
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1655
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1656
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1657
	* @method _onHorizontalMenuKeyDown
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1658
	* @description "keydown" event handler for horizontal menus.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1659
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1660
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1661
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1662
	_onHorizontalMenuKeyDown: function (event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1663
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1664
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1665
			oActiveMenu = menuNav._activeMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1666
			oTarget = event.target,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1667
			oFocusedItem = getItem(oTarget, true),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1668
			bPreventDefault = false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1669
			nKeyCode = event.keyCode,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1670
			oSubmenu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1671
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1672
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1673
		if (nKeyCode === 40) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1674
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1675
			menuNav._hideAllSubmenus(oActiveMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1676
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1677
			if (isMenuLabel(oFocusedItem)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1678
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1679
				oSubmenu = oFocusedItem.next();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1680
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1681
				if (oSubmenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1682
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1683
					menuNav._showMenu(oSubmenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1684
					menuNav._focusItem(getFirstItem(oSubmenu));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1685
					menuNav._setActiveItem(getFirstItem(oSubmenu));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1686
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1687
				}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1688
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1689
				bPreventDefault = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1690
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1691
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1692
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1693
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1694
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1695
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1696
		if (bPreventDefault) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1697
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1698
			//	Prevent the browser from scrolling the window
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1699
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1700
			event.preventDefault();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1701
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1702
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1703
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1704
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1705
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1706
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1707
	//	Generic DOM Event handlers
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1708
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1709
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1710
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1711
	* @method _onMouseMove
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1712
	* @description "mousemove" event handler for the menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1713
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1714
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1715
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1716
	_onMouseMove: function (event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1717
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1718
		var menuNav = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1719
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1720
		//	Using a timer to set the value of the "_currentMouseX" property
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1721
		//	helps improve the reliability of the calculation used to set the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1722
		//	value of the "_movingToSubmenu" property - especially in Opera.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1723
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1724
		later(10, menuNav, function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1725
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1726
			menuNav._currentMouseX = event.pageX;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1727
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1728
		});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1729
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1730
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1731
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1732
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1733
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1734
	* @method _onMouseOver
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1735
	* @description "mouseover" event handler for the menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1736
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1737
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1738
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1739
	_onMouseOver: function (event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1740
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1741
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1742
			oTarget,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1743
			oMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1744
			oMenuLabel,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1745
			oParentMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1746
			oMenuItem;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1747
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1748
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1749
		if (menuNav._blockMouseEvent) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1750
			menuNav._blockMouseEvent = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1751
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1752
		else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1753
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1754
			oTarget = event.target;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1755
			oMenu = getMenu(oTarget, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1756
			oMenuLabel = getMenuLabel(oTarget, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1757
			oMenuItem = getMenuItem(oTarget, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1758
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1759
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1760
			if (handleMouseOverForNode(oMenu, oTarget)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1761
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1762
				menuNav._onMenuMouseOver(oMenu, event);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1763
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1764
				oMenu[HANDLED_MOUSEOVER] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1765
				oMenu[HANDLED_MOUSEOUT] = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1766
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1767
				oParentMenu = getParentMenu(oMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1768
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1769
				if (oParentMenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1770
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1771
					oParentMenu[HANDLED_MOUSEOUT] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1772
					oParentMenu[HANDLED_MOUSEOVER] = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1773
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1774
				}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1775
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1776
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1777
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1778
			if (handleMouseOverForNode(oMenuLabel, oTarget)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1779
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1780
				menuNav._onMenuLabelMouseOver(oMenuLabel, event);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1781
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1782
				oMenuLabel[HANDLED_MOUSEOVER] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1783
				oMenuLabel[HANDLED_MOUSEOUT] = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1784
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1785
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1786
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1787
			if (handleMouseOverForNode(oMenuItem, oTarget)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1788
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1789
				menuNav._onMenuItemMouseOver(oMenuItem, event);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1790
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1791
				oMenuItem[HANDLED_MOUSEOVER] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1792
				oMenuItem[HANDLED_MOUSEOUT] = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1793
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1794
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1795
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1796
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1797
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1798
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1799
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1800
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1801
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1802
	* @method _onMouseOut
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1803
	* @description "mouseout" event handler for the menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1804
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1805
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1806
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1807
	_onMouseOut: function (event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1808
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1809
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1810
			oActiveMenu = menuNav._activeMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1811
			bMovingToSubmenu = false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1812
			oTarget,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1813
			oRelatedTarget,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1814
			oMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1815
			oMenuLabel,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1816
			oSubmenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1817
			oMenuItem;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1818
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1819
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1820
		menuNav._movingToSubmenu =
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1821
					(oActiveMenu && !isHorizontalMenu(oActiveMenu) &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1822
						((event.pageX - 5) > menuNav._currentMouseX));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1823
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1824
		oTarget = event.target;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1825
		oRelatedTarget = event.relatedTarget;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1826
		oMenu = getMenu(oTarget, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1827
		oMenuLabel = getMenuLabel(oTarget, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1828
		oMenuItem = getMenuItem(oTarget, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1829
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1830
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1831
		if (handleMouseOutForNode(oMenuLabel, oRelatedTarget)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1832
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1833
			menuNav._onMenuLabelMouseOut(oMenuLabel, event);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1834
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1835
			oMenuLabel[HANDLED_MOUSEOUT] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1836
			oMenuLabel[HANDLED_MOUSEOVER] = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1837
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1838
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1839
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1840
		if (handleMouseOutForNode(oMenuItem, oRelatedTarget)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1841
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1842
			menuNav._onMenuItemMouseOut(oMenuItem, event);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1843
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1844
			oMenuItem[HANDLED_MOUSEOUT] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1845
			oMenuItem[HANDLED_MOUSEOVER] = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1846
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1847
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1848
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1849
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1850
		if (oMenuLabel) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1851
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1852
			oSubmenu = oMenuLabel.next();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1853
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1854
			if (oSubmenu && oRelatedTarget &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1855
				(oRelatedTarget.compareTo(oSubmenu) ||
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1856
					oSubmenu.contains(oRelatedTarget))) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1857
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1858
				bMovingToSubmenu = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1859
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1860
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1861
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1862
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1863
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1864
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1865
		if (handleMouseOutForNode(oMenu, oRelatedTarget) || bMovingToSubmenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1866
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1867
			menuNav._onMenuMouseOut(oMenu, event);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1868
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1869
			oMenu[HANDLED_MOUSEOUT] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1870
			oMenu[HANDLED_MOUSEOVER] = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1871
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1872
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1873
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1874
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1875
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1876
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1877
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1878
	* @method _toggleSubmenuDisplay
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1879
	* @description "mousedown," "keydown," and "click" event handler for the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1880
	* menu used to toggle the display of a submenu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1881
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1882
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1883
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1884
	_toggleSubmenuDisplay: function (event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1885
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1886
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1887
			oTarget = event.target,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1888
			oMenuLabel = getMenuLabel(oTarget, true),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1889
			sType = event.type,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1890
			oAnchor,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1891
			oSubmenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1892
			sHref,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1893
			nHashPos,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1894
			nLen,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1895
			sId;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1896
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1897
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1898
		if (oMenuLabel) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1899
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1900
			oAnchor = isAnchor(oTarget) ? oTarget : oTarget.ancestor(isAnchor);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1901
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1902
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1903
			if (oAnchor) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1904
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1905
				//	Need to pass "2" as a second argument to "getAttribute" for
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1906
				//	IE otherwise IE will return a fully qualified URL for the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1907
				//	value of the "href" attribute.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1908
				//	http://msdn.microsoft.com/en-us/library/ms536429(VS.85).aspx
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1909
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1910
				sHref = oAnchor.getAttribute("href", 2);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1911
				nHashPos = sHref.indexOf("#");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1912
				nLen = sHref.length;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1913
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1914
				if (nHashPos === 0 && nLen > 1) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1915
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1916
					sId = sHref.substr(1, nLen);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1917
					oSubmenu = oMenuLabel.next();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1918
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1919
					if (oSubmenu && (oSubmenu.get(ID) === sId)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1920
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1921
						if (sType === MOUSEDOWN || sType === KEYDOWN) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1922
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1923
							if ((UA.opera || UA.gecko || UA.ie) && sType === KEYDOWN && !menuNav._preventClickHandle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1924
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1925
								//	Prevent the browser from following the URL of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1926
								//	the anchor element
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1927
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1928
								menuNav._preventClickHandle = menuNav._rootMenu.on("click", function (event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1929
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1930
									event.preventDefault();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1931
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1932
									menuNav._preventClickHandle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1933
									menuNav._preventClickHandle = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1934
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1935
								});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1936
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1937
							}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1938
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1939
							if (sType == MOUSEDOWN) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1940
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1941
								//	Prevent the target from getting focused by
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1942
								//	default, since the element to be focused will
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1943
								//	be determined by weather or not the submenu
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1944
								//	is visible.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1945
								event.preventDefault();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1946
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1947
								//	FocusManager will attempt to focus any
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1948
								//	descendant that is the target of the mousedown
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1949
								//	event.  Since we want to explicitly control
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1950
	 							//	where focus is going, we need to call
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1951
								//	"stopImmediatePropagation" to stop the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1952
								//	FocusManager from doing its thing.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1953
								event.stopImmediatePropagation();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1954
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1955
								//	The "_focusItem" method relies on the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1956
								//	"_hasFocus" property being set to true.  The
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1957
								//	"_hasFocus" property is normally set via a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1958
								//	"focus" event listener, but since we've
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1959
								//	blocked focus from happening, we need to set
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1960
								//	this property manually.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1961
								menuNav._hasFocus = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1962
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1963
							}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1964
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1965
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1966
							if (menuNav._isRoot(getParentMenu(oTarget))) {	//	Event target is a submenu label in the root menu
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1967
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1968
								//	Menu label toggle functionality
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1969
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1970
								if (hasVisibleSubmenu(oMenuLabel)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1971
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1972
									menuNav._hideMenu(oSubmenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1973
									menuNav._focusItem(oMenuLabel);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1974
									menuNav._setActiveItem(oMenuLabel);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1975
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1976
								}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1977
								else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1978
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1979
									menuNav._hideAllSubmenus(menuNav._rootMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1980
									menuNav._showMenu(oSubmenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1981
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1982
									menuNav._focusItem(getFirstItem(oSubmenu));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1983
									menuNav._setActiveItem(getFirstItem(oSubmenu));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1984
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1985
								}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1986
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1987
							}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1988
							else {	//	Event target is a submenu label within a submenu
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1989
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1990
								if (menuNav._activeItem == oMenuLabel) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1991
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1992
									menuNav._showMenu(oSubmenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1993
									menuNav._focusItem(getFirstItem(oSubmenu));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1994
									menuNav._setActiveItem(getFirstItem(oSubmenu));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1995
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1996
								}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1997
								else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1998
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1999
									if (!oMenuLabel._clickHandle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2000
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2001
										oMenuLabel._clickHandle = oMenuLabel.on("click", function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2002
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2003
											menuNav._hideAllSubmenus(menuNav._rootMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2004
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2005
											menuNav._hasFocus = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2006
											menuNav._clearActiveItem();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2007
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2008
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2009
											oMenuLabel._clickHandle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2010
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2011
											oMenuLabel._clickHandle = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2012
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2013
										});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2014
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2015
									}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2016
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2017
								}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2018
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2019
							}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2020
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2021
						}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2022
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2023
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2024
						if (sType === CLICK) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2025
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2026
							//	Prevent the browser from following the URL of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2027
							//	the anchor element
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2028
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2029
							event.preventDefault();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2030
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2031
						}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2032
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2033
					}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2034
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2035
				}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2036
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2037
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2038
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2039
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2040
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2041
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2042
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2043
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2044
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2045
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2046
	* @method _onKeyPress
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2047
	* @description "keypress" event handler for the menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2048
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2049
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2050
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2051
	_onKeyPress: function (event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2052
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2053
		switch (event.keyCode) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2054
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2055
			case 37:	//	left arrow
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2056
			case 38:	//	up arrow
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2057
			case 39:	//	right arrow
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2058
			case 40:	//	down arrow
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2059
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2060
				//	Prevent the browser from scrolling the window
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2061
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2062
				event.preventDefault();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2063
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2064
			break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2065
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2066
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2067
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2068
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2069
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2070
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2071
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2072
	* @method _onKeyDown
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2073
	* @description "keydown" event handler for the menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2074
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2075
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2076
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2077
	_onKeyDown: function (event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2078
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2079
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2080
			oActiveItem = menuNav._activeItem,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2081
			oTarget = event.target,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2082
			oActiveMenu = getParentMenu(oTarget),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2083
			oSubmenu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2084
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2085
		if (oActiveMenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2086
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2087
			menuNav._activeMenu = oActiveMenu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2088
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2089
			if (isHorizontalMenu(oActiveMenu)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2090
				menuNav._onHorizontalMenuKeyDown(event);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2091
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2092
			else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2093
				menuNav._onVerticalMenuKeyDown(event);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2094
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2095
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2096
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2097
			if (event.keyCode === 27) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2098
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2099
				if (!menuNav._isRoot(oActiveMenu)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2100
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2101
					if (UA.opera) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2102
						later(0, menuNav, function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2103
							menuNav._hideMenu(oActiveMenu, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2104
						});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2105
					}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2106
					else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2107
						menuNav._hideMenu(oActiveMenu, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2108
					}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2109
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2110
					event.stopPropagation();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2111
					menuNav._blockMouseEvent = UA.gecko ? true : false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2112
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2113
				}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2114
				else if (oActiveItem) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2115
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2116
					if (isMenuLabel(oActiveItem) &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2117
							hasVisibleSubmenu(oActiveItem)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2118
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2119
						oSubmenu = oActiveItem.next();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2120
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2121
						if (oSubmenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2122
							menuNav._hideMenu(oSubmenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2123
						}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2124
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2125
					}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2126
					else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2127
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2128
						menuNav._focusManager.blur();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2129
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2130
						//	This is necessary for Webkit since blurring the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2131
						//	active menuitem won't result in the document
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2132
						//	gaining focus, meaning the that _onDocFocus
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2133
						//	listener won't clear the active menuitem.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2134
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2135
						menuNav._clearActiveItem();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2136
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2137
						menuNav._hasFocus = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2138
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2139
					}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2140
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2141
				}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2142
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2143
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2144
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2145
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2146
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2147
	},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2148
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2149
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2150
	* @method _onDocMouseDown
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2151
	* @description "mousedown" event handler for the owner document of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2152
	* the menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2153
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2154
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2155
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2156
	_onDocMouseDown: function (event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2157
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2158
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2159
			oRoot = menuNav._rootMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2160
			oTarget = event.target;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2161
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2162
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2163
		if (!(oRoot.compareTo(oTarget) || oRoot.contains(oTarget))) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2164
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2165
			menuNav._hideAllSubmenus(oRoot);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2166
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2167
			//	Document doesn't receive focus in Webkit when the user mouses
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2168
			//	down on it, so the "_hasFocus" property won't get set to the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2169
			//	correct value.  The following line corrects the problem.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2170
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2171
			if (UA.webkit) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2172
				menuNav._hasFocus = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2173
				menuNav._clearActiveItem();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2174
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2175
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2176
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2177
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2178
	}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2179
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2180
});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2181
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2182
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2183
Y.namespace('Plugin');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2184
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2185
Y.Plugin.NodeMenuNav = NodeMenuNav;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2186
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2187
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2188
}, '@VERSION@', {"requires": ["node", "classnamemanager", "plugin", "node-focusmanager"], "skinnable": true});