aboutsummaryrefslogtreecommitdiffstats
path: root/tests/visual/menu/menubar.js
diff options
context:
space:
mode:
Diffstat (limited to 'tests/visual/menu/menubar.js')
-rw-r--r--tests/visual/menu/menubar.js93
1 files changed, 93 insertions, 0 deletions
diff --git a/tests/visual/menu/menubar.js b/tests/visual/menu/menubar.js
new file mode 100644
index 000000000..a6bf636e0
--- /dev/null
+++ b/tests/visual/menu/menubar.js
@@ -0,0 +1,93 @@
+/*
+ * jQuery UI flyout menu
+ * - written for jQuery UI 1.9 milestone 2 using the widget factory
+ *
+ * Copyright (c) 2010 Michael Lang, http://nexul.com/
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ */
+(function($) {
+
+$.widget("ui.menubar", {
+ _create: function() {
+ var self = this;
+ var items = this.element.children("button, a");
+ items.next("ul").each(function(i, elm) {
+ $(elm).flyoutmenu({
+ select: self.options.select
+ }).hide().addClass("ui-menu-flyout").keydown(function(event) {
+ var menu = $(this);
+ if (menu.is(":hidden"))
+ return;
+ event.stopPropagation();
+ switch (event.keyCode) {
+ case $.ui.keyCode.LEFT:
+ self.left(event);
+ event.preventDefault();
+ break;
+ case $.ui.keyCode.RIGHT:
+ self.right(event);
+ event.preventDefault();
+ break;
+ case $.ui.keyCode.TAB:
+ self[ event.shiftKey ? "left" : "right" ]( event );
+ event.preventDefault();
+ break;
+ };
+ });
+ });
+ items.each(function() {
+ var input = $(this),
+ menu = input.next("ul");
+ input.bind("click focus mouseenter", function(event) {
+ if (menu.length && (!/^mouse/.test(event.type) || self.active && self.active.is(":visible") )) {
+ self._open(event, menu);
+ }
+ event.preventDefault();
+ event.stopPropagation();
+ }).button({
+ icons: {
+ secondary: menu.length ? 'ui-icon-triangle-1-s' : ''
+ }
+ });
+ });
+ $(document).click(function() {
+ !$(event.target).closest(".ui-menubar").length && items.next("ul").hide();
+ });
+ },
+
+ _open: function(event, menu) {
+ this.active && this.active.flyoutmenu("hide");
+ this.active = menu.flyoutmenu("show").css({
+ position: "absolute",
+ top: 0,
+ left: 0
+ }).position({
+ my: "left top",
+ at: "left bottom",
+ offset: "0 -1",
+ of: menu.prev()
+ }).focus();
+ },
+
+ left: function(event) {
+ var prev = this.active.prevAll( ".ui-menu-flyout" ).eq( 0 );
+ if (prev.length) {
+ this._open(event, prev);
+ } else {
+ this._open(event, this.element.children(".ui-menu-flyout:last"));
+ }
+ },
+
+ right: function(event) {
+ var next = this.active.nextAll( ".ui-menu-flyout" ).eq( 0 );
+ if (next.length) {
+ this._open(event, next);
+ } else {
+ this._open(event, this.element.children(".ui-menu-flyout:first"));
+ }
+ }
+});
+
+}(jQuery));