alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  
" + "

Struts example source code file (Menu2.js)

This example Struts source code file (Menu2.js) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - Struts tags/keywords

bl, bl, mouseevents, mouseevents, tl, tl, tr, tr, untitled

The Struts Menu2.js source code

/*
	Copyright (c) 2004-2006, The Dojo Foundation
	All Rights Reserved.

	Licensed under the Academic Free License version 2.1 or above OR the
	modified BSD license. For more information on Dojo licensing, see:

		http://dojotoolkit.org/community/licensing.shtml
*/



dojo.provide("dojo.widget.Menu2");
dojo.require("dojo.widget.PopupContainer");
dojo.declare("dojo.widget.MenuBase", null, function () {
	this.eventNames = {open:""};
}, {isContainer:true, isMenu:true, eventNaming:"default", templateCssString:"\n.dojoPopupMenu2 {\n\tposition: absolute;\n\tborder: 1px solid #7298d0;\n\tbackground:#85aeec url(images/soriaMenuBg.gif) repeat-x bottom left !important;\n\tpadding: 1px;\n\tmargin-top: 1px;\n\tmargin-bottom: 1px;\n}\n\n.dojoMenuItem2{\n\twhite-space: nowrap;\n\tfont: menu;\n\tmargin: 0;\n}\n\n.dojoMenuItem2Hover {\n\tbackground-color: #D2E4FD;\n\tcursor:pointer;\n\tcursor:hand;\n}\n\n.dojoMenuItem2Icon {\n\tposition: relative;\n\tbackground-position: center center;\n\tbackground-repeat: no-repeat;\n\twidth: 16px;\n\theight: 16px;\n\tpadding-right: 3px;\n}\n\n.dojoMenuItem2Label {\n\tposition: relative;\n\tvertical-align: middle;\n}\n\n/* main label text */\n.dojoMenuItem2Label {\n\tposition: relative;\n\tvertical-align: middle;\n}\n\n.dojoMenuItem2Accel {\n\tposition: relative;\n\tvertical-align: middle;\n\tpadding-left: 3px;\n}\n\n.dojoMenuItem2Disabled .dojoMenuItem2Label,\n.dojoMenuItem2Disabled .dojoMenuItem2Accel {\n\tcolor: #607a9e;\n}\n\n.dojoMenuItem2Submenu {\n\tposition: relative;\n\tbackground-position: center center;\n\tbackground-repeat: no-repeat;\n\tbackground-image: url(images/submenu_off.gif);\n\twidth: 5px;\n\theight: 9px;\n\tpadding-left: 3px;\n}\n.dojoMenuItem2Hover .dojoMenuItem2Submenu {\n\tbackground-image: url(images/submenu_on.gif);\n}\n\n.dojoMenuItem2Disabled .dojoMenuItem2Submenu {\n\tbackground-image: url(images/submenu_disabled.gif);\n}\n\n.dojoMenuSeparator2 {\n\tfont-size: 1px;\n\tmargin: 0;\n}\n\n.dojoMenuSeparator2Top {\n\theight: 50%;\n\tborder-bottom: 1px solid #7a98c4;\n\tmargin: 0px 2px;\n\tfont-size: 1px;\n}\n\n.dojoMenuSeparator2Bottom {\n\theight: 50%;\n\tborder-top: 1px solid #c9deff;\n\tmargin: 0px 2px;\n\tfont-size: 1px;\n}\n\n.dojoMenuBar2 {\n\tbackground:#85aeec url(images/soriaBarBg.gif) repeat-x top left;\n\t/*border-bottom:1px solid #6b9fec;*/\n\tpadding: 1px;\n}\n\n.dojoMenuBar2 .dojoMenuItem2 {\n\twhite-space: nowrap;\n\tfont: menu;\n\tmargin: 0;\n\tposition: relative;\n\tvertical-align: middle;\n\tz-index: 1;\n\tpadding: 3px 8px;\n\tdisplay: inline;/* needed in khtml to display correctly */\n\tdisplay: -moz-inline-box;/* needed in firefox */\n\tcursor:pointer;\n\tcursor:hand;\n}\n\n.dojoMenuBar2 .dojoMenuItem2Hover {\n\tbackground-color:#d2e4fd;\n}\n\n.dojoMenuBar2 .dojoMenuItem2Disabled span {\n\tcolor: #4f6582;\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/Menu2.css"), submenuDelay:500, initialize:function (args, frag) {
	if (this.eventNaming == "default") {
		for (var eventName in this.eventNames) {
			this.eventNames[eventName] = this.widgetId + "/" + eventName;
		}
	}
}, _moveToNext:function (evt) {
	this._highlightOption(1);
	return true;
}, _moveToPrevious:function (evt) {
	this._highlightOption(-1);
	return true;
}, _moveToParentMenu:function (evt) {
	if (this._highlighted_option && this.parentMenu) {
		if (evt._menu2UpKeyProcessed) {
			return true;
		} else {
			this._highlighted_option.onUnhover();
			this.closeSubmenu();
			evt._menu2UpKeyProcessed = true;
		}
	}
	return false;
}, _moveToChildMenu:function (evt) {
	if (this._highlighted_option && this._highlighted_option.submenuId) {
		this._highlighted_option._onClick(true);
		return true;
	}
	return false;
}, _selectCurrentItem:function (evt) {
	if (this._highlighted_option) {
		this._highlighted_option._onClick();
		return true;
	}
	return false;
}, processKey:function (evt) {
	if (evt.ctrlKey || evt.altKey || !evt.key) {
		return false;
	}
	var rval = false;
	switch (evt.key) {
	  case evt.KEY_DOWN_ARROW:
		rval = this._moveToNext(evt);
		break;
	  case evt.KEY_UP_ARROW:
		rval = this._moveToPrevious(evt);
		break;
	  case evt.KEY_RIGHT_ARROW:
		rval = this._moveToChildMenu(evt);
		break;
	  case evt.KEY_LEFT_ARROW:
		rval = this._moveToParentMenu(evt);
		break;
	  case " ":
	  case evt.KEY_ENTER:
		if (rval = this._selectCurrentItem(evt)) {
			break;
		}
	  case evt.KEY_ESCAPE:
	  case evt.KEY_TAB:
		this.close(true);
		rval = true;
		break;
	}
	return rval;
}, _findValidItem:function (dir, curItem) {
	if (curItem) {
		curItem = dir > 0 ? curItem.getNextSibling() : curItem.getPreviousSibling();
	}
	for (var i = 0; i < this.children.length; ++i) {
		if (!curItem) {
			curItem = dir > 0 ? this.children[0] : this.children[this.children.length - 1];
		}
		if (curItem.onHover && curItem.isShowing()) {
			return curItem;
		}
		curItem = dir > 0 ? curItem.getNextSibling() : curItem.getPreviousSibling();
	}
}, _highlightOption:function (dir) {
	var item;
	if ((!this._highlighted_option)) {
		item = this._findValidItem(dir);
	} else {
		item = this._findValidItem(dir, this._highlighted_option);
	}
	if (item) {
		if (this._highlighted_option) {
			this._highlighted_option.onUnhover();
		}
		item.onHover();
		dojo.html.scrollIntoView(item.domNode);
		try {
			var node = dojo.html.getElementsByClass("dojoMenuItem2Label", item.domNode)[0];
			node.focus();
		}
		catch (e) {
		}
	}
}, onItemClick:function (item) {
}, closeSubmenu:function (force) {
	if (this.currentSubmenu == null) {
		return;
	}
	this.currentSubmenu.close(force);
	this.currentSubmenu = null;
	this.currentSubmenuTrigger.is_open = false;
	this.currentSubmenuTrigger._closedSubmenu(force);
	this.currentSubmenuTrigger = null;
}});
dojo.widget.defineWidget("dojo.widget.PopupMenu2", [dojo.widget.HtmlWidget, dojo.widget.PopupContainerBase, dojo.widget.MenuBase], function () {
	this.targetNodeIds = [];
}, {templateString:"<table class=\"dojoPopupMenu2\" border=0 cellspacing=0 cellpadding=0 style=\"display: none; position: absolute;\">" + "
", submenuOverlap:5, contextMenuForWindow:false, parentMenu:null, postCreate:function () { if (this.contextMenuForWindow) { var doc = dojo.body(); this.bindDomNode(doc); } else { if (this.targetNodeIds.length > 0) { dojo.lang.forEach(this.targetNodeIds, this.bindDomNode, this); } } this._subscribeSubitemsOnOpen(); }, _subscribeSubitemsOnOpen:function () { var subItems = this.getChildrenOfType(dojo.widget.MenuItem2); for (var i = 0; i < subItems.length; i++) { dojo.event.topic.subscribe(this.eventNames.open, subItems[i], "menuOpen"); } }, getTopOpenEvent:function () { var menu = this; while (menu.parentMenu) { menu = menu.parentMenu; } return menu.openEvent; }, bindDomNode:function (node) { node = dojo.byId(node); var win = dojo.html.getElementWindow(node); if (dojo.html.isTag(node, "iframe") == "iframe") { win = dojo.html.iframeContentWindow(node); node = dojo.withGlobal(win, dojo.body); } dojo.widget.Menu2.OperaAndKonqFixer.fixNode(node); dojo.event.kwConnect({srcObj:node, srcFunc:"oncontextmenu", targetObj:this, targetFunc:"onOpen", once:true}); if (dojo.render.html.moz && win.document.designMode.toLowerCase() == "on") { dojo.event.browser.addListener(node, "contextmenu", dojo.lang.hitch(this, "onOpen")); } dojo.widget.PopupManager.registerWin(win); }, unBindDomNode:function (nodeName) { var node = dojo.byId(nodeName); dojo.event.kwDisconnect({srcObj:node, srcFunc:"oncontextmenu", targetObj:this, targetFunc:"onOpen", once:true}); dojo.widget.Menu2.OperaAndKonqFixer.cleanNode(node); }, _openAsSubmenu:function (parent, explodeSrc, orient) { if (this.isShowingNow) { return; } this.parentMenu = parent; this.open(explodeSrc, parent, explodeSrc, orient); }, close:function (force) { if (this.animationInProgress) { dojo.widget.PopupContainerBase.prototype.close.call(this, force); return; } if (this._highlighted_option) { this._highlighted_option.onUnhover(); } dojo.widget.PopupContainerBase.prototype.close.call(this, force); this.parentMenu = null; }, closeAll:function (force) { if (this.parentMenu) { this.parentMenu.closeAll(force); } else { this.close(force); } }, _openSubmenu:function (submenu, from_item) { submenu._openAsSubmenu(this, from_item.arrow, {"TR":"TL", "TL":"TR"}); this.currentSubmenu = submenu; this.currentSubmenuTrigger = from_item; this.currentSubmenuTrigger.is_open = true; }, focus:function () { if (this.currentSubmenuTrigger) { if (this.currentSubmenuTrigger.caption) { try { this.currentSubmenuTrigger.caption.focus(); } catch (e) { } } else { try { this.currentSubmenuTrigger.domNode.focus(); } catch (e) { } } } }, onOpen:function (e) { this.openEvent = e; if (e["target"]) { this.openedForWindow = dojo.html.getElementWindow(e.target); } else { this.openedForWindow = null; } var x = e.pageX, y = e.pageY; var win = dojo.html.getElementWindow(e.target); var iframe = win._frameElement || win.frameElement; if (iframe) { var cood = dojo.html.abs(iframe, true); x += cood.x - dojo.withGlobal(win, dojo.html.getScroll).left; y += cood.y - dojo.withGlobal(win, dojo.html.getScroll).top; } this.open(x, y, null, [x, y]); dojo.event.browser.stopEvent(e); }}); dojo.widget.defineWidget("dojo.widget.MenuItem2", dojo.widget.HtmlWidget, function () { this.eventNames = {engage:""}; }, {templateString:"<tr class=\"dojoMenuItem2\" dojoAttachEvent=\"onMouseOver: onHover; onMouseOut: onUnhover; onClick: _onClick; onKey:onKey;\">" + "
" + "${this.caption}" + "${this.accelKey}" + "
" + "", is_hovering:false, hover_timer:null, is_open:false, topPosition:0, caption:"Untitled", accelKey:"", iconSrc:"", disabledClass:"dojoMenuItem2Disabled", iconClass:"dojoMenuItem2Icon", submenuId:"", eventNaming:"default", highlightClass:"dojoMenuItem2Hover", postMixInProperties:function () { this.iconStyle = ""; if (this.iconSrc) { if ((this.iconSrc.toLowerCase().substring(this.iconSrc.length - 4) == ".png") && (dojo.render.html.ie55 || dojo.render.html.ie60)) { this.iconStyle = "filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.iconSrc + "', sizingMethod='image')"; } else { this.iconStyle = "background-image: url(" + this.iconSrc + ")"; } } this.arrowDisplay = this.submenuId ? "block" : "none"; dojo.widget.MenuItem2.superclass.postMixInProperties.apply(this, arguments); }, fillInTemplate:function () { dojo.html.disableSelection(this.domNode); if (this.disabled) { this.setDisabled(true); } if (this.eventNaming == "default") { for (var eventName in this.eventNames) { this.eventNames[eventName] = this.widgetId + "/" + eventName; } } }, onHover:function () { this.onUnhover(); if (this.is_hovering) { return; } if (this.is_open) { return; } if (this.parent._highlighted_option) { this.parent._highlighted_option.onUnhover(); } this.parent.closeSubmenu(); this.parent._highlighted_option = this; dojo.widget.PopupManager.setFocusedMenu(this.parent); this._highlightItem(); if (this.is_hovering) { this._stopSubmenuTimer(); } this.is_hovering = true; this._startSubmenuTimer(); }, onUnhover:function () { if (!this.is_open) { this._unhighlightItem(); } this.is_hovering = false; this.parent._highlighted_option = null; if (this.parent.parentMenu) { dojo.widget.PopupManager.setFocusedMenu(this.parent.parentMenu); } this._stopSubmenuTimer(); }, _onClick:function (focus) { var displayingSubMenu = false; if (this.disabled) { return false; } if (this.submenuId) { if (!this.is_open) { this._stopSubmenuTimer(); this._openSubmenu(); } displayingSubMenu = true; } else { this.onUnhover(); this.parent.closeAll(true); } this.onClick(); dojo.event.topic.publish(this.eventNames.engage, this); if (displayingSubMenu && focus) { dojo.widget.getWidgetById(this.submenuId)._highlightOption(1); } return; }, onClick:function () { this.parent.onItemClick(this); }, _highlightItem:function () { dojo.html.addClass(this.domNode, this.highlightClass); }, _unhighlightItem:function () { dojo.html.removeClass(this.domNode, this.highlightClass); }, _startSubmenuTimer:function () { this._stopSubmenuTimer(); if (this.disabled) { return; } var self = this; var closure = function () { return function () { self._openSubmenu(); }; }(); this.hover_timer = dojo.lang.setTimeout(closure, this.parent.submenuDelay); }, _stopSubmenuTimer:function () { if (this.hover_timer) { dojo.lang.clearTimeout(this.hover_timer); this.hover_timer = null; } }, _openSubmenu:function () { if (this.disabled) { return; } this.parent.closeSubmenu(); var submenu = dojo.widget.getWidgetById(this.submenuId); if (submenu) { this.parent._openSubmenu(submenu, this); } }, _closedSubmenu:function () { this.onUnhover(); }, setDisabled:function (value) { this.disabled = value; if (this.disabled) { dojo.html.addClass(this.domNode, this.disabledClass); } else { dojo.html.removeClass(this.domNode, this.disabledClass); } }, enable:function () { this.setDisabled(false); }, disable:function () { this.setDisabled(true); }, menuOpen:function (message) { }}); dojo.widget.defineWidget("dojo.widget.MenuSeparator2", dojo.widget.HtmlWidget, {templateString:"<tr class=\"dojoMenuSeparator2\">" + "
" + "
" + "", postCreate:function () { dojo.html.disableSelection(this.domNode); }}); dojo.widget.defineWidget("dojo.widget.MenuBar2", [dojo.widget.HtmlWidget, dojo.widget.MenuBase], {menuOverlap:2, templateString:"<div class=\"dojoMenuBar2\" dojoAttachPoint=\"containerNode\" tabIndex=\"0\">
", close:function (force) { if (this._highlighted_option) { this._highlighted_option.onUnhover(); } this.closeSubmenu(force); }, closeAll:function (force) { this.close(force); }, processKey:function (evt) { if (evt.ctrlKey || evt.altKey) { return false; } var rval = false; switch (evt.key) { case evt.KEY_DOWN_ARROW: rval = this._moveToChildMenu(evt); break; case evt.KEY_UP_ARROW: rval = this._moveToParentMenu(evt); break; case evt.KEY_RIGHT_ARROW: rval = this._moveToNext(evt); break; case evt.KEY_LEFT_ARROW: rval = this._moveToPrevious(evt); break; default: rval = dojo.widget.MenuBar2.superclass.processKey.apply(this, arguments); break; } return rval; }, postCreate:function () { dojo.widget.MenuBar2.superclass.postCreate.apply(this, arguments); this.isShowingNow = true; }, _openSubmenu:function (submenu, from_item) { submenu._openAsSubmenu(this, from_item.domNode, {"BL":"TL", "TL":"BL"}); this.currentSubmenu = submenu; this.currentSubmenuTrigger = from_item; this.currentSubmenuTrigger.is_open = true; }}); dojo.widget.defineWidget("dojo.widget.MenuBarItem2", dojo.widget.MenuItem2, {templateString:"<span class=\"dojoMenuItem2\" dojoAttachEvent=\"onMouseOver: onHover; onMouseOut: onUnhover; onClick: _onClick;\">${this.caption}"}); dojo.widget.Menu2.OperaAndKonqFixer = new function () { var implement = true; var delfunc = false; if (!dojo.lang.isFunction(dojo.doc().oncontextmenu)) { dojo.doc().oncontextmenu = function () { implement = false; delfunc = true; }; } if (dojo.doc().createEvent) { try { var e = dojo.doc().createEvent("MouseEvents"); e.initMouseEvent("contextmenu", 1, 1, dojo.global(), 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, null); dojo.doc().dispatchEvent(e); } catch (e) { } } else { implement = false; } if (delfunc) { delete dojo.doc().oncontextmenu; } this.fixNode = function (node) { if (implement) { if (!dojo.lang.isFunction(node.oncontextmenu)) { node.oncontextmenu = function (e) { }; } if (dojo.render.html.opera) { node._menufixer_opera = function (e) { if (e.ctrlKey) { this.oncontextmenu(e); } }; dojo.event.connect(node, "onclick", node, "_menufixer_opera"); } else { node._menufixer_konq = function (e) { if (e.button == 2) { e.preventDefault(); this.oncontextmenu(e); } }; dojo.event.connect(node, "onmousedown", node, "_menufixer_konq"); } } }; this.cleanNode = function (node) { if (implement) { if (node._menufixer_opera) { dojo.event.disconnect(node, "onclick", node, "_menufixer_opera"); delete node._menufixer_opera; } else { if (node._menufixer_konq) { dojo.event.disconnect(node, "onmousedown", node, "_menufixer_konq"); delete node._menufixer_konq; } } if (node.oncontextmenu) { delete node.oncontextmenu; } } }; };

Other Struts examples (source code examples)

Here is a short list of links related to this Struts Menu2.js source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.