Menu2.js
资源名称:oa.rar [点击查看]
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:17k
源码类别:
OA系统
开发平台:
Java
- /*
- 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 {ntposition: absolute;ntborder: 1px solid #7298d0;ntbackground:#85aeec url(images/soriaMenuBg.gif) repeat-x bottom left !important;ntpadding: 1px;ntmargin-top: 1px;ntmargin-bottom: 1px;n}nn.dojoMenuItem2{ntwhite-space: nowrap;ntfont: menu;ntmargin: 0;n}nn.dojoMenuItem2Hover {ntbackground-color: #D2E4FD;ntcursor:pointer;ntcursor:hand;n}nn.dojoMenuItem2Icon {ntposition: relative;ntbackground-position: center center;ntbackground-repeat: no-repeat;ntwidth: 16px;ntheight: 16px;ntpadding-right: 3px;n}nn.dojoMenuItem2Label {ntposition: relative;ntvertical-align: middle;n}nn/* main label text */n.dojoMenuItem2Label {ntposition: relative;ntvertical-align: middle;n}nn.dojoMenuItem2Accel {ntposition: relative;ntvertical-align: middle;ntpadding-left: 3px;n}nn.dojoMenuItem2Disabled .dojoMenuItem2Label,n.dojoMenuItem2Disabled .dojoMenuItem2Accel {ntcolor: #607a9e;n}nn.dojoMenuItem2Submenu {ntposition: relative;ntbackground-position: center center;ntbackground-repeat: no-repeat;ntbackground-image: url(images/submenu_off.gif);ntwidth: 5px;ntheight: 9px;ntpadding-left: 3px;n}n.dojoMenuItem2Hover .dojoMenuItem2Submenu {ntbackground-image: url(images/submenu_on.gif);n}nn.dojoMenuItem2Disabled .dojoMenuItem2Submenu {ntbackground-image: url(images/submenu_disabled.gif);n}nn.dojoMenuSeparator2 {ntfont-size: 1px;ntmargin: 0;n}nn.dojoMenuSeparator2Top {ntheight: 50%;ntborder-bottom: 1px solid #7a98c4;ntmargin: 0px 2px;ntfont-size: 1px;n}nn.dojoMenuSeparator2Bottom {ntheight: 50%;ntborder-top: 1px solid #c9deff;ntmargin: 0px 2px;ntfont-size: 1px;n}nn.dojoMenuBar2 {ntbackground:#85aeec url(images/soriaBarBg.gif) repeat-x top left;nt/*border-bottom:1px solid #6b9fec;*/ntpadding: 1px;n}nn.dojoMenuBar2 .dojoMenuItem2 {ntwhite-space: nowrap;ntfont: menu;ntmargin: 0;ntposition: relative;ntvertical-align: middle;ntz-index: 1;ntpadding: 3px 8px;ntdisplay: inline;/* needed in khtml to display correctly */ntdisplay: -moz-inline-box;/* needed in firefox */ntcursor:pointer;ntcursor:hand;n}nn.dojoMenuBar2 .dojoMenuItem2Hover {ntbackground-color:#d2e4fd;n}nn.dojoMenuBar2 .dojoMenuItem2Disabled span {ntcolor: #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;">" + "<tbody dojoAttachPoint="containerNode"></tbody>" + "</table>", 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;">" + "<td><div class="${this.iconClass}" style="${this.iconStyle}"></div></td>" + "<td tabIndex="-1" class="dojoMenuItem2Label" dojoAttachPoint="caption">${this.caption}</td>" + "<td class="dojoMenuItem2Accel">${this.accelKey}</td>" + "<td><div class="dojoMenuItem2Submenu" style="display:${this.arrowDisplay};" dojoAttachPoint="arrow"></div></td>" + "</tr>", 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"><td colspan=4>" + "<div class="dojoMenuSeparator2Top"></div>" + "<div class="dojoMenuSeparator2Bottom"></div>" + "</td></tr>", 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"></div>", 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}</span>"});
- 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;
- }
- }
- };
- };