📄 dialog.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.Dialog");dojo.require("dojo.widget.*");dojo.require("dojo.widget.ContentPane");dojo.require("dojo.event.*");dojo.require("dojo.gfx.color");dojo.require("dojo.html.layout");dojo.require("dojo.html.display");dojo.require("dojo.html.iframe");dojo.declare("dojo.widget.ModalDialogBase", null, {isContainer:true, focusElement:"", bgColor:"black", bgOpacity:0.4, followScroll:true, closeOnBackgroundClick:false, trapTabs:function (e) { if (e.target == this.tabStartOuter) { if (this._fromTrap) { this.tabStart.focus(); this._fromTrap = false; } else { this._fromTrap = true; this.tabEnd.focus(); } } else { if (e.target == this.tabStart) { if (this._fromTrap) { this._fromTrap = false; } else { this._fromTrap = true; this.tabEnd.focus(); } } else { if (e.target == this.tabEndOuter) { if (this._fromTrap) { this.tabEnd.focus(); this._fromTrap = false; } else { this._fromTrap = true; this.tabStart.focus(); } } else { if (e.target == this.tabEnd) { if (this._fromTrap) { this._fromTrap = false; } else { this._fromTrap = true; this.tabStart.focus(); } } } } }}, clearTrap:function (e) { var _this = this; setTimeout(function () { _this._fromTrap = false; }, 100);}, postCreate:function () { with (this.domNode.style) { position = "absolute"; zIndex = 999; display = "none"; overflow = "visible"; } var b = dojo.body(); b.appendChild(this.domNode); this.bg = document.createElement("div"); this.bg.className = "dialogUnderlay"; with (this.bg.style) { position = "absolute"; left = top = "0px"; zIndex = 998; display = "none"; } b.appendChild(this.bg); this.setBackgroundColor(this.bgColor); this.bgIframe = new dojo.html.BackgroundIframe(); if (this.bgIframe.iframe) { with (this.bgIframe.iframe.style) { position = "absolute"; left = top = "0px"; zIndex = 90; display = "none"; } } if (this.closeOnBackgroundClick) { dojo.event.kwConnect({srcObj:this.bg, srcFunc:"onclick", adviceObj:this, adviceFunc:"onBackgroundClick", once:true}); }}, uninitialize:function () { this.bgIframe.remove(); dojo.html.removeNode(this.bg, true);}, setBackgroundColor:function (color) { if (arguments.length >= 3) { color = new dojo.gfx.color.Color(arguments[0], arguments[1], arguments[2]); } else { color = new dojo.gfx.color.Color(color); } this.bg.style.backgroundColor = color.toString(); return this.bgColor = color;}, setBackgroundOpacity:function (op) { if (arguments.length == 0) { op = this.bgOpacity; } dojo.html.setOpacity(this.bg, op); try { this.bgOpacity = dojo.html.getOpacity(this.bg); } catch (e) { this.bgOpacity = op; } return this.bgOpacity;}, _sizeBackground:function () { if (this.bgOpacity > 0) { var viewport = dojo.html.getViewport(); var h = viewport.height; var w = viewport.width; with (this.bg.style) { width = w + "px"; height = h + "px"; } var scroll_offset = dojo.html.getScroll().offset; this.bg.style.top = scroll_offset.y + "px"; this.bg.style.left = scroll_offset.x + "px"; var viewport = dojo.html.getViewport(); if (viewport.width != w) { this.bg.style.width = viewport.width + "px"; } if (viewport.height != h) { this.bg.style.height = viewport.height + "px"; } } this.bgIframe.size(this.bg);}, _showBackground:function () { if (this.bgOpacity > 0) { this.bg.style.display = "block"; } if (this.bgIframe.iframe) { this.bgIframe.iframe.style.display = "block"; }}, placeModalDialog:function () { var scroll_offset = dojo.html.getScroll().offset; var viewport_size = dojo.html.getViewport(); var mb; if (this.isShowing()) { mb = dojo.html.getMarginBox(this.domNode); } else { dojo.html.setVisibility(this.domNode, false); dojo.html.show(this.domNode); mb = dojo.html.getMarginBox(this.domNode); dojo.html.hide(this.domNode); dojo.html.setVisibility(this.domNode, true); } var x = scroll_offset.x + (viewport_size.width - mb.width) / 2; var y = scroll_offset.y + (viewport_size.height - mb.height) / 2; with (this.domNode.style) { left = x + "px"; top = y + "px"; }}, _onKey:function (evt) { if (evt.key) { var node = evt.target; while (node != null) { if (node == this.domNode) { return; } node = node.parentNode; } if (evt.key != evt.KEY_TAB) { dojo.event.browser.stopEvent(evt); } else { if (!dojo.render.html.opera) { try { this.tabStart.focus(); } catch (e) { } } } }}, showModalDialog:function () { if (this.followScroll && !this._scrollConnected) { this._scrollConnected = true; dojo.event.connect(window, "onscroll", this, "_onScroll"); } dojo.event.connect(document.documentElement, "onkey", this, "_onKey"); this.placeModalDialog(); this.setBackgroundOpacity(); this._sizeBackground(); this._showBackground(); this._fromTrap = true; setTimeout(dojo.lang.hitch(this, function () { try { this.tabStart.focus(); } catch (e) { } }), 50);}, hideModalDialog:function () { if (this.focusElement) { dojo.byId(this.focusElement).focus(); dojo.byId(this.focusElement).blur(); } this.bg.style.display = "none"; this.bg.style.width = this.bg.style.height = "1px"; if (this.bgIframe.iframe) { this.bgIframe.iframe.style.display = "none"; } dojo.event.disconnect(document.documentElement, "onkey", this, "_onKey"); if (this._scrollConnected) { this._scrollConnected = false; dojo.event.disconnect(window, "onscroll", this, "_onScroll"); }}, _onScroll:function () { var scroll_offset = dojo.html.getScroll().offset; this.bg.style.top = scroll_offset.y + "px"; this.bg.style.left = scroll_offset.x + "px"; this.placeModalDialog();}, checkSize:function () { if (this.isShowing()) { this._sizeBackground(); this.placeModalDialog(); this.onResized(); }}, onBackgroundClick:function () { if (this.lifetime - this.timeRemaining >= this.blockDuration) { return; } this.hide();}});dojo.widget.defineWidget("dojo.widget.Dialog", [dojo.widget.ContentPane, dojo.widget.ModalDialogBase], {templateString:"<div id=\"${this.widgetId}\" class=\"dojoDialog\" dojoattachpoint=\"wrapper\">\n\t<span dojoattachpoint=\"tabStartOuter\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\"\ttabindex=\"0\"></span>\n\t<span dojoattachpoint=\"tabStart\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n\t<div dojoattachpoint=\"containerNode\" style=\"position: relative; z-index: 2;\"></div>\n\t<span dojoattachpoint=\"tabEnd\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n\t<span dojoattachpoint=\"tabEndOuter\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n</div>\n", blockDuration:0, lifetime:0, closeNode:"", postMixInProperties:function () { dojo.widget.Dialog.superclass.postMixInProperties.apply(this, arguments); if (this.closeNode) { this.setCloseControl(this.closeNode); }}, postCreate:function () { dojo.widget.Dialog.superclass.postCreate.apply(this, arguments); dojo.widget.ModalDialogBase.prototype.postCreate.apply(this, arguments);}, show:function () { if (this.lifetime) { this.timeRemaining = this.lifetime; if (this.timerNode) { this.timerNode.innerHTML = Math.ceil(this.timeRemaining / 1000); } if (this.blockDuration && this.closeNode) { if (this.lifetime > this.blockDuration) { this.closeNode.style.visibility = "hidden"; } else { this.closeNode.style.display = "none"; } } if (this.timer) { clearInterval(this.timer); } this.timer = setInterval(dojo.lang.hitch(this, "_onTick"), 100); } this.showModalDialog(); dojo.widget.Dialog.superclass.show.call(this);}, onLoad:function () { this.placeModalDialog(); dojo.widget.Dialog.superclass.onLoad.call(this);}, fillInTemplate:function () {}, hide:function () { this.hideModalDialog(); dojo.widget.Dialog.superclass.hide.call(this); if (this.timer) { clearInterval(this.timer); }}, setTimerNode:function (node) { this.timerNode = node;}, setCloseControl:function (node) { this.closeNode = dojo.byId(node); dojo.event.connect(this.closeNode, "onclick", this, "hide");}, setShowControl:function (node) { node = dojo.byId(node); dojo.event.connect(node, "onclick", this, "show");}, _onTick:function () { if (this.timer) { this.timeRemaining -= 100; if (this.lifetime - this.timeRemaining >= this.blockDuration) { if (this.closeNode) { this.closeNode.style.visibility = "visible"; } } if (!this.timeRemaining) { clearInterval(this.timer); this.hide(); } else { if (this.timerNode) { this.timerNode.innerHTML = Math.ceil(this.timeRemaining / 1000); } } }}});
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -