| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563 | 
							- <!DOCTYPE html>
 
- <html>
 
- <head>
 
-   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
-   <title>The source code</title>
 
-   <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
 
-   <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
 
-   <style type="text/css">
 
-     .highlight { display: block; background-color: #ddd; }
 
-   </style>
 
-   <script type="text/javascript">
 
-     function highlight() {
 
-       document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
 
-     }
 
-   </script>
 
- </head>
 
- <body onload="prettyPrint(); highlight();">
 
-   <pre class="prettyprint lang-js"><span id='Ext-Layer'>/**
 
- </span> * An extended {@link Ext.Element} object that supports a shadow and shim, constrain to viewport and
 
-  * automatic maintaining of shadow/shim positions.
 
-  */
 
- Ext.define('Ext.Layer', {
 
-     extend: 'Ext.Element',
 
-     uses: ['Ext.Shadow'],
 
- <span id='Ext-Layer-cfg-shim'>    /**
 
- </span>     * @cfg {Boolean} [shim=true]
 
-      * False to disable the iframe shim in browsers which need one.
 
-      */
 
- <span id='Ext-Layer-cfg-shadow'>    /**
 
- </span>     * @cfg {String/Boolean} [shadow=false]
 
-      * True to automatically create an {@link Ext.Shadow}, or a string indicating the
 
-      * shadow's display {@link Ext.Shadow#mode}. False to disable the shadow.
 
-      */
 
- <span id='Ext-Layer-cfg-dh'>    /**
 
- </span>     * @cfg {Object} [dh={tag: 'div', cls: 'x-layer'}]
 
-      * DomHelper object config to create element with.
 
-      */
 
- <span id='Ext-Layer-cfg-constrain'>    /**
 
- </span>     * @cfg {Boolean} [constrain=true]
 
-      * False to disable constrain to viewport.
 
-      */
 
- <span id='Ext-Layer-cfg-cls'>    /**
 
- </span>     * @cfg {String} cls
 
-      * CSS class to add to the element
 
-      */
 
- <span id='Ext-Layer-cfg-zindex'>    /**
 
- </span>     * @cfg {Number} [zindex=11000]
 
-      * Starting z-index.
 
-      */
 
- <span id='Ext-Layer-cfg-shadowOffset'>    /**
 
- </span>     * @cfg {Number} [shadowOffset=4]
 
-      * Number of pixels to offset the shadow
 
-      */
 
- <span id='Ext-Layer-cfg-useDisplay'>    /**
 
- </span>     * @cfg {Boolean} [useDisplay=false]
 
-      * Defaults to use css offsets to hide the Layer. Specify <tt>true</tt>
 
-      * to use css style <tt>'display:none;'</tt> to hide the Layer.
 
-      */
 
- <span id='Ext-Layer-cfg-visibilityCls'>    /**
 
- </span>     * @cfg {String} visibilityCls
 
-      * The CSS class name to add in order to hide this Layer if this layer
 
-      * is configured with <code>{@link #hideMode}: 'asclass'</code>
 
-      */
 
- <span id='Ext-Layer-cfg-hideMode'>    /**
 
- </span>     * @cfg {String} hideMode
 
-      * A String which specifies how this Layer will be hidden.
 
-      * Values may be:
 
-      *
 
-      * - `'display'` : The Component will be hidden using the `display: none` style.
 
-      * - `'visibility'` : The Component will be hidden using the `visibility: hidden` style.
 
-      * - `'offsets'` : The Component will be hidden by absolutely positioning it out of the visible area
 
-      *   of the document. This is useful when a hidden Component must maintain measurable dimensions.
 
-      *   Hiding using `display` results in a Component having zero dimensions.
 
-      */
 
-     // shims are shared among layer to keep from having 100 iframes
 
-     statics: {
 
-         shims: []
 
-     },
 
-     
 
-     isLayer: true,
 
- <span id='Ext-Layer-method-constructor'>    /**
 
- </span>     * Creates new Layer.
 
-      * @param {Object} [config] An object with config options.
 
-      * @param {String/HTMLElement} [existingEl] Uses an existing DOM element.
 
-      * If the element is not found it creates it.
 
-      */
 
-     constructor: function(config, existingEl) {
 
-         config = config || {};
 
-         var me = this,
 
-             dh = Ext.DomHelper,
 
-             cp = config.parentEl,
 
-             pel = cp ? Ext.getDom(cp) : document.body,
 
-         hm = config.hideMode;
 
-         if (existingEl) {
 
-             me.dom = Ext.getDom(existingEl);
 
-         }
 
-         if (!me.dom) {
 
-             me.dom = dh.append(pel, config.dh || {
 
-                 tag: 'div',
 
-                 cls: Ext.baseCSSPrefix + 'layer' // primarily to give el 'position:absolute'
 
-             });
 
-         } else {
 
-             me.addCls(Ext.baseCSSPrefix + 'layer');
 
-             if (!me.dom.parentNode) {
 
-                 pel.appendChild(me.dom);
 
-             }
 
-         }
 
-         if (config.id) {
 
-             me.id = me.dom.id = config.id;
 
-         } else {
 
-             me.id = Ext.id(me.dom);
 
-         }
 
-         Ext.Element.addToCache(me);
 
-         if (config.cls) {
 
-             me.addCls(config.cls);
 
-         }
 
-         me.constrain = config.constrain !== false;
 
-         // Allow Components to pass their hide mode down to the Layer if they are floating.
 
-         // Otherwise, allow useDisplay to override the default hiding method which is visibility.
 
-         // TODO: Have ExtJS's Element implement visibilityMode by using classes as in Mobile.
 
-         if (hm) {
 
-             me.setVisibilityMode(Ext.Element[hm.toUpperCase()]);
 
-             if (me.visibilityMode == Ext.Element.ASCLASS) {
 
-                 me.visibilityCls = config.visibilityCls;
 
-             }
 
-         } else if (config.useDisplay) {
 
-             me.setVisibilityMode(Ext.Element.DISPLAY);
 
-         } else {
 
-             me.setVisibilityMode(Ext.Element.VISIBILITY);
 
-         }
 
-         if (config.shadow) {
 
-             me.shadowOffset = config.shadowOffset || 4;
 
-             me.shadow = new Ext.Shadow({
 
-                 offset: me.shadowOffset,
 
-                 mode: config.shadow
 
-             });
 
-             me.disableShadow();
 
-         } else {
 
-             me.shadowOffset = 0;
 
-         }
 
-         me.useShim = config.shim !== false && Ext.useShims;
 
-         if (config.hidden === true) {
 
-             me.hide();
 
-         } else {
 
-             me.show();
 
-         }
 
-     },
 
-     getZIndex: function() {
 
-         return parseInt((this.getShim() || this).getStyle('z-index'), 10);
 
-     },
 
-     getShim: function() {
 
-         var me = this,
 
-             shim, pn;
 
-         if (!me.useShim) {
 
-             return null;
 
-         }
 
-         if (!me.shim) {
 
-             shim = me.self.shims.shift();
 
-             if (!shim) {
 
-                 shim = me.createShim();
 
-                 shim.enableDisplayMode('block');
 
-                 shim.hide();
 
-             }
 
-             pn = me.dom.parentNode;
 
-             if (shim.dom.parentNode != pn) {
 
-                 pn.insertBefore(shim.dom, me.dom);
 
-             }
 
-             me.shim = shim;
 
-         }
 
-         return me.shim;
 
-     },
 
-     hideShim: function() {
 
-         var me = this;
 
-         
 
-         if (me.shim) {
 
-             me.shim.setDisplayed(false);
 
-             me.self.shims.push(me.shim);
 
-             delete me.shim;
 
-         }
 
-     },
 
-     disableShadow: function() {
 
-         var me = this;
 
-         
 
-         if (me.shadow && !me.shadowDisabled) {
 
-             me.shadowDisabled = true;
 
-             me.shadow.hide();
 
-             me.lastShadowOffset = me.shadowOffset;
 
-             me.shadowOffset = 0;
 
-         }
 
-     },
 
-     enableShadow: function(show) {
 
-         var me = this;
 
-         
 
-         if (me.shadow && me.shadowDisabled) {
 
-             me.shadowDisabled = false;
 
-             me.shadowOffset = me.lastShadowOffset;
 
-             delete me.lastShadowOffset;
 
-             if (show) {
 
-                 me.sync(true);
 
-             }
 
-         }
 
-     },
 
- <span id='Ext-Layer-method-sync'>    /**
 
- </span>     * @private
 
-      * Synchronize this Layer's associated elements, the shadow, and possibly the shim.
 
-      *
 
-      * This code can execute repeatedly in milliseconds,
 
-      * eg: dragging a Component configured liveDrag: true, or which has no ghost method
 
-      * so code size was sacrificed for efficiency (e.g. no getBox/setBox, no XY calls)
 
-      *
 
-      * @param {Boolean} doShow Pass true to ensure that the shadow is shown.
 
-      */
 
-     sync: function(doShow) {
 
-         var me = this,
 
-             shadow = me.shadow,
 
-             shadowPos, shimStyle, shadowSize,
 
-             shim, l, t, w, h, shimIndex;
 
-         if (!me.updating && me.isVisible() && (shadow || me.useShim)) {
 
-             shim = me.getShim();
 
-             l = me.getLocalX();
 
-             t = me.getLocalY();
 
-             w = me.dom.offsetWidth;
 
-             h = me.dom.offsetHeight;
 
-             if (shadow && !me.shadowDisabled) {
 
-                 if (doShow && !shadow.isVisible()) {
 
-                     shadow.show(me);
 
-                 } else {
 
-                     shadow.realign(l, t, w, h);
 
-                 }
 
-                 if (shim) {
 
-                     // TODO: Determine how the shims zIndex is above the layer zIndex at this point
 
-                     shimIndex = shim.getStyle('z-index');
 
-                     if (shimIndex > me.zindex) {
 
-                         me.shim.setStyle('z-index', me.zindex - 2);
 
-                     }
 
-                     shim.show();
 
-                     // fit the shim behind the shadow, so it is shimmed too
 
-                     if (shadow.isVisible()) {
 
-                         shadowPos = shadow.el.getXY();
 
-                         shimStyle = shim.dom.style;
 
-                         shadowSize = shadow.el.getSize();
 
-                         if (Ext.supports.CSS3BoxShadow) {
 
-                             shadowSize.height += 6;
 
-                             shadowSize.width += 4;
 
-                             shadowPos[0] -= 2;
 
-                             shadowPos[1] -= 4;
 
-                         }
 
-                         shimStyle.left = (shadowPos[0]) + 'px';
 
-                         shimStyle.top = (shadowPos[1]) + 'px';
 
-                         shimStyle.width = (shadowSize.width) + 'px';
 
-                         shimStyle.height = (shadowSize.height) + 'px';
 
-                     } else {
 
-                         shim.setSize(w, h);
 
-                         shim.setLeftTop(l, t);
 
-                     }
 
-                 }
 
-             } else if (shim) {
 
-                 // TODO: Determine how the shims zIndex is above the layer zIndex at this point
 
-                 shimIndex = shim.getStyle('z-index');
 
-                 if (shimIndex > me.zindex) {
 
-                     me.shim.setStyle('z-index', me.zindex - 2);
 
-                 }
 
-                 shim.show();
 
-                 shim.setSize(w, h);
 
-                 shim.setLeftTop(l, t);
 
-             }
 
-         }
 
-         return me;
 
-     },
 
-     remove: function() {
 
-         this.hideUnders();
 
-         this.callParent();
 
-     },
 
-     // private
 
-     beginUpdate: function() {
 
-         this.updating = true;
 
-     },
 
-     // private
 
-     endUpdate: function() {
 
-         this.updating = false;
 
-         this.sync(true);
 
-     },
 
-     // private
 
-     hideUnders: function() {
 
-         if (this.shadow) {
 
-             this.shadow.hide();
 
-         }
 
-         this.hideShim();
 
-     },
 
-     // private
 
-     constrainXY: function() {
 
-         if (this.constrain) {
 
-             var vw = Ext.Element.getViewWidth(),
 
-                 vh = Ext.Element.getViewHeight(),
 
-                 s = Ext.getDoc().getScroll(),
 
-                 xy = this.getXY(),
 
-                 x = xy[0],
 
-                 y = xy[1],
 
-                 so = this.shadowOffset,
 
-                 w = this.dom.offsetWidth + so,
 
-                 h = this.dom.offsetHeight + so,
 
-                 moved = false; // only move it if it needs it
 
-             // first validate right/bottom
 
-             if ((x + w) > vw + s.left) {
 
-                 x = vw - w - so;
 
-                 moved = true;
 
-             }
 
-             if ((y + h) > vh + s.top) {
 
-                 y = vh - h - so;
 
-                 moved = true;
 
-             }
 
-             // then make sure top/left isn't negative
 
-             if (x < s.left) {
 
-                 x = s.left;
 
-                 moved = true;
 
-             }
 
-             if (y < s.top) {
 
-                 y = s.top;
 
-                 moved = true;
 
-             }
 
-             if (moved) {
 
-                 Ext.Layer.superclass.setXY.call(this, [x, y]);
 
-                 this.sync();
 
-             }
 
-         }
 
-         return this;
 
-     },
 
-     getConstrainOffset: function() {
 
-         return this.shadowOffset;
 
-     },
 
-     // overridden Element method
 
-     setVisible: function(visible, animate, duration, callback, easing) {
 
-         var me = this,
 
-             cb;
 
-         // post operation processing
 
-         cb = function() {
 
-             if (visible) {
 
-                 me.sync(true);
 
-             }
 
-             if (callback) {
 
-                 callback();
 
-             }
 
-         };
 
-         // Hide shadow and shim if hiding
 
-         if (!visible) {
 
-             me.hideUnders(true);
 
-         }
 
-         me.callParent([visible, animate, duration, callback, easing]);
 
-         if (!animate) {
 
-             cb();
 
-         }
 
-         return me;
 
-     },
 
-     // private
 
-     beforeFx: function() {
 
-         this.beforeAction();
 
-         return this.callParent(arguments);
 
-     },
 
-     // private
 
-     afterFx: function() {
 
-         this.callParent(arguments);
 
-         this.sync(this.isVisible());
 
-     },
 
-     // private
 
-     beforeAction: function() {
 
-         if (!this.updating && this.shadow) {
 
-             this.shadow.hide();
 
-         }
 
-     },
 
-     // overridden Element method
 
-     setLeft: function(left) {
 
-         this.callParent(arguments);
 
-         return this.sync();
 
-     },
 
-     setTop: function(top) {
 
-         this.callParent(arguments);
 
-         return this.sync();
 
-     },
 
-     setLeftTop: function(left, top) {
 
-         this.callParent(arguments);
 
-         return this.sync();
 
-     },
 
-     setXY: function(xy, animate, duration, callback, easing) {
 
-         var me = this;
 
-         
 
-         // Callback will restore shadow state and call the passed callback
 
-         callback = me.createCB(callback);
 
-         me.fixDisplay();
 
-         me.beforeAction();
 
-         me.callParent([xy, animate, duration, callback, easing]);
 
-         if (!animate) {
 
-             callback();
 
-         }
 
-         return me;
 
-     },
 
-     // private
 
-     createCB: function(callback) {
 
-         var me = this,
 
-             showShadow = me.shadow && me.shadow.isVisible();
 
-         return function() {
 
-             me.constrainXY();
 
-             me.sync(showShadow);
 
-             if (callback) {
 
-                 callback();
 
-             }
 
-         };
 
-     },
 
-     // overridden Element method
 
-     setX: function(x, animate, duration, callback, easing) {
 
-         this.setXY([x, this.getY()], animate, duration, callback, easing);
 
-         return this;
 
-     },
 
-     // overridden Element method
 
-     setY: function(y, animate, duration, callback, easing) {
 
-         this.setXY([this.getX(), y], animate, duration, callback, easing);
 
-         return this;
 
-     },
 
-     // overridden Element method
 
-     setSize: function(w, h, animate, duration, callback, easing) {
 
-         var me = this;
 
-         
 
-         // Callback will restore shadow state and call the passed callback
 
-         callback = me.createCB(callback);
 
-         me.beforeAction();
 
-         me.callParent([w, h, animate, duration, callback, easing]);
 
-         if (!animate) {
 
-             callback();
 
-         }
 
-         return me;
 
-     },
 
-     // overridden Element method
 
-     setWidth: function(w, animate, duration, callback, easing) {
 
-         var me = this;
 
-         
 
-         // Callback will restore shadow state and call the passed callback
 
-         callback = me.createCB(callback);
 
-         me.beforeAction();
 
-         me.callParent([w, animate, duration, callback, easing]);
 
-         if (!animate) {
 
-             callback();
 
-         }
 
-         return me;
 
-     },
 
-     // overridden Element method
 
-     setHeight: function(h, animate, duration, callback, easing) {
 
-         var me = this;
 
-         
 
-         // Callback will restore shadow state and call the passed callback
 
-         callback = me.createCB(callback);
 
-         me.beforeAction();
 
-         me.callParent([h, animate, duration, callback, easing]);
 
-         if (!animate) {
 
-             callback();
 
-         }
 
-         return me;
 
-     },
 
-     // overridden Element method
 
-     setBounds: function(x, y, width, height, animate, duration, callback, easing) {
 
-         var me = this;
 
-         
 
-         // Callback will restore shadow state and call the passed callback
 
-         callback = me.createCB(callback);
 
-         me.beforeAction();
 
-         if (!animate) {
 
-             Ext.Layer.superclass.setXY.call(me, [x, y]);
 
-             Ext.Layer.superclass.setSize.call(me, width, height);
 
-             callback();
 
-         } else {
 
-             me.callParent([x, y, width, height, animate, duration, callback, easing]);
 
-         }
 
-         return me;
 
-     },
 
- <span id='Ext-Layer-method-setZIndex'>    /**
 
- </span>     * Sets the z-index of this layer and adjusts any shadow and shim z-indexes. The layer
 
-      * z-index is automatically incremented depending upon the presence of a shim or a
 
-      * shadow in so that it always shows above those two associated elements.
 
-      *
 
-      * Any shim, will be assigned the passed z-index. A shadow will be assigned the next
 
-      * highet z-index, and the Layer's element will receive the highest  z-index.
 
-      *
 
-      * @param {Number} zindex The new z-index to set
 
-      * @return {Ext.Layer} The Layer
 
-      */
 
-     setZIndex: function(zindex) {
 
-         var me = this;
 
-         
 
-         me.zindex = zindex;
 
-         if (me.getShim()) {
 
-             me.shim.setStyle('z-index', zindex++);
 
-         }
 
-         if (me.shadow) {
 
-             me.shadow.setZIndex(zindex++);
 
-         }
 
-         return me.setStyle('z-index', zindex);
 
-     },
 
-     
 
-     onOpacitySet: function(opacity){
 
-         var shadow = this.shadow;
 
-         if (shadow) {
 
-             shadow.setOpacity(opacity);
 
-         }
 
-     }
 
- });
 
- </pre>
 
- </body>
 
- </html>
 
 
  |