source: Dev/trunk/src/client/dojox/mobile/Opener.js @ 529

Last change on this file since 529 was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

File size: 3.5 KB
Line 
1define([
2        "dojo/_base/declare",
3        "dojo/_base/Deferred",
4        "dojo/_base/lang",
5        "dojo/_base/window",
6        "dojo/dom-class",
7        "dojo/dom-construct",
8        "dojo/dom-style",
9        "dojo/dom-geometry",
10        "./Tooltip",
11        "./Overlay",
12        "./lazyLoadUtils"
13], function(declare, Deferred, lang, win, domClass, domConstruct, domStyle, domGeometry, Tooltip, Overlay, lazyLoadUtils){
14
15        var isOverlay = domClass.contains(win.doc.documentElement, "dj_phone");
16       
17        var cls = declare("dojox.mobile.Opener", isOverlay ? Overlay : Tooltip, {
18                // summary:
19                //              A non-templated popup widget that will use either Tooltip or
20                //              Overlay depending on screen size.
21
22                // lazy: String
23                //              If true, the content of the widget, which includes dojo markup,
24                //              is instantiated lazily. That is, only when the widget is opened
25                //              by the user, the required modules are loaded and the content
26                //              widgets are instantiated.
27                lazy: false,
28
29                // requires: String
30                //              Comma-separated required module names to be lazily loaded. This
31                //              is effective only when lazy=true. All the modules specified with
32                //              dojoType and their depending modules are automatically loaded
33                //              when the widget is opened. However, if you need other extra
34                //              modules to be loaded, use this parameter.
35                requires: "",
36
37                buildRendering: function(){
38                        this.inherited(arguments);
39                        this.cover = domConstruct.create('div', {
40                                onclick: lang.hitch(this, '_onBlur'), 'class': 'mblOpenerUnderlay',
41                                style: { position: isOverlay ? 'absolute' : 'fixed', backgroundColor:'transparent', overflow:'hidden', zIndex:'-1' }
42                        }, this.domNode, 'first');
43                },
44
45                onShow: function(/*DomNode*/node){},
46                onHide: function(/*DomNode*/node, /*Anything*/v){},
47
48                show: function(node, positions){
49                        if(this.lazy){
50                                this.lazy = false;
51                                var _this = this;
52                                return Deferred.when(lazyLoadUtils.instantiateLazyWidgets(this.domNode, this.requires), function(){
53                                        return _this.show(node, positions);
54                                });
55                        }
56                        this.node = node;
57                        this.onShow(node);
58                        domStyle.set(this.cover, { top:'0px', left:'0px', width:'0px', height:'0px' }); // move cover temporarily to calculate domNode vertical position correctly
59                        this._resizeCover(domGeometry.position(this.domNode, false)); // must be before this.inherited(arguments) for Tooltip sizing
60                        return this.inherited(arguments);
61                },
62
63                hide: function(/*Anything*/ val){
64                        this.inherited(arguments);
65                        this.onHide(this.node, val);
66                },
67               
68                _reposition: function(){
69                        // tags:
70                        //              private
71                        var popupPos = this.inherited(arguments);
72                        this._resizeCover(popupPos);
73                        return popupPos;
74                },
75
76                _resizeCover: function(popupPos){
77                        // tags:
78                        //              private
79                        if(isOverlay){
80                                if(parseInt(domStyle.get(this.cover, 'top')) != -popupPos.y || parseInt(domStyle.get(this.cover, 'height')) != popupPos.y){
81                                        var x = Math.max(popupPos.x, 0); // correct onorientationchange values
82                                        domStyle.set(this.cover, { top:-popupPos.y+'px', left:-x+'px', width:popupPos.w+x+'px', height:popupPos.y+'px' });
83                                }
84                        }else{
85                                domStyle.set(this.cover, {
86                                        width:Math.max(win.doc.documentElement.scrollWidth || win.body().scrollWidth || win.doc.documentElement.clientWidth)+'px',
87                                        height:Math.max(win.doc.documentElement.scrollHeight || win.body().scrollHeight || win.doc.documentElement.clientHeight)+'px'
88                                });
89                        }                       
90                },
91
92                _onBlur: function(e){
93                        // tags:
94                        //              private
95                        var ret = this.onBlur(e);
96                        if(ret !== false){ // only exactly false prevents hide()
97                                this.hide(e);
98                        }
99                        return ret;
100                }
101        });
102        cls.prototype.baseClass += " mblOpener"; // add to either mblOverlay or mblTooltip
103        return cls;
104});
Note: See TracBrowser for help on using the repository browser.