src/cm/media/js/lib/yui/yui3-3.15.0/build/node-menunav/node-menunav-debug.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
		Y.log("WARNING: Node-MenuNav is a deprecated module as of YUI 3.9.0. This module will be removed from a later version of the library.", "warn");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   703
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   704
		if (oRootMenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   705
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   706
			menuNav._rootMenu = oRootMenu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   707
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   708
			oRootMenu.all("ul:first-child").addClass(FIRST_OF_TYPE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   709
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   710
			//	Hide all visible submenus
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   711
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   712
			oRootMenu.all(MENU_SELECTOR).addClass(CSS_MENU_HIDDEN);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   713
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   714
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   715
			//	Wire up all event handlers
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   716
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   717
			aHandlers.push(oRootMenu.on("mouseover", menuNav._onMouseOver, menuNav));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   718
			aHandlers.push(oRootMenu.on("mouseout", menuNav._onMouseOut, menuNav));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   719
			aHandlers.push(oRootMenu.on("mousemove", menuNav._onMouseMove, menuNav));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   720
			aHandlers.push(oRootMenu.on(MOUSEDOWN, menuNav._toggleSubmenuDisplay, menuNav));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   721
			aHandlers.push(Y.on("key", menuNav._toggleSubmenuDisplay, oRootMenu, "down:13", menuNav));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   722
			aHandlers.push(oRootMenu.on(CLICK, menuNav._toggleSubmenuDisplay, menuNav));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   723
			aHandlers.push(oRootMenu.on("keypress", menuNav._onKeyPress, menuNav));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   724
			aHandlers.push(oRootMenu.on(KEYDOWN, menuNav._onKeyDown, menuNav));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   725
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   726
			oDoc = oRootMenu.get("ownerDocument");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   727
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   728
		    aHandlers.push(oDoc.on(MOUSEDOWN, menuNav._onDocMouseDown, menuNav));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   729
			aHandlers.push(oDoc.on("focus", menuNav._onDocFocus, menuNav));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   730
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   731
			this._eventHandlers = aHandlers;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   732
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   733
			menuNav._initFocusManager();
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   740
	destructor: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   741
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   742
		var aHandlers = this._eventHandlers;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   743
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   744
		if (aHandlers) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   745
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   746
			Y.Array.each(aHandlers, function (handle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   747
				handle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   748
			});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   749
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   750
			this._eventHandlers = null;
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   754
		this.get(HOST).unplug("focusManager");
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   760
	//	Protected methods
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   761
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   762
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   763
	* @method _isRoot
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   764
	* @description Returns a boolean indicating if the specified menu is the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   765
	* root menu in the menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   766
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   767
	* @param {Node} menu Node instance representing a menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   768
	* @return {Boolean} Boolean indicating if the specified menu is the root
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   769
	* menu in the menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   770
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   771
	_isRoot: function (menu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   772
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   773
		return this._rootMenu.compareTo(menu);
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   779
	* @method _getTopmostSubmenu
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   780
	* @description Returns the topmost submenu of a submenu hierarchy.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   781
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   782
	* @param {Node} menu Node instance representing a menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   783
	* @return {Node} Node instance representing a menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   784
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   785
	_getTopmostSubmenu: function (menu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   786
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   787
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   788
			oMenu = getParentMenu(menu),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   789
			returnVal;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   790
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   791
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   792
		if (!oMenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   793
			returnVal = menu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   794
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   795
		else if (menuNav._isRoot(oMenu)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   796
			returnVal = menu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   797
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   798
		else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   799
			returnVal = menuNav._getTopmostSubmenu(oMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   800
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   801
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   802
		return returnVal;
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   808
	* @method _clearActiveItem
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   809
	* @description Clears the menu's active descendent.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   810
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   811
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   812
	_clearActiveItem: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   813
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   814
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   815
			oActiveItem = menuNav._activeItem;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   816
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   817
		if (oActiveItem) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   818
			oActiveItem.removeClass(getActiveClass(oActiveItem));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   819
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   820
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   821
		menuNav._activeItem = null;
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   827
	* @method _setActiveItem
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   828
	* @description Sets the specified menuitem or menu label as the menu's
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   829
	* active descendent.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   830
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   831
	* @param {Node} item Node instance representing a menuitem or menu label.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   832
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   833
	_setActiveItem: function (item) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   834
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   835
		var menuNav = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   836
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   837
		if (item) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   838
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   839
			menuNav._clearActiveItem();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   840
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   841
			item.addClass(getActiveClass(item));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   842
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   843
			menuNav._activeItem = item;
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   851
	* @method _focusItem
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   852
	* @description Focuses the specified menuitem or menu label.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   853
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   854
	* @param {Node} item Node instance representing a menuitem or menu label.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   855
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   856
	_focusItem: function (item) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   857
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   858
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   859
			oMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   860
			oItem;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   861
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   862
		if (item && menuNav._hasFocus) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   863
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   864
			oMenu = getParentMenu(item);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   865
			oItem = getItemAnchor(item);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   866
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   867
			if (oMenu && !oMenu.compareTo(menuNav._activeMenu)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   868
				menuNav._activeMenu = oMenu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   869
				menuNav._initFocusManager();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   870
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   871
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   872
			menuNav._focusManager.focus(oItem);
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   880
	* @method _showMenu
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   881
	* @description Shows the specified menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   882
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   883
	* @param {Node} menu Node instance representing a menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   884
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   885
	_showMenu: function (menu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   886
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   887
		var oParentMenu = getParentMenu(menu),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   888
			oLI = menu.get(PARENT_NODE),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   889
			aXY = oLI.getXY();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   890
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   891
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   892
		if (this.get(USE_ARIA)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   893
			menu.set(ARIA_HIDDEN, false);
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   897
		if (isHorizontalMenu(oParentMenu)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   898
			aXY[1] = aXY[1] + oLI.get(OFFSET_HEIGHT);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   899
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   900
		else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   901
			aXY[0] = aXY[0] + oLI.get(OFFSET_WIDTH);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   902
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   903
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   904
		menu.setXY(aXY);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   905
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   906
		if (UA.ie < 8) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   907
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   908
			if (UA.ie === 6 && !menu.hasIFrameShim) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   909
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   910
				menu.appendChild(Y.Node.create(NodeMenuNav.SHIM_TEMPLATE));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   911
				menu.hasIFrameShim = true;
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   915
			//	Clear previous values for height and width
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   916
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   917
			menu.setStyles({ height: EMPTY_STRING, width: EMPTY_STRING });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   918
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   919
			//	Set the width and height of the menu's bounding box - this is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   920
			//	necessary for IE 6 so that the CSS for the <iframe> shim can
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   921
			//	simply set the <iframe>'s width and height to 100% to ensure
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   922
			//	that dimensions of an <iframe> shim are always sync'd to the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   923
			//	that of its parent menu.  Specifying a width and height also
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   924
			//	helps when positioning decorator elements (for creating effects
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   925
			//	like rounded corners) inside a menu's bounding box in IE 7.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   926
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   927
			menu.setStyles({
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   928
				height: (menu.get(OFFSET_HEIGHT) + PX),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   929
				width: (menu.get(OFFSET_WIDTH) + PX) });
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   933
		menu.previous().addClass(CSS_MENU_LABEL_MENUVISIBLE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   934
		menu.removeClass(CSS_MENU_HIDDEN);
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   940
	* @method _hideMenu
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   941
	* @description Hides the specified menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   942
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   943
	* @param {Node} menu Node instance representing a menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   944
	* @param {Boolean} activateAndFocusLabel Boolean indicating if the label
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   945
	* for the specified
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   946
	* menu should be focused and set as active.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   947
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   948
	_hideMenu: function (menu, activateAndFocusLabel) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   949
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   950
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   951
			oLabel = menu.previous(),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   952
			oActiveItem;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   953
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   954
		oLabel.removeClass(CSS_MENU_LABEL_MENUVISIBLE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   955
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   956
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   957
		if (activateAndFocusLabel) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   958
			menuNav._focusItem(oLabel);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   959
			menuNav._setActiveItem(oLabel);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   960
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   961
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   962
		oActiveItem = menu.one((PERIOD + CSS_MENUITEM_ACTIVE));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   963
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   964
		if (oActiveItem) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   965
			oActiveItem.removeClass(CSS_MENUITEM_ACTIVE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   966
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   967
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   968
		//	Clear the values for top and left that were set by the call to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   969
		//	"setXY" when the menu was shown so that the hidden position
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   970
		//	specified in the core CSS file will take affect.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   971
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   972
		menu.setStyles({ left: EMPTY_STRING, top: EMPTY_STRING });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   973
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   974
		menu.addClass(CSS_MENU_HIDDEN);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   975
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   976
		if (menuNav.get(USE_ARIA)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   977
			menu.set(ARIA_HIDDEN, true);
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   984
	* @method _hideAllSubmenus
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   985
	* @description Hides all submenus of the specified menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   986
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   987
	* @param {Node} menu Node instance representing a menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   988
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   989
	_hideAllSubmenus: function (menu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   990
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   991
		var menuNav = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   992
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   993
		menu.all(MENU_SELECTOR).each(Y.bind(function (submenuNode) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   994
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   995
			menuNav._hideMenu(submenuNode);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   996
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   997
		}, menuNav));
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1003
	* @method _cancelShowSubmenuTimer
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1004
	* @description Cancels the timer used to show a submenu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1005
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1006
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1007
	_cancelShowSubmenuTimer: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1008
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1009
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1010
			oShowSubmenuTimer = menuNav._showSubmenuTimer;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1011
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1012
		if (oShowSubmenuTimer) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1013
			oShowSubmenuTimer.cancel();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1014
			menuNav._showSubmenuTimer = null;
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1021
	* @method _cancelHideSubmenuTimer
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1022
	* @description Cancels the timer used to hide a submenu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1023
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1024
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1025
	_cancelHideSubmenuTimer: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1026
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1027
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1028
			oHideSubmenuTimer = menuNav._hideSubmenuTimer;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1029
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1030
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1031
		if (oHideSubmenuTimer) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1032
			oHideSubmenuTimer.cancel();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1033
			menuNav._hideSubmenuTimer = null;
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1040
	* @method _initFocusManager
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1041
	* @description Initializes and updates the Focus Manager so that is is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1042
	* always managing descendants of the active menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1043
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1044
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1045
	_initFocusManager: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1046
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1047
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1048
			oRootMenu = menuNav._rootMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1049
			oMenu = menuNav._activeMenu || oRootMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1050
			sSelectorBase =
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1051
				menuNav._isRoot(oMenu) ? EMPTY_STRING : ("#" + oMenu.get("id")),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1052
			oFocusManager = menuNav._focusManager,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1053
			sKeysVal,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1054
			sDescendantSelector,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1055
			sQuery;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1056
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1057
		if (isHorizontalMenu(oMenu)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1058
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1059
			sDescendantSelector = sSelectorBase + STANDARD_QUERY + "," +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1060
				sSelectorBase + EXTENDED_QUERY;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1061
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1062
			sKeysVal = { next: "down:39", previous: "down:37" };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1063
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1064
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1065
		else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1066
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1067
			sDescendantSelector = sSelectorBase + STANDARD_QUERY;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1068
			sKeysVal = { next: "down:40", previous: "down:38" };
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1073
		if (!oFocusManager) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1074
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1075
			oRootMenu.plug(Y.Plugin.NodeFocusManager, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1076
				descendants: sDescendantSelector,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1077
				keys: sKeysVal,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1078
				circular: true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1079
			});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1080
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1081
			oFocusManager = oRootMenu.focusManager;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1082
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1083
			sQuery = "#" + oRootMenu.get("id") + MENU_SELECTOR + " a," +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1084
							MENU_TOGGLE_SELECTOR;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1085
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1086
			oRootMenu.all(sQuery).set("tabIndex", -1);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1087
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1088
			oFocusManager.on(ACTIVE_DESCENDANT_CHANGE,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1089
				this._onActiveDescendantChange, oFocusManager, this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1090
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1091
			oFocusManager.after(ACTIVE_DESCENDANT_CHANGE,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1092
				this._afterActiveDescendantChange, oFocusManager, this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1093
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1094
			menuNav._focusManager = oFocusManager;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1095
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1096
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1097
		else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1098
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1099
			oFocusManager.set(ACTIVE_DESCENDANT, -1);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1100
			oFocusManager.set(DESCENDANTS, sDescendantSelector);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1101
			oFocusManager.set("keys", sKeysVal);
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1108
	//	Event handlers for discrete pieces of pieces of the menu
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1112
	* @method _onActiveDescendantChange
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1113
	* @description "activeDescendantChange" event handler for menu's
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1114
	* Focus Manager.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1115
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1116
	* @param {Object} event Object representing the Attribute change event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1117
	* @param {NodeMenuNav} menuNav Object representing the NodeMenuNav instance.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1118
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1119
	_onActiveDescendantChange: function (event, menuNav) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1120
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1121
		if (event.src === UI && menuNav._activeMenu &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1122
				!menuNav._movingToSubmenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1123
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1124
			menuNav._hideAllSubmenus(menuNav._activeMenu);
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1132
	* @method _afterActiveDescendantChange
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1133
	* @description "activeDescendantChange" event handler for menu's
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1134
	* Focus Manager.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1135
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1136
	* @param {Object} event Object representing the Attribute change event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1137
	* @param {NodeMenuNav} menuNav Object representing the NodeMenuNav instance.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1138
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1139
	_afterActiveDescendantChange: function (event, menuNav) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1140
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1141
		var oItem;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1142
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1143
		if (event.src === UI) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1144
			oItem = getItem(this.get(DESCENDANTS).item(event.newVal), true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1145
			menuNav._setActiveItem(oItem);
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1152
	* @method _onDocFocus
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1153
	* @description "focus" event handler for the owner document of the MenuNav.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1154
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1155
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1156
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1157
	_onDocFocus: function (event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1158
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1159
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1160
			oActiveItem = menuNav._activeItem,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1161
			oTarget = event.target,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1162
			oMenu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1163
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1164
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1165
		if (menuNav._rootMenu.contains(oTarget)) {	//	The menu has focus
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1166
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1167
			if (menuNav._hasFocus) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1168
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1169
				oMenu = getParentMenu(oTarget);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1170
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1171
				//	If the element that was focused is a descendant of the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1172
				//	root menu, but is in a submenu not currently being
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1173
				//	managed by the Focus Manager, update the Focus Manager so
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1174
				//	that it is now managing the submenu that is the parent of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1175
				//	the element that was focused.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1176
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1177
				if (!menuNav._activeMenu.compareTo(oMenu)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1178
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1179
					menuNav._activeMenu = oMenu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1180
					menuNav._initFocusManager();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1181
					menuNav._focusManager.set(ACTIVE_DESCENDANT, oTarget);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1182
					menuNav._setActiveItem(getItem(oTarget, true));
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
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1187
			else { //	Initial focus
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1188
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1189
				//	First time the menu has been focused, need to setup focused
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1190
				//	state and established active active descendant
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1191
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1192
				menuNav._hasFocus = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1193
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1194
				oActiveItem = getItem(oTarget, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1195
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1196
				if (oActiveItem) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1197
					menuNav._setActiveItem(oActiveItem);
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
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1203
		else {	//	The menu has lost focus
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1204
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1205
			menuNav._clearActiveItem();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1206
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1207
			menuNav._cancelShowSubmenuTimer();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1208
			menuNav._hideAllSubmenus(menuNav._rootMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1209
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1210
			menuNav._activeMenu = menuNav._rootMenu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1211
			menuNav._initFocusManager();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1212
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1213
			menuNav._focusManager.set(ACTIVE_DESCENDANT, 0);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1214
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1215
			menuNav._hasFocus = false;
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1223
	* @method _onMenuMouseOver
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1224
	* @description "mouseover" event handler for a menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1225
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1226
	* @param {Node} menu Node instance representing a menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1227
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1228
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1229
	_onMenuMouseOver: function (menu, event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1230
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1231
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1232
			oHideAllSubmenusTimer = menuNav._hideAllSubmenusTimer;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1233
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1234
		if (oHideAllSubmenusTimer) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1235
			oHideAllSubmenusTimer.cancel();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1236
			menuNav._hideAllSubmenusTimer = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1237
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1238
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1239
		menuNav._cancelHideSubmenuTimer();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1240
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1241
		//	Need to update the FocusManager in advance of focus a new
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1242
		//	Menu in order to avoid the FocusManager thinking that
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1243
		//	it has lost focus
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1244
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1245
		if (menu && !menu.compareTo(menuNav._activeMenu)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1246
			menuNav._activeMenu = menu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1247
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1248
			if (menuNav._hasFocus) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1249
				menuNav._initFocusManager();
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1254
		if (menuNav._movingToSubmenu && isHorizontalMenu(menu)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1255
			menuNav._movingToSubmenu = false;
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1262
	* @method _hideAndFocusLabel
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1263
	* @description Hides all of the submenus of the root menu and focuses the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1264
	* label of the topmost submenu
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1265
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1266
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1267
	_hideAndFocusLabel: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1268
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1269
		var	menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1270
			oActiveMenu = menuNav._activeMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1271
			oSubmenu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1272
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1273
		menuNav._hideAllSubmenus(menuNav._rootMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1274
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1275
		if (oActiveMenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1276
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1277
			//	Focus the label element for the topmost submenu
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1278
			oSubmenu = menuNav._getTopmostSubmenu(oActiveMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1279
			menuNav._focusItem(oSubmenu.previous());
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1287
	* @method _onMenuMouseOut
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1288
	* @description "mouseout" event handler for a menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1289
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1290
	* @param {Node} menu Node instance representing a menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1291
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1292
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1293
	_onMenuMouseOut: function (menu, event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1294
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1295
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1296
			oActiveMenu = menuNav._activeMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1297
			oRelatedTarget = event.relatedTarget,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1298
			oActiveItem = menuNav._activeItem,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1299
			oParentMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1300
			oMenu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1301
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1302
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1303
		if (oActiveMenu && !oActiveMenu.contains(oRelatedTarget)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1304
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1305
			oParentMenu = getParentMenu(oActiveMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1306
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1307
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1308
			if (oParentMenu && !oParentMenu.contains(oRelatedTarget)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1309
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1310
				if (menuNav.get(MOUSEOUT_HIDE_DELAY) > 0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1311
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1312
					menuNav._cancelShowSubmenuTimer();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1313
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1314
					menuNav._hideAllSubmenusTimer =
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1315
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1316
						later(menuNav.get(MOUSEOUT_HIDE_DELAY),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1317
							menuNav, menuNav._hideAndFocusLabel);
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
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1322
			else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1323
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1324
				if (oActiveItem) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1325
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1326
					oMenu = getParentMenu(oActiveItem);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1327
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1328
					if (!menuNav._isRoot(oMenu)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1329
						menuNav._focusItem(oMenu.previous());
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1342
	* @method _onMenuLabelMouseOver
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1343
	* @description "mouseover" event handler for a menu label.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1344
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1345
	* @param {Node} menuLabel Node instance representing a menu label.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1346
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1347
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1348
	_onMenuLabelMouseOver: function (menuLabel, event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1349
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1350
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1351
			oActiveMenu = menuNav._activeMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1352
			bIsRoot = menuNav._isRoot(oActiveMenu),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1353
			bUseAutoSubmenuDisplay =
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1354
				(menuNav.get(AUTO_SUBMENU_DISPLAY) && bIsRoot || !bIsRoot),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1355
            submenuShowDelay = menuNav.get("submenuShowDelay"),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1356
			oSubmenu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1357
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1358
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1359
        var showSubmenu = function (delay) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1360
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1361
			menuNav._cancelHideSubmenuTimer();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1362
			menuNav._cancelShowSubmenuTimer();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1363
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1364
			if (!hasVisibleSubmenu(menuLabel)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1365
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1366
				oSubmenu = menuLabel.next();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1367
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1368
				if (oSubmenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1369
					menuNav._hideAllSubmenus(oActiveMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1370
					menuNav._showSubmenuTimer = later(delay, menuNav, menuNav._showMenu, oSubmenu);
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1378
		menuNav._focusItem(menuLabel);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1379
		menuNav._setActiveItem(menuLabel);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1380
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1381
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1382
		if (bUseAutoSubmenuDisplay) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1383
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1384
	        if (menuNav._movingToSubmenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1385
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1386
	            //  If the user is moving diagonally from a submenu to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1387
	            //  another submenu and they then stop and pause on a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1388
	            //  menu label for an amount of time equal to the amount of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1389
	            //  time defined for the display of a submenu then show the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1390
	            //  submenu immediately.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1391
	            //  http://yuilibrary.com/projects/yui3/ticket/2528316
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1392
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1393
	            //Y.message("Pause path");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1394
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1395
	            menuNav._hoverTimer = later(submenuShowDelay, menuNav, function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1396
                    showSubmenu(0);
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
	        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1400
	        else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1401
                showSubmenu(submenuShowDelay);
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1410
	* @method _onMenuLabelMouseOut
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1411
	* @description "mouseout" event handler for a menu label.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1412
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1413
	* @param {Node} menuLabel Node instance representing a menu label.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1414
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1415
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1416
	_onMenuLabelMouseOut: function (menuLabel, event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1417
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1418
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1419
			bIsRoot = menuNav._isRoot(menuNav._activeMenu),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1420
			bUseAutoSubmenuDisplay =
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1421
				(menuNav.get(AUTO_SUBMENU_DISPLAY) && bIsRoot || !bIsRoot),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1422
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1423
			oRelatedTarget = event.relatedTarget,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1424
			oSubmenu = menuLabel.next(),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1425
			hoverTimer = menuNav._hoverTimer;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1426
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1427
        if (hoverTimer) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1428
            hoverTimer.cancel();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1429
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1430
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1431
		menuNav._clearActiveItem();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1432
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1433
		if (bUseAutoSubmenuDisplay) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1434
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1435
			if (menuNav._movingToSubmenu &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1436
					!menuNav._showSubmenuTimer && oSubmenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1437
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1438
				//	If the mouse is moving diagonally toward the submenu and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1439
				//	another submenu isn't in the process of being displayed
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1440
				//	(via a timer), then hide the submenu via a timer to give
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1441
				//	the user some time to reach the submenu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1442
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1443
				menuNav._hideSubmenuTimer =
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1444
					later(menuNav.get("submenuHideDelay"), menuNav,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1445
						menuNav._hideMenu, oSubmenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1446
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1447
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1448
			else if (!menuNav._movingToSubmenu && oSubmenu && (!oRelatedTarget ||
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1449
			        (oRelatedTarget &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1450
			            !oSubmenu.contains(oRelatedTarget) &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1451
			            !oRelatedTarget.compareTo(oSubmenu)))) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1452
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1453
				//	If the mouse is not moving toward the submenu, cancel any
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1454
				//	submenus that might be in the process of being displayed
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1455
				//	(via a timer) and hide this submenu immediately.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1456
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1457
				menuNav._cancelShowSubmenuTimer();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1458
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1459
				menuNav._hideMenu(oSubmenu);
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1469
	* @method _onMenuItemMouseOver
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1470
	* @description "mouseover" event handler for a menuitem.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1471
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1472
	* @param {Node} menuItem Node instance representing a menuitem.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1473
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1474
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1475
	_onMenuItemMouseOver: function (menuItem, event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1476
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1477
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1478
			oActiveMenu = menuNav._activeMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1479
			bIsRoot = menuNav._isRoot(oActiveMenu),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1480
			bUseAutoSubmenuDisplay =
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1481
				(menuNav.get(AUTO_SUBMENU_DISPLAY) && bIsRoot || !bIsRoot);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1482
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1483
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1484
		menuNav._focusItem(menuItem);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1485
		menuNav._setActiveItem(menuItem);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1486
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1487
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1488
		if (bUseAutoSubmenuDisplay && !menuNav._movingToSubmenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1489
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1490
			menuNav._hideAllSubmenus(oActiveMenu);
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1498
	* @method _onMenuItemMouseOut
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1499
	* @description "mouseout" event handler for a menuitem.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1500
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1501
	* @param {Node} menuItem Node instance representing a menuitem.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1502
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1503
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1504
	_onMenuItemMouseOut: function (menuItem, event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1505
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1506
		this._clearActiveItem();
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1512
	* @method _onVerticalMenuKeyDown
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1513
	* @description "keydown" event handler for vertical menus.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1514
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1515
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1516
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1517
	_onVerticalMenuKeyDown: function (event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1518
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1519
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1520
			oActiveMenu = menuNav._activeMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1521
			oRootMenu = menuNav._rootMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1522
			oTarget = event.target,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1523
			bPreventDefault = false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1524
			nKeyCode = event.keyCode,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1525
			oSubmenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1526
			oParentMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1527
			oLI,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1528
			oItem;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1529
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1530
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1531
		switch (nKeyCode) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1532
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1533
			case 37:	//	left arrow
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1534
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1535
				oParentMenu = getParentMenu(oActiveMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1536
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1537
				if (oParentMenu && isHorizontalMenu(oParentMenu)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1538
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1539
					menuNav._hideMenu(oActiveMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1540
					oLI = getPreviousSibling(oActiveMenu.get(PARENT_NODE));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1541
					oItem = getItem(oLI);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1542
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1543
					if (oItem) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1544
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1545
						if (isMenuLabel(oItem)) {	//	Menu label
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1546
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1547
							oSubmenu = oItem.next();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1548
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1549
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1550
							if (oSubmenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1551
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1552
								menuNav._showMenu(oSubmenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1553
								menuNav._focusItem(getFirstItem(oSubmenu));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1554
								menuNav._setActiveItem(getFirstItem(oSubmenu));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1555
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1556
							}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1557
							else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1558
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1559
								menuNav._focusItem(oItem);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1560
								menuNav._setActiveItem(oItem);
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
						}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1565
						else {	//	MenuItem
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1566
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1567
							menuNav._focusItem(oItem);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1568
							menuNav._setActiveItem(oItem);
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
				}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1575
				else if (!menuNav._isRoot(oActiveMenu)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1576
					menuNav._hideMenu(oActiveMenu, true);
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1580
				bPreventDefault = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1581
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1582
			break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1583
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1584
			case 39:	//	right arrow
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1585
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1586
				if (isMenuLabel(oTarget)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1587
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1588
					oSubmenu = oTarget.next();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1589
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1590
					if (oSubmenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1591
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1592
						menuNav._showMenu(oSubmenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1593
						menuNav._focusItem(getFirstItem(oSubmenu));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1594
						menuNav._setActiveItem(getFirstItem(oSubmenu));
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
				}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1599
				else if (isHorizontalMenu(oRootMenu)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1600
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1601
					oSubmenu = menuNav._getTopmostSubmenu(oActiveMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1602
					oLI = getNextSibling(oSubmenu.get(PARENT_NODE));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1603
					oItem = getItem(oLI);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1604
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1605
					menuNav._hideAllSubmenus(oRootMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1606
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1607
					if (oItem) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1608
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1609
						if (isMenuLabel(oItem)) {	//	Menu label
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1610
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1611
							oSubmenu = oItem.next();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1612
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1613
							if (oSubmenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1614
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1615
								menuNav._showMenu(oSubmenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1616
								menuNav._focusItem(getFirstItem(oSubmenu));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1617
								menuNav._setActiveItem(getFirstItem(oSubmenu));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1618
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1619
							}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1620
							else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1621
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1622
								menuNav._focusItem(oItem);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1623
								menuNav._setActiveItem(oItem);
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
						}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1628
						else {	//	MenuItem
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1629
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1630
							menuNav._focusItem(oItem);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1631
							menuNav._setActiveItem(oItem);
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1639
				bPreventDefault = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1640
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1641
			break;
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1646
		if (bPreventDefault) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1647
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1648
			//	Prevent the browser from scrolling the window
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1649
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1650
			event.preventDefault();
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1658
	* @method _onHorizontalMenuKeyDown
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1659
	* @description "keydown" event handler for horizontal menus.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1660
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1661
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1662
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1663
	_onHorizontalMenuKeyDown: function (event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1664
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1665
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1666
			oActiveMenu = menuNav._activeMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1667
			oTarget = event.target,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1668
			oFocusedItem = getItem(oTarget, true),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1669
			bPreventDefault = false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1670
			nKeyCode = event.keyCode,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1671
			oSubmenu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1672
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1673
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1674
		if (nKeyCode === 40) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1675
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1676
			menuNav._hideAllSubmenus(oActiveMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1677
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1678
			if (isMenuLabel(oFocusedItem)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1679
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1680
				oSubmenu = oFocusedItem.next();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1681
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1682
				if (oSubmenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1683
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1684
					menuNav._showMenu(oSubmenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1685
					menuNav._focusItem(getFirstItem(oSubmenu));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1686
					menuNav._setActiveItem(getFirstItem(oSubmenu));
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1690
				bPreventDefault = true;
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1697
		if (bPreventDefault) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1698
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1699
			//	Prevent the browser from scrolling the window
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1700
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1701
			event.preventDefault();
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1708
	//	Generic DOM Event handlers
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1712
	* @method _onMouseMove
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1713
	* @description "mousemove" event handler for the menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1714
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1715
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1716
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1717
	_onMouseMove: function (event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1718
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1719
		var menuNav = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1720
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1721
		//	Using a timer to set the value of the "_currentMouseX" property
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1722
		//	helps improve the reliability of the calculation used to set the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1723
		//	value of the "_movingToSubmenu" property - especially in Opera.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1724
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1725
		later(10, menuNav, function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1726
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1727
			menuNav._currentMouseX = event.pageX;
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1735
	* @method _onMouseOver
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1736
	* @description "mouseover" event handler for the menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1737
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1738
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1739
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1740
	_onMouseOver: function (event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1741
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1742
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1743
			oTarget,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1744
			oMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1745
			oMenuLabel,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1746
			oParentMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1747
			oMenuItem;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1748
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1749
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1750
		if (menuNav._blockMouseEvent) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1751
			menuNav._blockMouseEvent = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1752
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1753
		else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1754
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1755
			oTarget = event.target;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1756
			oMenu = getMenu(oTarget, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1757
			oMenuLabel = getMenuLabel(oTarget, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1758
			oMenuItem = getMenuItem(oTarget, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1759
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1760
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1761
			if (handleMouseOverForNode(oMenu, oTarget)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1762
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1763
				menuNav._onMenuMouseOver(oMenu, event);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1764
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1765
				oMenu[HANDLED_MOUSEOVER] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1766
				oMenu[HANDLED_MOUSEOUT] = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1767
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1768
				oParentMenu = getParentMenu(oMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1769
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1770
				if (oParentMenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1771
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1772
					oParentMenu[HANDLED_MOUSEOUT] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1773
					oParentMenu[HANDLED_MOUSEOVER] = false;
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1779
			if (handleMouseOverForNode(oMenuLabel, oTarget)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1780
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1781
				menuNav._onMenuLabelMouseOver(oMenuLabel, event);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1782
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1783
				oMenuLabel[HANDLED_MOUSEOVER] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1784
				oMenuLabel[HANDLED_MOUSEOUT] = false;
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1788
			if (handleMouseOverForNode(oMenuItem, oTarget)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1789
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1790
				menuNav._onMenuItemMouseOver(oMenuItem, event);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1791
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1792
				oMenuItem[HANDLED_MOUSEOVER] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1793
				oMenuItem[HANDLED_MOUSEOUT] = false;
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1803
	* @method _onMouseOut
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1804
	* @description "mouseout" event handler for the menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1805
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1806
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1807
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1808
	_onMouseOut: function (event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1809
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1810
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1811
			oActiveMenu = menuNav._activeMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1812
			bMovingToSubmenu = false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1813
			oTarget,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1814
			oRelatedTarget,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1815
			oMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1816
			oMenuLabel,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1817
			oSubmenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1818
			oMenuItem;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1819
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1820
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1821
		menuNav._movingToSubmenu =
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1822
					(oActiveMenu && !isHorizontalMenu(oActiveMenu) &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1823
						((event.pageX - 5) > menuNav._currentMouseX));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1824
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1825
		oTarget = event.target;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1826
		oRelatedTarget = event.relatedTarget;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1827
		oMenu = getMenu(oTarget, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1828
		oMenuLabel = getMenuLabel(oTarget, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1829
		oMenuItem = getMenuItem(oTarget, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1830
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1831
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1832
		if (handleMouseOutForNode(oMenuLabel, oRelatedTarget)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1833
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1834
			menuNav._onMenuLabelMouseOut(oMenuLabel, event);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1835
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1836
			oMenuLabel[HANDLED_MOUSEOUT] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1837
			oMenuLabel[HANDLED_MOUSEOVER] = false;
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1841
		if (handleMouseOutForNode(oMenuItem, oRelatedTarget)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1842
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1843
			menuNav._onMenuItemMouseOut(oMenuItem, event);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1844
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1845
			oMenuItem[HANDLED_MOUSEOUT] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1846
			oMenuItem[HANDLED_MOUSEOVER] = false;
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1851
		if (oMenuLabel) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1852
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1853
			oSubmenu = oMenuLabel.next();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1854
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1855
			if (oSubmenu && oRelatedTarget &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1856
				(oRelatedTarget.compareTo(oSubmenu) ||
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1857
					oSubmenu.contains(oRelatedTarget))) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1858
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1859
				bMovingToSubmenu = true;
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1866
		if (handleMouseOutForNode(oMenu, oRelatedTarget) || bMovingToSubmenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1867
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1868
			menuNav._onMenuMouseOut(oMenu, event);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1869
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1870
			oMenu[HANDLED_MOUSEOUT] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1871
			oMenu[HANDLED_MOUSEOVER] = false;
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1879
	* @method _toggleSubmenuDisplay
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1880
	* @description "mousedown," "keydown," and "click" event handler for the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1881
	* menu used to toggle the display of a submenu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1882
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1883
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1884
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1885
	_toggleSubmenuDisplay: function (event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1886
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1887
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1888
			oTarget = event.target,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1889
			oMenuLabel = getMenuLabel(oTarget, true),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1890
			sType = event.type,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1891
			oAnchor,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1892
			oSubmenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1893
			sHref,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1894
			nHashPos,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1895
			nLen,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1896
			sId;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1897
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1898
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1899
		if (oMenuLabel) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1900
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1901
			oAnchor = isAnchor(oTarget) ? oTarget : oTarget.ancestor(isAnchor);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1902
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1903
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1904
			if (oAnchor) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1905
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1906
				//	Need to pass "2" as a second argument to "getAttribute" for
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1907
				//	IE otherwise IE will return a fully qualified URL for the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1908
				//	value of the "href" attribute.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1909
				//	http://msdn.microsoft.com/en-us/library/ms536429(VS.85).aspx
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1910
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1911
				sHref = oAnchor.getAttribute("href", 2);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1912
				nHashPos = sHref.indexOf("#");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1913
				nLen = sHref.length;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1914
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1915
				if (nHashPos === 0 && nLen > 1) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1916
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1917
					sId = sHref.substr(1, nLen);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1918
					oSubmenu = oMenuLabel.next();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1919
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1920
					if (oSubmenu && (oSubmenu.get(ID) === sId)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1921
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1922
						if (sType === MOUSEDOWN || sType === KEYDOWN) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1923
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1924
							if ((UA.opera || UA.gecko || UA.ie) && sType === KEYDOWN && !menuNav._preventClickHandle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1925
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1926
								//	Prevent the browser from following the URL of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1927
								//	the anchor element
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1928
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1929
								menuNav._preventClickHandle = menuNav._rootMenu.on("click", function (event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1930
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1931
									event.preventDefault();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1932
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1933
									menuNav._preventClickHandle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1934
									menuNav._preventClickHandle = null;
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1940
							if (sType == MOUSEDOWN) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1941
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1942
								//	Prevent the target from getting focused by
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1943
								//	default, since the element to be focused will
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1944
								//	be determined by weather or not the submenu
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1945
								//	is visible.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1946
								event.preventDefault();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1947
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1948
								//	FocusManager will attempt to focus any
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1949
								//	descendant that is the target of the mousedown
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1950
								//	event.  Since we want to explicitly control
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1951
	 							//	where focus is going, we need to call
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1952
								//	"stopImmediatePropagation" to stop the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1953
								//	FocusManager from doing its thing.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1954
								event.stopImmediatePropagation();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1955
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1956
								//	The "_focusItem" method relies on the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1957
								//	"_hasFocus" property being set to true.  The
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1958
								//	"_hasFocus" property is normally set via a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1959
								//	"focus" event listener, but since we've
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1960
								//	blocked focus from happening, we need to set
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1961
								//	this property manually.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1962
								menuNav._hasFocus = true;
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1967
							if (menuNav._isRoot(getParentMenu(oTarget))) {	//	Event target is a submenu label in the root menu
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1968
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1969
								//	Menu label toggle functionality
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1970
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1971
								if (hasVisibleSubmenu(oMenuLabel)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1972
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1973
									menuNav._hideMenu(oSubmenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1974
									menuNav._focusItem(oMenuLabel);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1975
									menuNav._setActiveItem(oMenuLabel);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1976
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1977
								}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1978
								else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1979
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1980
									menuNav._hideAllSubmenus(menuNav._rootMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1981
									menuNav._showMenu(oSubmenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1982
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1983
									menuNav._focusItem(getFirstItem(oSubmenu));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1984
									menuNav._setActiveItem(getFirstItem(oSubmenu));
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
							}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1989
							else {	//	Event target is a submenu label within a submenu
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1990
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1991
								if (menuNav._activeItem == oMenuLabel) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1992
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1993
									menuNav._showMenu(oSubmenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1994
									menuNav._focusItem(getFirstItem(oSubmenu));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1995
									menuNav._setActiveItem(getFirstItem(oSubmenu));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1996
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1997
								}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1998
								else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1999
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2000
									if (!oMenuLabel._clickHandle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2001
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2002
										oMenuLabel._clickHandle = oMenuLabel.on("click", function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2003
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2004
											menuNav._hideAllSubmenus(menuNav._rootMenu);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2005
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2006
											menuNav._hasFocus = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2007
											menuNav._clearActiveItem();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2008
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2009
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2010
											oMenuLabel._clickHandle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2011
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2012
											oMenuLabel._clickHandle = null;
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2025
						if (sType === CLICK) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2026
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2027
							//	Prevent the browser from following the URL of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2028
							//	the anchor element
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2029
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2030
							event.preventDefault();
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2047
	* @method _onKeyPress
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2048
	* @description "keypress" event handler for the menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2049
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2050
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2051
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2052
	_onKeyPress: function (event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2053
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2054
		switch (event.keyCode) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2055
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2056
			case 37:	//	left arrow
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2057
			case 38:	//	up arrow
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2058
			case 39:	//	right arrow
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2059
			case 40:	//	down arrow
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2060
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2061
				//	Prevent the browser from scrolling the window
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2062
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2063
				event.preventDefault();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2064
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2065
			break;
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2073
	* @method _onKeyDown
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2074
	* @description "keydown" event handler for the menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2075
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2076
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2077
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2078
	_onKeyDown: function (event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2079
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2080
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2081
			oActiveItem = menuNav._activeItem,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2082
			oTarget = event.target,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2083
			oActiveMenu = getParentMenu(oTarget),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2084
			oSubmenu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2085
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2086
		if (oActiveMenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2087
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2088
			menuNav._activeMenu = oActiveMenu;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2089
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2090
			if (isHorizontalMenu(oActiveMenu)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2091
				menuNav._onHorizontalMenuKeyDown(event);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2092
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2093
			else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2094
				menuNav._onVerticalMenuKeyDown(event);
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2098
			if (event.keyCode === 27) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2099
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2100
				if (!menuNav._isRoot(oActiveMenu)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2101
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2102
					if (UA.opera) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2103
						later(0, menuNav, function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2104
							menuNav._hideMenu(oActiveMenu, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2105
						});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2106
					}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2107
					else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2108
						menuNav._hideMenu(oActiveMenu, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2109
					}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2110
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2111
					event.stopPropagation();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2112
					menuNav._blockMouseEvent = UA.gecko ? true : false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2113
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2114
				}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2115
				else if (oActiveItem) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2116
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2117
					if (isMenuLabel(oActiveItem) &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2118
							hasVisibleSubmenu(oActiveItem)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2119
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2120
						oSubmenu = oActiveItem.next();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2121
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2122
						if (oSubmenu) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2123
							menuNav._hideMenu(oSubmenu);
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
					}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2127
					else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2128
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2129
						menuNav._focusManager.blur();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2130
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2131
						//	This is necessary for Webkit since blurring the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2132
						//	active menuitem won't result in the document
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2133
						//	gaining focus, meaning the that _onDocFocus
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2134
						//	listener won't clear the active menuitem.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2135
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2136
						menuNav._clearActiveItem();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2137
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2138
						menuNav._hasFocus = false;
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
	/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2151
	* @method _onDocMouseDown
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2152
	* @description "mousedown" event handler for the owner document of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2153
	* the menu.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2154
	* @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2155
	* @param {Object} event Object representing the DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2156
	*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2157
	_onDocMouseDown: function (event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2158
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2159
		var menuNav = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2160
			oRoot = menuNav._rootMenu,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2161
			oTarget = event.target;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2162
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2163
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2164
		if (!(oRoot.compareTo(oTarget) || oRoot.contains(oTarget))) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2165
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2166
			menuNav._hideAllSubmenus(oRoot);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2167
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2168
			//	Document doesn't receive focus in Webkit when the user mouses
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2169
			//	down on it, so the "_hasFocus" property won't get set to the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2170
			//	correct value.  The following line corrects the problem.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2171
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2172
			if (UA.webkit) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2173
				menuNav._hasFocus = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2174
				menuNav._clearActiveItem();
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2184
Y.namespace('Plugin');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2185
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2186
Y.Plugin.NodeMenuNav = NodeMenuNav;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2187
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2188
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2189
}, '@VERSION@', {"requires": ["node", "classnamemanager", "plugin", "node-focusmanager"], "skinnable": true});