⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 popupcontainer.js

📁 初学者
💻 JS
字号:
/*	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.PopupContainer");dojo.require("dojo.html.style");dojo.require("dojo.html.layout");dojo.require("dojo.html.selection");dojo.require("dojo.html.iframe");dojo.require("dojo.event.*");dojo.require("dojo.widget.*");dojo.require("dojo.widget.HtmlWidget");dojo.declare("dojo.widget.PopupContainerBase", null, function () {	this.queueOnAnimationFinish = [];}, {isShowingNow:false, currentSubpopup:null, beginZIndex:1000, parentPopup:null, parent:null, popupIndex:0, aroundBox:dojo.html.boxSizing.BORDER_BOX, openedForWindow:null, processKey:function (evt) {	return false;}, applyPopupBasicStyle:function () {	with (this.domNode.style) {		display = "none";		position = "absolute";	}}, aboutToShow:function () {}, open:function (x, y, parent, explodeSrc, orient, padding) {	if (this.isShowingNow) {		return;	}	if (this.animationInProgress) {		this.queueOnAnimationFinish.push(this.open, arguments);		return;	}	this.aboutToShow();	var around = false, node, aroundOrient;	if (typeof x == "object") {		node = x;		aroundOrient = explodeSrc;		explodeSrc = parent;		parent = y;		around = true;	}	this.parent = parent;	dojo.body().appendChild(this.domNode);	explodeSrc = explodeSrc || parent["domNode"] || [];	var parentPopup = null;	this.isTopLevel = true;	while (parent) {		if (parent !== this && (parent.setOpenedSubpopup != undefined && parent.applyPopupBasicStyle != undefined)) {			parentPopup = parent;			this.isTopLevel = false;			parentPopup.setOpenedSubpopup(this);			break;		}		parent = parent.parent;	}	this.parentPopup = parentPopup;	this.popupIndex = parentPopup ? parentPopup.popupIndex + 1 : 1;	if (this.isTopLevel) {		var button = dojo.html.isNode(explodeSrc) ? explodeSrc : null;		dojo.widget.PopupManager.opened(this, button);	}	if (this.isTopLevel && !dojo.withGlobal(this.openedForWindow || dojo.global(), dojo.html.selection.isCollapsed)) {		this._bookmark = dojo.withGlobal(this.openedForWindow || dojo.global(), dojo.html.selection.getBookmark);	} else {		this._bookmark = null;	}	if (explodeSrc instanceof Array) {		explodeSrc = {left:explodeSrc[0], top:explodeSrc[1], width:0, height:0};	}	with (this.domNode.style) {		display = "";		zIndex = this.beginZIndex + this.popupIndex;	}	if (around) {		this.move(node, padding, aroundOrient);	} else {		this.move(x, y, padding, orient);	}	this.domNode.style.display = "none";	this.explodeSrc = explodeSrc;	this.show();	this.isShowingNow = true;}, move:function (x, y, padding, orient) {	var around = (typeof x == "object");	if (around) {		var aroundOrient = padding;		var node = x;		padding = y;		if (!aroundOrient) {			aroundOrient = {"BL":"TL", "TL":"BL"};		}		dojo.html.placeOnScreenAroundElement(this.domNode, node, padding, this.aroundBox, aroundOrient);	} else {		if (!orient) {			orient = "TL,TR,BL,BR";		}		dojo.html.placeOnScreen(this.domNode, x, y, padding, true, orient);	}}, close:function (force) {	if (force) {		this.domNode.style.display = "none";	}	if (this.animationInProgress) {		this.queueOnAnimationFinish.push(this.close, []);		return;	}	this.closeSubpopup(force);	this.hide();	if (this.bgIframe) {		this.bgIframe.hide();		this.bgIframe.size({left:0, top:0, width:0, height:0});	}	if (this.isTopLevel) {		dojo.widget.PopupManager.closed(this);	}	this.isShowingNow = false;	if (this.parent) {		setTimeout(dojo.lang.hitch(this, function () {			try {				if (this.parent["focus"]) {					this.parent.focus();				} else {					this.parent.domNode.focus();				}			}			catch (e) {				dojo.debug("No idea how to focus to parent", e);			}		}), 10);	}	if (this._bookmark && dojo.withGlobal(this.openedForWindow || dojo.global(), dojo.html.selection.isCollapsed)) {		if (this.openedForWindow) {			this.openedForWindow.focus();		}		try {			dojo.withGlobal(this.openedForWindow || dojo.global(), "moveToBookmark", dojo.html.selection, [this._bookmark]);		}		catch (e) {		}	}	this._bookmark = null;}, closeAll:function (force) {	if (this.parentPopup) {		this.parentPopup.closeAll(force);	} else {		this.close(force);	}}, setOpenedSubpopup:function (popup) {	this.currentSubpopup = popup;}, closeSubpopup:function (force) {	if (this.currentSubpopup == null) {		return;	}	this.currentSubpopup.close(force);	this.currentSubpopup = null;}, onShow:function () {	dojo.widget.PopupContainer.superclass.onShow.apply(this, arguments);	this.openedSize = {w:this.domNode.style.width, h:this.domNode.style.height};	if (dojo.render.html.ie) {		if (!this.bgIframe) {			this.bgIframe = new dojo.html.BackgroundIframe();			this.bgIframe.setZIndex(this.domNode);		}		this.bgIframe.size(this.domNode);		this.bgIframe.show();	}	this.processQueue();}, processQueue:function () {	if (!this.queueOnAnimationFinish.length) {		return;	}	var func = this.queueOnAnimationFinish.shift();	var args = this.queueOnAnimationFinish.shift();	func.apply(this, args);}, onHide:function () {	dojo.widget.HtmlWidget.prototype.onHide.call(this);	if (this.openedSize) {		with (this.domNode.style) {			width = this.openedSize.w;			height = this.openedSize.h;		}	}	this.processQueue();}});dojo.widget.defineWidget("dojo.widget.PopupContainer", [dojo.widget.HtmlWidget, dojo.widget.PopupContainerBase], {isContainer:true, fillInTemplate:function () {	this.applyPopupBasicStyle();	dojo.widget.PopupContainer.superclass.fillInTemplate.apply(this, arguments);}});dojo.widget.PopupManager = new function () {	this.currentMenu = null;	this.currentButton = null;	this.currentFocusMenu = null;	this.focusNode = null;	this.registeredWindows = [];	this.registerWin = function (win) {		if (!win.__PopupManagerRegistered) {			dojo.event.connect(win.document, "onmousedown", this, "onClick");			dojo.event.connect(win, "onscroll", this, "onClick");			dojo.event.connect(win.document, "onkey", this, "onKey");			win.__PopupManagerRegistered = true;			this.registeredWindows.push(win);		}	};	this.registerAllWindows = function (targetWindow) {		if (!targetWindow) {			targetWindow = dojo.html.getDocumentWindow(window.top && window.top.document || window.document);		}		this.registerWin(targetWindow);		for (var i = 0; i < targetWindow.frames.length; i++) {			try {				var win = dojo.html.getDocumentWindow(targetWindow.frames[i].document);				if (win) {					this.registerAllWindows(win);				}			}			catch (e) {			}		}	};	this.unRegisterWin = function (win) {		if (win.__PopupManagerRegistered) {			dojo.event.disconnect(win.document, "onmousedown", this, "onClick");			dojo.event.disconnect(win, "onscroll", this, "onClick");			dojo.event.disconnect(win.document, "onkey", this, "onKey");			win.__PopupManagerRegistered = false;		}	};	this.unRegisterAllWindows = function () {		for (var i = 0; i < this.registeredWindows.length; ++i) {			this.unRegisterWin(this.registeredWindows[i]);		}		this.registeredWindows = [];	};	dojo.addOnLoad(this, "registerAllWindows");	dojo.addOnUnload(this, "unRegisterAllWindows");	this.closed = function (menu) {		if (this.currentMenu == menu) {			this.currentMenu = null;			this.currentButton = null;			this.currentFocusMenu = null;		}	};	this.opened = function (menu, button) {		if (menu == this.currentMenu) {			return;		}		if (this.currentMenu) {			this.currentMenu.close();		}		this.currentMenu = menu;		this.currentFocusMenu = menu;		this.currentButton = button;	};	this.setFocusedMenu = function (menu) {		this.currentFocusMenu = menu;	};	this.onKey = function (e) {		if (!e.key) {			return;		}		if (!this.currentMenu || !this.currentMenu.isShowingNow) {			return;		}		var m = this.currentFocusMenu;		while (m) {			if (m.processKey(e)) {				e.preventDefault();				e.stopPropagation();				break;			}			m = m.parentPopup || m.parentMenu;		}	}, this.onClick = function (e) {		if (!this.currentMenu) {			return;		}		var scrolloffset = dojo.html.getScroll().offset;		var m = this.currentMenu;		while (m) {			if (dojo.html.overElement(m.domNode, e) || dojo.html.isDescendantOf(e.target, m.domNode)) {				return;			}			m = m.currentSubpopup;		}		if (this.currentButton && dojo.html.overElement(this.currentButton, e)) {			return;		}		this.currentMenu.closeAll(true);	};};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -