123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- require({cache:{
- 'url:dojox/widget/Dialog/Dialog.html':"<div class=\"dojoxDialog\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"${id}_title\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dojoxDialogTitleBar\">\n\t\t<span dojoAttachPoint=\"titleNode\" class=\"dojoxDialogTitle\" id=\"${id}_title\">${title}</span>\n\t</div>\n\t<div dojoAttachPoint=\"dojoxDialogWrapper\">\n\t\t<div dojoAttachPoint=\"containerNode\" class=\"dojoxDialogPaneContent\"></div>\n\t</div>\n\t<div dojoAttachPoint=\"closeButtonNode\" class=\"dojoxDialogCloseIcon\" dojoAttachEvent=\"onclick: onCancel\">\n\t\t\t<span dojoAttachPoint=\"closeText\" class=\"closeText\">x</span>\n\t</div>\n</div>\n"}});
- define("dojox/widget/Dialog", [
- "dojo", "dojox", "dojo/text!./Dialog/Dialog.html",
- "dijit/Dialog", "dojo/window", "dojox/fx", "./DialogSimple"
- ], function(dojo, dojox, template){
- dojo.getObject('widget', true, dojox);
-
- dojo.declare('dojox.widget.Dialog', dojox.widget.DialogSimple,
- {
- // summary:
- // A Lightbox-like Modal-dialog for HTML Content
- //
- // description:
- // An HTML-capable Dialog widget with advanced sizing
- // options, animated show/hide and other useful options.
- //
- // This Dialog is also very easy to apply custom styles to.
- //
- // It works identically to a `dijit.Dialog` with several
- // additional parameters.
- templateString: template,
- // sizeToViewport: Boolean
- // If true, fix the size of the dialog to the Viewport based on
- // viewportPadding value rather than the calculated or natural
- // stlye. If false, base the size on a passed dimension attribute.
- // Eitherway, the viewportPadding value is used if the the content
- // extends beyond the viewport size for whatever reason.
- sizeToViewport: false,
- // viewportPadding: Integer
- // If sizeToViewport="true", this is the amount of padding in pixels to leave
- // between the dialog border and the viewport edge.
- // This value is also used when sizeToViewport="false" and dimensions exceeded
- // by dialog content to ensure dialog does not go outside viewport boundary
- viewportPadding: 35,
- // dimensions: Array
- // A two-element array of [widht,height] to animate the Dialog to if sizeToViewport="false"
- // Defaults to [300,300]
- dimensions: null,
- // easing: Function?|String?
- // An easing function to apply to the sizing animation.
- easing: null,
- // sizeDuration: Integer
- // Time (in ms) to use in the Animation for sizing.
- sizeDuration: dijit._defaultDuration,
- // sizeMethod: String
- // To be passed to dojox.fx.sizeTo, one of "chain" or "combine" to effect
- // the animation sequence.
- sizeMethod: "chain",
- // showTitle: Boolean
- // Toogle to show or hide the Title area. Can only be set at startup.
- showTitle: false,
- // draggable: Boolean
- // Make the pane draggable. Differs from dijit.Dialog by setting default to false
- draggable: false, // simply over-ride the default from dijit.Dialog
- // modal: Boolean
- // If true, this Dialog instance will be truly modal and prevent closing until
- // explicitly told to by calling hide() - Defaults to false to preserve previous
- // behaviors.
- modal: false,
- constructor: function(props, node){
- this.easing = props.easing || dojo._defaultEasing;
- this.dimensions = props.dimensions || [300, 300];
- },
- _setup: function(){
- // summary: Piggyback on dijit.Dialog's _setup for load-time options, deferred to
- this.inherited(arguments);
- if(!this._alreadyInitialized){
- this._navIn = dojo.fadeIn({ node: this.closeButtonNode });
- this._navOut = dojo.fadeOut({ node: this.closeButtonNode });
- if(!this.showTitle){
- dojo.addClass(this.domNode,"dojoxDialogNoTitle");
- }
- }
- },
- layout: function(e){
- this._setSize();
- this.inherited(arguments);
- },
- _setSize: function(){
- // summary: cache and set our desired end position
- this._vp = dojo.window.getBox();
- var tc = this.containerNode,
- vpSized = this.sizeToViewport
- ;
- return this._displaysize = {
- w: vpSized ? tc.scrollWidth : this.dimensions[0],
- h: vpSized ? tc.scrollHeight : this.dimensions[1]
- }; // Object
- },
- show: function(){
- if(this.open){ return; }
- this._setSize();
- dojo.style(this.closeButtonNode,"opacity", 0);
- dojo.style(this.domNode, {
- overflow: "hidden",
- opacity: 0,
- width: "1px",
- height: "1px"
- });
- dojo.style(this.containerNode, {
- opacity: 0,
- overflow: "hidden"
- });
- this.inherited(arguments);
- if(this.modal){
- // prevent escape key from closing dialog
- // connect to body to trap this event from the Dialog a11y code, and stop escape key
- // from doing anything in the modal:true case:
- this._modalconnects.push(dojo.connect(dojo.body(), "onkeypress", function(e){
- if(e.charOrCode == dojo.keys.ESCAPE){
- dojo.stopEvent(e);
- }
- }));
- }else{
- // otherwise, allow clicking on the underlay to close
- this._modalconnects.push(dojo.connect(dijit._underlay.domNode, "onclick", this, "onCancel"));
- }
- this._modalconnects.push(dojo.connect(this.domNode,"onmouseenter",this,"_handleNav"));
- this._modalconnects.push(dojo.connect(this.domNode,"onmouseleave",this,"_handleNav"));
- },
- _handleNav: function(e){
- // summary: Handle's showing or hiding the close icon
- var navou = "_navOut",
- navin = "_navIn",
- animou = (e.type == "mouseout" ? navin : navou),
- animin = (e.type == "mouseout" ? navou : navin)
- ;
- this[animou].stop();
- this[animin].play();
- },
- // an experiment in a quicksilver-like hide. too choppy for me.
- /*
- hide: function(){
- // summary: Hide the dialog
- // if we haven't been initialized yet then we aren't showing and we can just return
- if(!this._alreadyInitialized){
- return;
- }
- this._fadeIn && this._fadeIn.stop();
- if (this._scrollConnected){
- this._scrollConnected = false;
- }
- dojo.forEach(this._modalconnects, dojo.disconnect);
- this._modalconnects = [];
- if(this.refocus){
- this.connect(this._fadeOut,"onEnd",dojo.hitch(dijit,"focus",this._savedFocus));
- }
- if(this._relativePosition){
- delete this._relativePosition;
- }
- dojox.fx.sizeTo({
- node: this.domNode,
- duration:this.sizeDuration || this.duration,
- width: this._vp.w - 1,
- height: 5,
- onBegin: dojo.hitch(this,function(){
- this._fadeOut.play(this.sizeDuration / 2);
- })
- }).play();
- this.open = false;
- }, */
- _position: function(){
- if(!this._started){ return; } // prevent content: from firing this anim #8914
- if(this._sizing){
- this._sizing.stop();
- this.disconnect(this._sizingConnect);
- delete this._sizing;
- }
- this.inherited(arguments);
- if(!this.open){ dojo.style(this.containerNode, "opacity", 0); }
- var pad = this.viewportPadding * 2;
- var props = {
- node: this.domNode,
- duration: this.sizeDuration || dijit._defaultDuration,
- easing: this.easing,
- method: this.sizeMethod
- };
- var ds = this._displaysize || this._setSize();
- props['width'] = ds.w = (ds.w + pad >= this._vp.w || this.sizeToViewport)
- ? this._vp.w - pad : ds.w;
- props['height'] = ds.h = (ds.h + pad >= this._vp.h || this.sizeToViewport)
- ? this._vp.h - pad : ds.h;
- this._sizing = dojox.fx.sizeTo(props);
- this._sizingConnect = this.connect(this._sizing,"onEnd","_showContent");
- this._sizing.play();
- },
- _showContent: function(e){
- // summary: Show the inner container after sizing animation
- var container = this.containerNode;
- dojo.style(this.domNode, {
- overflow: "visible",
- opacity: 1
- });
- dojo.style(this.closeButtonNode,"opacity",1);
- dojo.style(container, {
- height: this._displaysize.h - this.titleNode.offsetHeight + "px",
- width: this._displaysize.w + "px",
- overflow:"auto"
- });
- dojo.anim(container, { opacity:1 });
- }
- });
- return dojox.widget.Dialog;
- });
|