| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012 | <!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-dom-Element'>/**</span> * @class Ext.dom.Element *//* ================================ * A Note About Wrapped Animations * ================================ * A few of the effects below implement two different animations per effect, one wrapping * animation that performs the visual effect and a "no-op" animation on this Element where * no attributes of the element itself actually change. The purpose for this is that the * wrapper is required for the effect to work and so it does the actual animation work, but * we always animate `this` so that the element's events and callbacks work as expected to * the callers of this API. *  * Because of this, we always want each wrap animation to complete first (we don't want to * cut off the visual effect early). To ensure that, we arbitrarily increase the duration of * the element's no-op animation, also ensuring that it has a decent minimum value -- on slow * systems, too-low durations can cause race conditions between the wrap animation and the * element animation being removed out of order. Note that in each wrap's `afteranimate` * callback it will explicitly terminate the element animation as soon as the wrap is complete, * so there's no real danger in making the duration too long. *  * This applies to all effects that get wrapped, including slideIn, slideOut, switchOff and frame. */Ext.dom.Element.override({<span id='Ext-dom-Element-method-animate'>    /**</span>     * Performs custom animation on this Element.     *     * The following properties may be specified in `from`, `to`, and `keyframe` objects:     *     *   - `x` - The page X position in pixels.     *     *   - `y` - The page Y position in pixels     *     *   - `left` - The element's CSS `left` value. Units must be supplied.     *     *   - `top` - The element's CSS `top` value. Units must be supplied.     *     *   - `width` - The element's CSS `width` value. Units must be supplied.     *     *   - `height` - The element's CSS `height` value. Units must be supplied.     *     *   - `scrollLeft` - The element's `scrollLeft` value.     *     *   - `scrollTop` - The element's `scrollTop` value.     *     *   - `opacity` - The element's `opacity` value. This must be a value between `0` and `1`.     *     * **Be aware** that animating an Element which is being used by an Ext Component without in some way informing the     * Component about the changed element state will result in incorrect Component behaviour. This is because the     * Component will be using the old state of the element. To avoid this problem, it is now possible to directly     * animate certain properties of Components.     *     * @param {Object} config  Configuration for {@link Ext.fx.Anim}.     * Note that the {@link Ext.fx.Anim#to to} config is required.     * @return {Ext.dom.Element} this     */    animate: function(config) {        var me = this,            listeners,            anim,            animId = me.dom.id || Ext.id(me.dom);        if (!Ext.fx.Manager.hasFxBlock(animId)) {            // Bit of gymnastics here to ensure our internal listeners get bound first            if (config.listeners) {                listeners = config.listeners;                delete config.listeners;            }            if (config.internalListeners) {                config.listeners = config.internalListeners;                delete config.internalListeners;            }            anim = new Ext.fx.Anim(me.anim(config));            if (listeners) {                anim.on(listeners);            }            Ext.fx.Manager.queueFx(anim);        }        return me;    },    // @private - process the passed fx configuration.    anim: function(config) {        if (!Ext.isObject(config)) {            return (config) ? {} : false;        }        var me = this,            duration = config.duration || Ext.fx.Anim.prototype.duration,            easing = config.easing || 'ease',            animConfig;        if (config.stopAnimation) {            me.stopAnimation();        }        Ext.applyIf(config, Ext.fx.Manager.getFxDefaults(me.id));        // Clear any 'paused' defaults.        Ext.fx.Manager.setFxDefaults(me.id, {            delay: 0        });        animConfig = {            // Pass the DOM reference. That's tested first so will be converted to an Ext.fx.Target fastest.            target: me.dom,            remove: config.remove,            alternate: config.alternate || false,            duration: duration,            easing: easing,            callback: config.callback,            listeners: config.listeners,            iterations: config.iterations || 1,            scope: config.scope,            block: config.block,            concurrent: config.concurrent,            delay: config.delay || 0,            paused: true,            keyframes: config.keyframes,            from: config.from || {},            to: Ext.apply({}, config)        };        Ext.apply(animConfig.to, config.to);        // Anim API properties - backward compat        delete animConfig.to.to;        delete animConfig.to.from;        delete animConfig.to.remove;        delete animConfig.to.alternate;        delete animConfig.to.keyframes;        delete animConfig.to.iterations;        delete animConfig.to.listeners;        delete animConfig.to.target;        delete animConfig.to.paused;        delete animConfig.to.callback;        delete animConfig.to.scope;        delete animConfig.to.duration;        delete animConfig.to.easing;        delete animConfig.to.concurrent;        delete animConfig.to.block;        delete animConfig.to.stopAnimation;        delete animConfig.to.delay;        return animConfig;    },<span id='Ext-dom-Element-method-slideIn'>    /**</span>     * Slides the element into view. An anchor point can be optionally passed to set the point of origin for the slide     * effect. This function automatically handles wrapping the element with a fixed-size container if needed. See the     * Fx class overview for valid anchor point options. Usage:     *     *     // default: slide the element in from the top     *     el.slideIn();     *     *     // custom: slide the element in from the right with a 2-second duration     *     el.slideIn('r', { duration: 2000 });     *     *     // common config options shown with default values     *     el.slideIn('t', {     *         easing: 'easeOut',     *         duration: 500     *     });     *     * @param {String} anchor (optional) One of the valid Fx anchor positions (defaults to top: 't')     * @param {Object} options (optional) Object literal with any of the Fx config options     * @param {Boolean} options.preserveScroll Set to true if preservation of any descendant elements'     * `scrollTop` values is required. By default the DOM wrapping operation performed by `slideIn` and     * `slideOut` causes the browser to lose all scroll positions.     * @return {Ext.dom.Element} The Element     */    slideIn: function(anchor, obj, slideOut) {        var me = this,            elStyle = me.dom.style,            beforeAnim,            wrapAnim,            restoreScroll,            wrapDomParentNode;        anchor = anchor || "t";        obj = obj || {};        beforeAnim = function() {            var animScope = this,                listeners = obj.listeners,                box, originalStyles, anim, wrap;            if (!slideOut) {                me.fixDisplay();            }            box = me.getBox();            if ((anchor == 't' || anchor == 'b') && box.height === 0) {                box.height = me.dom.scrollHeight;            }            else if ((anchor == 'l' || anchor == 'r') && box.width === 0) {                box.width = me.dom.scrollWidth;            }            originalStyles = me.getStyles('width', 'height', 'left', 'right', 'top', 'bottom', 'position', 'z-index', true);            me.setSize(box.width, box.height);            // Cache all descendants' scrollTop & scrollLeft values if configured to preserve scroll.            if (obj.preserveScroll) {                restoreScroll = me.cacheScrollValues();            }            wrap = me.wrap({                id: Ext.id() + '-anim-wrap-for-' + me.id,                style: {                    visibility: slideOut ? 'visible' : 'hidden'                }            });            wrapDomParentNode = wrap.dom.parentNode;            wrap.setPositioning(me.getPositioning());            if (wrap.isStyle('position', 'static')) {                wrap.position('relative');            }            me.clearPositioning('auto');            wrap.clip();            // The wrap will have reset all descendant scrollTops. Restore them if we cached them.            if (restoreScroll) {                restoreScroll();            }            // This element is temporarily positioned absolute within its wrapper.            // Restore to its default, CSS-inherited visibility setting.            // We cannot explicitly poke visibility:visible into its style because that overrides the visibility of the wrap.            me.setStyle({                visibility: '',                position: 'absolute'            });            if (slideOut) {                wrap.setSize(box.width, box.height);            }            switch (anchor) {                case 't':                    anim = {                        from: {                            width: box.width + 'px',                            height: '0px'                        },                        to: {                            width: box.width + 'px',                            height: box.height + 'px'                        }                    };                    elStyle.bottom = '0px';                    break;                case 'l':                    anim = {                        from: {                            width: '0px',                            height: box.height + 'px'                        },                        to: {                            width: box.width + 'px',                            height: box.height + 'px'                        }                    };                    elStyle.right = '0px';                    break;                case 'r':                    anim = {                        from: {                            x: box.x + box.width,                            width: '0px',                            height: box.height + 'px'                        },                        to: {                            x: box.x,                            width: box.width + 'px',                            height: box.height + 'px'                        }                    };                    break;                case 'b':                    anim = {                        from: {                            y: box.y + box.height,                            width: box.width + 'px',                            height: '0px'                        },                        to: {                            y: box.y,                            width: box.width + 'px',                            height: box.height + 'px'                        }                    };                    break;                case 'tl':                    anim = {                        from: {                            x: box.x,                            y: box.y,                            width: '0px',                            height: '0px'                        },                        to: {                            width: box.width + 'px',                            height: box.height + 'px'                        }                    };                    elStyle.bottom = '0px';                    elStyle.right = '0px';                    break;                case 'bl':                    anim = {                        from: {                            y: box.y + box.height,                            width: '0px',                            height: '0px'                        },                        to: {                            y: box.y,                            width: box.width + 'px',                            height: box.height + 'px'                        }                    };                    elStyle.bottom = '0px';                    break;                case 'br':                    anim = {                        from: {                            x: box.x + box.width,                            y: box.y + box.height,                            width: '0px',                            height: '0px'                        },                        to: {                            x: box.x,                            y: box.y,                            width: box.width + 'px',                            height: box.height + 'px'                        }                    };                    break;                case 'tr':                    anim = {                        from: {                            x: box.x + box.width,                            width: '0px',                            height: '0px'                        },                        to: {                            x: box.x,                            width: box.width + 'px',                            height: box.height + 'px'                        }                    };                    elStyle.right = '0px';                    break;            }            wrap.show();            wrapAnim = Ext.apply({}, obj);            delete wrapAnim.listeners;            wrapAnim = new Ext.fx.Anim(Ext.applyIf(wrapAnim, {                target: wrap,                duration: 500,                easing: 'ease-out',                from: slideOut ? anim.to : anim.from,                to: slideOut ? anim.from : anim.to            }));            // In the absence of a callback, this listener MUST be added first            wrapAnim.on('afteranimate', function() {                me.setStyle(originalStyles);                if (slideOut) {                    if (obj.useDisplay) {                        me.setDisplayed(false);                    } else {                        me.hide();                    }                }                if (wrap.dom) {                    if (wrap.dom.parentNode) {                        wrap.dom.parentNode.insertBefore(me.dom, wrap.dom);                    } else {                        wrapDomParentNode.appendChild(me.dom);                    }                    wrap.remove();                }                // The unwrap will have reset all descendant scrollTops. Restore them if we cached them.                if (restoreScroll) {                    restoreScroll();                }                // kill the no-op element animation created below                animScope.end();            });            // Add configured listeners after            if (listeners) {                wrapAnim.on(listeners);            }        };        me.animate({            // See "A Note About Wrapped Animations" at the top of this class:            duration: obj.duration ? Math.max(obj.duration, 500) * 2 : 1000,            listeners: {                beforeanimate: beforeAnim // kick off the wrap animation            }        });        return me;    },<span id='Ext-dom-Element-method-slideOut'>    /**</span>     * Slides the element out of view. An anchor point can be optionally passed to set the end point for the slide     * effect. When the effect is completed, the element will be hidden (visibility = 'hidden') but block elements will     * still take up space in the document. The element must be removed from the DOM using the 'remove' config option if     * desired. This function automatically handles wrapping the element with a fixed-size container if needed. See the     * Fx class overview for valid anchor point options. Usage:     *     *     // default: slide the element out to the top     *     el.slideOut();     *     *     // custom: slide the element out to the right with a 2-second duration     *     el.slideOut('r', { duration: 2000 });     *     *     // common config options shown with default values     *     el.slideOut('t', {     *         easing: 'easeOut',     *         duration: 500,     *         remove: false,     *         useDisplay: false     *     });     *     * @param {String} anchor (optional) One of the valid Fx anchor positions (defaults to top: 't')     * @param {Object} options (optional) Object literal with any of the Fx config options     * @return {Ext.dom.Element} The Element     */    slideOut: function(anchor, o) {        return this.slideIn(anchor, o, true);    },<span id='Ext-dom-Element-method-puff'>    /**</span>     * Fades the element out while slowly expanding it in all directions. When the effect is completed, the element will     * be hidden (visibility = 'hidden') but block elements will still take up space in the document. Usage:     *     *     // default     *     el.puff();     *     *     // common config options shown with default values     *     el.puff({     *         easing: 'easeOut',     *         duration: 500,     *         useDisplay: false     *     });     *     * @param {Object} options (optional) Object literal with any of the Fx config options     * @return {Ext.dom.Element} The Element     */    puff: function(obj) {        var me = this,            beforeAnim,            box = me.getBox(),            originalStyles = me.getStyles('width', 'height', 'left', 'right', 'top', 'bottom', 'position', 'z-index', 'font-size', 'opacity', true);       obj = Ext.applyIf(obj || {}, {            easing: 'ease-out',            duration: 500,            useDisplay: false        });        beforeAnim = function() {            me.clearOpacity();            me.show();            this.to = {                width: box.width * 2,                height: box.height * 2,                x: box.x - (box.width / 2),                y: box.y - (box.height /2),                opacity: 0,                fontSize: '200%'            };            this.on('afteranimate',function() {                if (me.dom) {                    if (obj.useDisplay) {                        me.setDisplayed(false);                    } else {                        me.hide();                    }                    me.setStyle(originalStyles);                    obj.callback.call(obj.scope);                }            });        };        me.animate({            duration: obj.duration,            easing: obj.easing,            listeners: {                beforeanimate: {                    fn: beforeAnim                }            }        });        return me;    },<span id='Ext-dom-Element-method-switchOff'>    /**</span>     * Blinks the element as if it was clicked and then collapses on its center (similar to switching off a television).     * When the effect is completed, the element will be hidden (visibility = 'hidden') but block elements will still     * take up space in the document. The element must be removed from the DOM using the 'remove' config option if     * desired. Usage:     *     *     // default     *     el.switchOff();     *     *     // all config options shown with default values     *     el.switchOff({     *         easing: 'easeIn',     *         duration: .3,     *         remove: false,     *         useDisplay: false     *     });     *     * @param {Object} options (optional) Object literal with any of the Fx config options     * @return {Ext.dom.Element} The Element     */    switchOff: function(obj) {        var me = this,            beforeAnim;        obj = Ext.applyIf(obj || {}, {            easing: 'ease-in',            duration: 500,            remove: false,            useDisplay: false        });        beforeAnim = function() {            var animScope = this,                size = me.getSize(),                xy = me.getXY(),                keyframe, position;            me.clearOpacity();            me.clip();            position = me.getPositioning();            keyframe = new Ext.fx.Animator({                target: me,                duration: obj.duration,                easing: obj.easing,                keyframes: {                    33: {                        opacity: 0.3                    },                    66: {                        height: 1,                        y: xy[1] + size.height / 2                    },                    100: {                        width: 1,                        x: xy[0] + size.width / 2                    }                }            });            keyframe.on('afteranimate', function() {                if (obj.useDisplay) {                    me.setDisplayed(false);                } else {                    me.hide();                }                me.clearOpacity();                me.setPositioning(position);                me.setSize(size);                // kill the no-op element animation created below                animScope.end();            });        };                me.animate({            // See "A Note About Wrapped Animations" at the top of this class:            duration: (Math.max(obj.duration, 500) * 2),            listeners: {                beforeanimate: {                    fn: beforeAnim                }            }        });        return me;    },<span id='Ext-dom-Element-method-frame'>    /**</span>     * Shows a ripple of exploding, attenuating borders to draw attention to an Element. Usage:     *     *     // default: a single light blue ripple     *     el.frame();     *     *     // custom: 3 red ripples lasting 3 seconds total     *     el.frame("#ff0000", 3, { duration: 3000 });     *     *     // common config options shown with default values     *     el.frame("#C3DAF9", 1, {     *         duration: 1000 // duration of each individual ripple.     *         // Note: Easing is not configurable and will be ignored if included     *     });     *     * @param {String} [color='#C3DAF9'] The hex color value for the border.     * @param {Number} [count=1] The number of ripples to display.     * @param {Object} [options] Object literal with any of the Fx config options     * @return {Ext.dom.Element} The Element     */    frame : function(color, count, obj){        var me = this,            beforeAnim;        color = color || '#C3DAF9';        count = count || 1;        obj = obj || {};        beforeAnim = function() {            me.show();            var animScope = this,                box = me.getBox(),                proxy = Ext.getBody().createChild({                    id: me.id + '-anim-proxy',                    style: {                        position : 'absolute',                        'pointer-events': 'none',                        'z-index': 35000,                        border : '0px solid ' + color                    }                }),                proxyAnim;            proxyAnim = new Ext.fx.Anim({                target: proxy,                duration: obj.duration || 1000,                iterations: count,                from: {                    top: box.y,                    left: box.x,                    borderWidth: 0,                    opacity: 1,                    height: box.height,                    width: box.width                },                to: {                    top: box.y - 20,                    left: box.x - 20,                    borderWidth: 10,                    opacity: 0,                    height: box.height + 40,                    width: box.width + 40                }            });            proxyAnim.on('afteranimate', function() {                proxy.remove();                // kill the no-op element animation created below                animScope.end();            });        };        me.animate({            // See "A Note About Wrapped Animations" at the top of this class:            duration: (Math.max(obj.duration, 500) * 2) || 2000,            listeners: {                beforeanimate: {                    fn: beforeAnim                }            }        });        return me;    },<span id='Ext-dom-Element-method-ghost'>    /**</span>     * Slides the element while fading it out of view. An anchor point can be optionally passed to set the ending point     * of the effect. Usage:     *     *     // default: slide the element downward while fading out     *     el.ghost();     *     *     // custom: slide the element out to the right with a 2-second duration     *     el.ghost('r', { duration: 2000 });     *     *     // common config options shown with default values     *     el.ghost('b', {     *         easing: 'easeOut',     *         duration: 500     *     });     *     * @param {String} anchor (optional) One of the valid Fx anchor positions (defaults to bottom: 'b')     * @param {Object} options (optional) Object literal with any of the Fx config options     * @return {Ext.dom.Element} The Element     */    ghost: function(anchor, obj) {        var me = this,            beforeAnim;        anchor = anchor || "b";        beforeAnim = function() {            var width = me.getWidth(),                height = me.getHeight(),                xy = me.getXY(),                position = me.getPositioning(),                to = {                    opacity: 0                };            switch (anchor) {                case 't':                    to.y = xy[1] - height;                    break;                case 'l':                    to.x = xy[0] - width;                    break;                case 'r':                    to.x = xy[0] + width;                    break;                case 'b':                    to.y = xy[1] + height;                    break;                case 'tl':                    to.x = xy[0] - width;                    to.y = xy[1] - height;                    break;                case 'bl':                    to.x = xy[0] - width;                    to.y = xy[1] + height;                    break;                case 'br':                    to.x = xy[0] + width;                    to.y = xy[1] + height;                    break;                case 'tr':                    to.x = xy[0] + width;                    to.y = xy[1] - height;                    break;            }            this.to = to;            this.on('afteranimate', function () {                if (me.dom) {                    me.hide();                    me.clearOpacity();                    me.setPositioning(position);                }            });        };        me.animate(Ext.applyIf(obj || {}, {            duration: 500,            easing: 'ease-out',            listeners: {                beforeanimate: {                    fn: beforeAnim                }            }        }));        return me;    },<span id='Ext-dom-Element-method-highlight'>    /**</span>     * Highlights the Element by setting a color (applies to the background-color by default, but can be changed using     * the "attr" config option) and then fading back to the original color. If no original color is available, you     * should provide the "endColor" config option which will be cleared after the animation. Usage:     *     *     // default: highlight background to yellow     *     el.highlight();     *     *     // custom: highlight foreground text to blue for 2 seconds     *     el.highlight("0000ff", { attr: 'color', duration: 2000 });     *     *     // common config options shown with default values     *     el.highlight("ffff9c", {     *         attr: "backgroundColor", //can be any valid CSS property (attribute) that supports a color value     *         endColor: (current color) or "ffffff",     *         easing: 'easeIn',     *         duration: 1000     *     });     *     * @param {String} color (optional) The highlight color. Should be a 6 char hex color without the leading #     * (defaults to yellow: 'ffff9c')     * @param {Object} options (optional) Object literal with any of the Fx config options     * @return {Ext.dom.Element} The Element     */    highlight: function(color, o) {        var me = this,            dom = me.dom,            from = {},            restore, to, attr, lns, event, fn;        o = o || {};        lns = o.listeners || {};        attr = o.attr || 'backgroundColor';        from[attr] = color || 'ffff9c';        if (!o.to) {            to = {};            to[attr] = o.endColor || me.getColor(attr, 'ffffff', '');        }        else {            to = o.to;        }        // Don't apply directly on lns, since we reference it in our own callbacks below        o.listeners = Ext.apply(Ext.apply({}, lns), {            beforeanimate: function() {                restore = dom.style[attr];                me.clearOpacity();                me.show();                event = lns.beforeanimate;                if (event) {                    fn = event.fn || event;                    return fn.apply(event.scope || lns.scope || window, arguments);                }            },            afteranimate: function() {                if (dom) {                    dom.style[attr] = restore;                }                event = lns.afteranimate;                if (event) {                    fn = event.fn || event;                    fn.apply(event.scope || lns.scope || window, arguments);                }            }        });        me.animate(Ext.apply({}, o, {            duration: 1000,            easing: 'ease-in',            from: from,            to: to        }));        return me;    },<span id='Ext-dom-Element-method-pause'>   /**</span>    * Creates a pause before any subsequent queued effects begin. If there are no effects queued after the pause it will    * have no effect. Usage:    *    *     el.pause(1);    *    * @deprecated 4.0 Use the `delay` config to {@link #animate} instead.    * @param {Number} seconds The length of time to pause (in seconds)    * @return {Ext.Element} The Element    */    pause: function(ms) {        var me = this;        Ext.fx.Manager.setFxDefaults(me.id, {            delay: ms        });        return me;    },<span id='Ext-dom-Element-method-fadeIn'>    /**</span>     * Fade an element in (from transparent to opaque). The ending opacity can be specified using the `opacity`     * config option. Usage:     *     *     // default: fade in from opacity 0 to 100%     *     el.fadeIn();     *     *     // custom: fade in from opacity 0 to 75% over 2 seconds     *     el.fadeIn({ opacity: .75, duration: 2000});     *     *     // common config options shown with default values     *     el.fadeIn({     *         opacity: 1, //can be any value between 0 and 1 (e.g. .5)     *         easing: 'easeOut',     *         duration: 500     *     });     *     * @param {Object} options (optional) Object literal with any of the Fx config options     * @return {Ext.Element} The Element     */    fadeIn: function(o) {        var me = this;        me.animate(Ext.apply({}, o, {            opacity: 1,            internalListeners: {                beforeanimate: function(anim){                    // restore any visibility/display that may have                     // been applied by a fadeout animation                    if (me.isStyle('display', 'none')) {                        me.setDisplayed('');                    } else {                        me.show();                    }                 }            }        }));        return this;    },<span id='Ext-dom-Element-method-fadeOut'>    /**</span>     * Fade an element out (from opaque to transparent). The ending opacity can be specified using the `opacity`     * config option. Note that IE may require `useDisplay:true` in order to redisplay correctly.     * Usage:     *     *     // default: fade out from the element's current opacity to 0     *     el.fadeOut();     *     *     // custom: fade out from the element's current opacity to 25% over 2 seconds     *     el.fadeOut({ opacity: .25, duration: 2000});     *     *     // common config options shown with default values     *     el.fadeOut({     *         opacity: 0, //can be any value between 0 and 1 (e.g. .5)     *         easing: 'easeOut',     *         duration: 500,     *         remove: false,     *         useDisplay: false     *     });     *     * @param {Object} options (optional) Object literal with any of the Fx config options     * @return {Ext.Element} The Element     */    fadeOut: function(o) {        var me = this;        o = Ext.apply({            opacity: 0,            internalListeners: {                afteranimate: function(anim){                    var dom = me.dom;                    if (dom && anim.to.opacity === 0) {                        if (o.useDisplay) {                            me.setDisplayed(false);                        } else {                            me.hide();                        }                    }                         }            }        }, o);        me.animate(o);        return me;    },<span id='Ext-dom-Element-method-scale'>    /**</span>     * Animates the transition of an element's dimensions from a starting height/width to an ending height/width. This     * method is a convenience implementation of {@link #shift}. Usage:     *     *     // change height and width to 100x100 pixels     *     el.scale(100, 100);     *     *     // common config options shown with default values.  The height and width will default to     *     // the element's existing values if passed as null.     *     el.scale(     *         [element's width],     *         [element's height], {     *             easing: 'easeOut',     *             duration: 350     *         }     *     );     *     * @deprecated 4.0 Just use {@link #animate} instead.     * @param {Number} width The new width (pass undefined to keep the original width)     * @param {Number} height The new height (pass undefined to keep the original height)     * @param {Object} options (optional) Object literal with any of the Fx config options     * @return {Ext.Element} The Element     */    scale: function(w, h, o) {        this.animate(Ext.apply({}, o, {            width: w,            height: h        }));        return this;    },<span id='Ext-dom-Element-method-shift'>    /**</span>     * Animates the transition of any combination of an element's dimensions, xy position and/or opacity. Any of these     * properties not specified in the config object will not be changed. This effect requires that at least one new     * dimension, position or opacity setting must be passed in on the config object in order for the function to have     * any effect. Usage:     *     *     // slide the element horizontally to x position 200 while changing the height and opacity     *     el.shift({ x: 200, height: 50, opacity: .8 });     *     *     // common config options shown with default values.     *     el.shift({     *         width: [element's width],     *         height: [element's height],     *         x: [element's x position],     *         y: [element's y position],     *         opacity: [element's opacity],     *         easing: 'easeOut',     *         duration: 350     *     });     *     * @deprecated 4.0 Just use {@link #animate} instead.     * @param {Object} options Object literal with any of the Fx config options     * @return {Ext.Element} The Element     */    shift: function(config) {        this.animate(config);        return this;    }});</pre></body></html>
 |