| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822 | 
							- <!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
 
-  */
 
- (function() {
 
- var Element = Ext.dom.Element,
 
-     view = document.defaultView,
 
-     adjustDirect2DTableRe = /table-row|table-.*-group/,
 
-     INTERNAL = '_internal',
 
-     HIDDEN = 'hidden',
 
-     HEIGHT = 'height',
 
-     WIDTH = 'width',
 
-     ISCLIPPED = 'isClipped',
 
-     OVERFLOW = 'overflow',
 
-     OVERFLOWX = 'overflow-x',
 
-     OVERFLOWY = 'overflow-y',
 
-     ORIGINALCLIP = 'originalClip',
 
-     DOCORBODYRE = /#document|body/i,
 
-     // This reduces the lookup of 'me.styleHooks' by one hop in the prototype chain. It is
 
-     // the same object.
 
-     styleHooks,
 
-     edges, k, edge, borderWidth;
 
- if (!view || !view.getComputedStyle) {
 
-     Element.prototype.getStyle = function (property, inline) {
 
-         var me = this,
 
-             dom = me.dom,
 
-             multiple = typeof property != 'string',
 
-             hooks = me.styleHooks,
 
-             prop = property,
 
-             props = prop,
 
-             len = 1,
 
-             isInline = inline,
 
-             camel, domStyle, values, hook, out, style, i;
 
-         if (multiple) {
 
-             values = {};
 
-             prop = props[0];
 
-             i = 0;
 
-             if (!(len = props.length)) {
 
-                 return values;
 
-             }
 
-         }
 
-         if (!dom || dom.documentElement) {
 
-             return values || '';
 
-         }
 
-         domStyle = dom.style;
 
-         if (inline) {
 
-             style = domStyle;
 
-         } else {
 
-             style = dom.currentStyle;
 
-             // fallback to inline style if rendering context not available
 
-             if (!style) {
 
-                 isInline = true;
 
-                 style = domStyle;
 
-             }
 
-         }
 
-         do {
 
-             hook = hooks[prop];
 
-             if (!hook) {
 
-                 hooks[prop] = hook = { name: Element.normalize(prop) };
 
-             }
 
-             if (hook.get) {
 
-                 out = hook.get(dom, me, isInline, style);
 
-             } else {
 
-                 camel = hook.name;
 
-                 // In some cases, IE6 will throw Invalid Argument exceptions for properties
 
-                 // like fontSize (/examples/tabs/tabs.html in 4.0 used to exhibit this but
 
-                 // no longer does due to font style changes). There is a real cost to a try
 
-                 // block, so we avoid it where possible...
 
-                 if (hook.canThrow) {
 
-                     try {
 
-                         out = style[camel];
 
-                     } catch (e) {
 
-                         out = '';
 
-                     }
 
-                 } else {
 
-                     // EXTJSIV-5657 - In IE9 quirks mode there is a chance that VML root element 
 
-                     // has neither `currentStyle` nor `style`. Return '' this case.
 
-                     out = style ? style[camel] : '';
 
-                 }
 
-             }
 
-             if (!multiple) {
 
-                 return out;
 
-             }
 
-             values[prop] = out;
 
-             prop = props[++i];
 
-         } while (i < len);
 
-         return values;
 
-     };
 
- }
 
- Element.override({
 
-     getHeight: function(contentHeight, preciseHeight) {
 
-         var me = this,
 
-             dom = me.dom,
 
-             hidden = me.isStyle('display', 'none'),
 
-             height,
 
-             floating;
 
-         if (hidden) {
 
-             return 0;
 
-         }
 
-         height = Math.max(dom.offsetHeight, dom.clientHeight) || 0;
 
-         // IE9 Direct2D dimension rounding bug
 
-         if (Ext.supports.Direct2DBug) {
 
-             floating = me.adjustDirect2DDimension(HEIGHT);
 
-             if (preciseHeight) {
 
-                 height += floating;
 
-             }
 
-             else if (floating > 0 && floating < 0.5) {
 
-                 height++;
 
-             }
 
-         }
 
-         if (contentHeight) {
 
-             height -= me.getBorderWidth("tb") + me.getPadding("tb");
 
-         }
 
-         return (height < 0) ? 0 : height;
 
-     },
 
-     getWidth: function(contentWidth, preciseWidth) {
 
-         var me = this,
 
-             dom = me.dom,
 
-             hidden = me.isStyle('display', 'none'),
 
-             rect, width, floating;
 
-         if (hidden) {
 
-             return 0;
 
-         }
 
-         // Gecko will in some cases report an offsetWidth that is actually less than the width of the
 
-         // text contents, because it measures fonts with sub-pixel precision but rounds the calculated
 
-         // value down. Using getBoundingClientRect instead of offsetWidth allows us to get the precise
 
-         // subpixel measurements so we can force them to always be rounded up. See
 
-         // https://bugzilla.mozilla.org/show_bug.cgi?id=458617
 
-         // Rounding up ensures that the width includes the full width of the text contents.
 
-         if (Ext.supports.BoundingClientRect) {
 
-             rect = dom.getBoundingClientRect();
 
-             width = rect.right - rect.left;
 
-             width = preciseWidth ? width : Math.ceil(width);
 
-         } else {
 
-             width = dom.offsetWidth;
 
-         }
 
-         width = Math.max(width, dom.clientWidth) || 0;
 
-         // IE9 Direct2D dimension rounding bug
 
-         if (Ext.supports.Direct2DBug) {
 
-             // get the fractional portion of the sub-pixel precision width of the element's text contents
 
-             floating = me.adjustDirect2DDimension(WIDTH);
 
-             if (preciseWidth) {
 
-                 width += floating;
 
-             }
 
-             // IE9 also measures fonts with sub-pixel precision, but unlike Gecko, instead of rounding the offsetWidth down,
 
-             // it rounds to the nearest integer. This means that in order to ensure that the width includes the full
 
-             // width of the text contents we need to increment the width by 1 only if the fractional portion is less than 0.5
 
-             else if (floating > 0 && floating < 0.5) {
 
-                 width++;
 
-             }
 
-         }
 
-         if (contentWidth) {
 
-             width -= me.getBorderWidth("lr") + me.getPadding("lr");
 
-         }
 
-         return (width < 0) ? 0 : width;
 
-     },
 
-     setWidth: function(width, animate) {
 
-         var me = this;
 
-         width = me.adjustWidth(width);
 
-         if (!animate || !me.anim) {
 
-             me.dom.style.width = me.addUnits(width);
 
-         }
 
-         else {
 
-             if (!Ext.isObject(animate)) {
 
-                 animate = {};
 
-             }
 
-             me.animate(Ext.applyIf({
 
-                 to: {
 
-                     width: width
 
-                 }
 
-             }, animate));
 
-         }
 
-         return me;
 
-     },
 
-     setHeight : function(height, animate) {
 
-         var me = this;
 
-         height = me.adjustHeight(height);
 
-         if (!animate || !me.anim) {
 
-             me.dom.style.height = me.addUnits(height);
 
-         }
 
-         else {
 
-             if (!Ext.isObject(animate)) {
 
-                 animate = {};
 
-             }
 
-             me.animate(Ext.applyIf({
 
-                 to: {
 
-                     height: height
 
-                 }
 
-             }, animate));
 
-         }
 
-         return me;
 
-     },
 
-     applyStyles: function(style) {
 
-         Ext.DomHelper.applyStyles(this.dom, style);
 
-         return this;
 
-     },
 
-     setSize: function(width, height, animate) {
 
-         var me = this;
 
-         if (Ext.isObject(width)) { // in case of object from getSize()
 
-             animate = height;
 
-             height = width.height;
 
-             width = width.width;
 
-         }
 
-         width = me.adjustWidth(width);
 
-         height = me.adjustHeight(height);
 
-         if (!animate || !me.anim) {
 
-             me.dom.style.width = me.addUnits(width);
 
-             me.dom.style.height = me.addUnits(height);
 
-         }
 
-         else {
 
-             if (animate === true) {
 
-                 animate = {};
 
-             }
 
-             me.animate(Ext.applyIf({
 
-                 to: {
 
-                     width: width,
 
-                     height: height
 
-                 }
 
-             }, animate));
 
-         }
 
-         return me;
 
-     },
 
-     getViewSize : function() {
 
-         var me = this,
 
-             dom = me.dom,
 
-             isDoc = DOCORBODYRE.test(dom.nodeName),
 
-             ret;
 
-         // If the body, use static methods
 
-         if (isDoc) {
 
-             ret = {
 
-                 width : Element.getViewWidth(),
 
-                 height : Element.getViewHeight()
 
-             };
 
-         } else {
 
-             ret = {
 
-                 width : dom.clientWidth,
 
-                 height : dom.clientHeight
 
-             };
 
-         }
 
-         return ret;
 
-     },
 
-     getSize: function(contentSize) {
 
-         return {width: this.getWidth(contentSize), height: this.getHeight(contentSize)};
 
-     },
 
-     // TODO: Look at this
 
-     // private  ==> used by Fx
 
-     adjustWidth : function(width) {
 
-         var me = this,
 
-             isNum = (typeof width == 'number');
 
-         if (isNum && me.autoBoxAdjust && !me.isBorderBox()) {
 
-             width -= (me.getBorderWidth("lr") + me.getPadding("lr"));
 
-         }
 
-         return (isNum && width < 0) ? 0 : width;
 
-     },
 
-     // private   ==> used by Fx
 
-     adjustHeight : function(height) {
 
-         var me = this,
 
-             isNum = (typeof height == "number");
 
-         if (isNum && me.autoBoxAdjust && !me.isBorderBox()) {
 
-             height -= (me.getBorderWidth("tb") + me.getPadding("tb"));
 
-         }
 
-         return (isNum && height < 0) ? 0 : height;
 
-     },
 
- <span id='Ext-dom-Element-method-getColor'>    /**
 
- </span>     * Return the CSS color for the specified CSS attribute. rgb, 3 digit (like `#fff`) and valid values
 
-      * are convert to standard 6 digit hex color.
 
-      * @param {String} attr The css attribute
 
-      * @param {String} defaultValue The default value to use when a valid color isn't found
 
-      * @param {String} [prefix] defaults to #. Use an empty string when working with
 
-      * color anims.
 
-      */
 
-     getColor : function(attr, defaultValue, prefix) {
 
-         var v = this.getStyle(attr),
 
-             color = prefix || prefix === '' ? prefix : '#',
 
-             h, len, i=0;
 
-         if (!v || (/transparent|inherit/.test(v))) {
 
-             return defaultValue;
 
-         }
 
-         if (/^r/.test(v)) {
 
-              v = v.slice(4, v.length - 1).split(',');
 
-              len = v.length;
 
-              for (; i<len; i++) {
 
-                 h = parseInt(v[i], 10);
 
-                 color += (h < 16 ? '0' : '') + h.toString(16);
 
-             }
 
-         } else {
 
-             v = v.replace('#', '');
 
-             color += v.length == 3 ? v.replace(/^(\w)(\w)(\w)$/, '$1$1$2$2$3$3') : v;
 
-         }
 
-         return(color.length > 5 ? color.toLowerCase() : defaultValue);
 
-     },
 
- <span id='Ext-dom-Element-method-setOpacity'>    /**
 
- </span>     * Set the opacity of the element
 
-      * @param {Number} opacity The new opacity. 0 = transparent, .5 = 50% visibile, 1 = fully visible, etc
 
-      * @param {Boolean/Object} [animate] a standard Element animation config object or `true` for
 
-      * the default animation (`{duration: 350, easing: 'easeIn'}`)
 
-      * @return {Ext.dom.Element} this
 
-      */
 
-     setOpacity: function(opacity, animate) {
 
-         var me = this;
 
-         if (!me.dom) {
 
-             return me;
 
-         }
 
-         if (!animate || !me.anim) {
 
-             me.setStyle('opacity', opacity);
 
-         }
 
-         else {
 
-             if (typeof animate != 'object') {
 
-                 animate = {
 
-                     duration: 350,
 
-                     easing: 'ease-in'
 
-                 };
 
-             }
 
-             me.animate(Ext.applyIf({
 
-                 to: {
 
-                     opacity: opacity
 
-                 }
 
-             }, animate));
 
-         }
 
-         return me;
 
-     },
 
- <span id='Ext-dom-Element-method-clearOpacity'>    /**
 
- </span>     * Clears any opacity settings from this element. Required in some cases for IE.
 
-      * @return {Ext.dom.Element} this
 
-      */
 
-     clearOpacity : function() {
 
-         return this.setOpacity('');
 
-     },
 
- <span id='Ext-dom-Element-method-adjustDirect2DDimension'>    /**
 
- </span>     * @private
 
-      * Returns 1 if the browser returns the subpixel dimension rounded to the lowest pixel.
 
-      * @return {Number} 0 or 1
 
-      */
 
-     adjustDirect2DDimension: function(dimension) {
 
-         var me = this,
 
-             dom = me.dom,
 
-             display = me.getStyle('display'),
 
-             inlineDisplay = dom.style.display,
 
-             inlinePosition = dom.style.position,
 
-             originIndex = dimension === WIDTH ? 0 : 1,
 
-             currentStyle = dom.currentStyle,
 
-             floating;
 
-         if (display === 'inline') {
 
-             dom.style.display = 'inline-block';
 
-         }
 
-         dom.style.position = display.match(adjustDirect2DTableRe) ? 'absolute' : 'static';
 
-         // floating will contain digits that appears after the decimal point
 
-         // if height or width are set to auto we fallback to msTransformOrigin calculation
 
-         
 
-         // Use currentStyle here instead of getStyle. In some difficult to reproduce 
 
-         // instances it resets the scrollWidth of the element
 
-         floating = (parseFloat(currentStyle[dimension]) || parseFloat(currentStyle.msTransformOrigin.split(' ')[originIndex]) * 2) % 1;
 
-         dom.style.position = inlinePosition;
 
-         if (display === 'inline') {
 
-             dom.style.display = inlineDisplay;
 
-         }
 
-         return floating;
 
-     },
 
- <span id='Ext-dom-Element-method-clip'>    /**
 
- </span>     * Store the current overflow setting and clip overflow on the element - use {@link #unclip} to remove
 
-      * @return {Ext.dom.Element} this
 
-      */
 
-     clip : function() {
 
-         var me = this,
 
-             data = (me.$cache || me.getCache()).data,
 
-             style;
 
-         if (!data[ISCLIPPED]) {
 
-             data[ISCLIPPED] = true;
 
-             style = me.getStyle([OVERFLOW, OVERFLOWX, OVERFLOWY]);
 
-             data[ORIGINALCLIP] = {
 
-                 o: style[OVERFLOW],
 
-                 x: style[OVERFLOWX],
 
-                 y: style[OVERFLOWY]
 
-             };
 
-             me.setStyle(OVERFLOW, HIDDEN);
 
-             me.setStyle(OVERFLOWX, HIDDEN);
 
-             me.setStyle(OVERFLOWY, HIDDEN);
 
-         }
 
-         return me;
 
-     },
 
- <span id='Ext-dom-Element-method-unclip'>    /**
 
- </span>     * Return clipping (overflow) to original clipping before {@link #clip} was called
 
-      * @return {Ext.dom.Element} this
 
-      */
 
-     unclip : function() {
 
-         var me = this,
 
-             data = (me.$cache || me.getCache()).data,
 
-             clip;
 
-         if (data[ISCLIPPED]) {
 
-             data[ISCLIPPED] = false;
 
-             clip = data[ORIGINALCLIP];
 
-             if (clip.o) {
 
-                 me.setStyle(OVERFLOW, clip.o);
 
-             }
 
-             if (clip.x) {
 
-                 me.setStyle(OVERFLOWX, clip.x);
 
-             }
 
-             if (clip.y) {
 
-                 me.setStyle(OVERFLOWY, clip.y);
 
-             }
 
-         }
 
-         return me;
 
-     },
 
- <span id='Ext-dom-Element-method-boxWrap'>    /**
 
- </span>     * Wraps the specified element with a special 9 element markup/CSS block that renders by default as
 
-      * a gray container with a gradient background, rounded corners and a 4-way shadow.
 
-      *
 
-      * This special markup is used throughout Ext when box wrapping elements ({@link Ext.button.Button},
 
-      * {@link Ext.panel.Panel} when {@link Ext.panel.Panel#frame frame=true}, {@link Ext.window.Window}).
 
-      * The markup is of this form:
 
-      *
 
-      *     Ext.dom.Element.boxMarkup =
 
-      *     '<div class="{0}-tl"><div class="{0}-tr"><div class="{0}-tc"></div></div></div>
 
-      *     <div class="{0}-ml"><div class="{0}-mr"><div class="{0}-mc"></div></div></div>
 
-      *     <div class="{0}-bl"><div class="{0}-br"><div class="{0}-bc"></div></div></div>';
 
-      *
 
-      * Example usage:
 
-      *
 
-      *     // Basic box wrap
 
-      *     Ext.get("foo").boxWrap();
 
-      *
 
-      *     // You can also add a custom class and use CSS inheritance rules to customize the box look.
 
-      *     // 'x-box-blue' is a built-in alternative -- look at the related CSS definitions as an example
 
-      *     // for how to create a custom box wrap style.
 
-      *     Ext.get("foo").boxWrap().addCls("x-box-blue");
 
-      *
 
-      * @param {String} [class='x-box'] A base CSS class to apply to the containing wrapper element.
 
-      * Note that there are a number of CSS rules that are dependent on this name to make the overall effect work,
 
-      * so if you supply an alternate base class, make sure you also supply all of the necessary rules.
 
-      * @return {Ext.dom.Element} The outermost wrapping element of the created box structure.
 
-      */
 
-     boxWrap : function(cls) {
 
-         cls = cls || Ext.baseCSSPrefix + 'box';
 
-         var el = Ext.get(this.insertHtml("beforeBegin", "<div class='" + cls + "'>" + Ext.String.format(Element.boxMarkup, cls) + "</div>"));
 
-         Ext.DomQuery.selectNode('.' + cls + '-mc', el.dom).appendChild(this.dom);
 
-         return el;
 
-     },
 
- <span id='Ext-dom-Element-method-getComputedHeight'>    /**
 
- </span>     * Returns either the offsetHeight or the height of this element based on CSS height adjusted by padding or borders
 
-      * when needed to simulate offsetHeight when offsets aren't available. This may not work on display:none elements
 
-      * if a height has not been set using CSS.
 
-      * @return {Number}
 
-      */
 
-     getComputedHeight : function() {
 
-         var me = this,
 
-             h = Math.max(me.dom.offsetHeight, me.dom.clientHeight);
 
-         if (!h) {
 
-             h = parseFloat(me.getStyle(HEIGHT)) || 0;
 
-             if (!me.isBorderBox()) {
 
-                 h += me.getFrameWidth('tb');
 
-             }
 
-         }
 
-         return h;
 
-     },
 
- <span id='Ext-dom-Element-method-getComputedWidth'>    /**
 
- </span>     * Returns either the offsetWidth or the width of this element based on CSS width adjusted by padding or borders
 
-      * when needed to simulate offsetWidth when offsets aren't available. This may not work on display:none elements
 
-      * if a width has not been set using CSS.
 
-      * @return {Number}
 
-      */
 
-     getComputedWidth : function() {
 
-         var me = this,
 
-             w = Math.max(me.dom.offsetWidth, me.dom.clientWidth);
 
-         if (!w) {
 
-             w = parseFloat(me.getStyle(WIDTH)) || 0;
 
-             if (!me.isBorderBox()) {
 
-                 w += me.getFrameWidth('lr');
 
-             }
 
-         }
 
-         return w;
 
-     },
 
- <span id='Ext-dom-Element-method-getFrameWidth'>    /**
 
- </span>     * Returns the sum width of the padding and borders for the passed "sides". See getBorderWidth()
 
-      * for more information about the sides.
 
-      * @param {String} sides
 
-      * @return {Number}
 
-      */
 
-     getFrameWidth : function(sides, onlyContentBox) {
 
-         return (onlyContentBox && this.isBorderBox()) ? 0 : (this.getPadding(sides) + this.getBorderWidth(sides));
 
-     },
 
- <span id='Ext-dom-Element-method-addClsOnOver'>    /**
 
- </span>     * Sets up event handlers to add and remove a css class when the mouse is over this element
 
-      * @param {String} className The class to add
 
-      * @param {Function} [testFn] A test function to execute before adding the class. The passed parameter
 
-      * will be the Element instance. If this functions returns false, the class will not be added.
 
-      * @param {Object} [scope] The scope to execute the testFn in.
 
-      * @return {Ext.dom.Element} this
 
-      */
 
-     addClsOnOver : function(className, testFn, scope) {
 
-         var me = this,
 
-             dom = me.dom,
 
-             hasTest = Ext.isFunction(testFn);
 
-             
 
-         me.hover(
 
-             function() {
 
-                 if (hasTest && testFn.call(scope || me, me) === false) {
 
-                     return;
 
-                 }
 
-                 Ext.fly(dom, INTERNAL).addCls(className);
 
-             },
 
-             function() {
 
-                 Ext.fly(dom, INTERNAL).removeCls(className);
 
-             }
 
-         );
 
-         return me;
 
-     },
 
- <span id='Ext-dom-Element-method-addClsOnFocus'>    /**
 
- </span>     * Sets up event handlers to add and remove a css class when this element has the focus
 
-      * @param {String} className The class to add
 
-      * @param {Function} [testFn] A test function to execute before adding the class. The passed parameter
 
-      * will be the Element instance. If this functions returns false, the class will not be added.
 
-      * @param {Object} [scope] The scope to execute the testFn in.
 
-      * @return {Ext.dom.Element} this
 
-      */
 
-     addClsOnFocus : function(className, testFn, scope) {
 
-         var me = this,
 
-             dom = me.dom,
 
-             hasTest = Ext.isFunction(testFn);
 
-             
 
-         me.on("focus", function() {
 
-             if (hasTest && testFn.call(scope || me, me) === false) {
 
-                 return false;
 
-             }
 
-             Ext.fly(dom, INTERNAL).addCls(className);
 
-         });
 
-         me.on("blur", function() {
 
-             Ext.fly(dom, INTERNAL).removeCls(className);
 
-         });
 
-         return me;
 
-     },
 
- <span id='Ext-dom-Element-method-addClsOnClick'>    /**
 
- </span>     * Sets up event handlers to add and remove a css class when the mouse is down and then up on this element (a click effect)
 
-      * @param {String} className The class to add
 
-      * @param {Function} [testFn] A test function to execute before adding the class. The passed parameter
 
-      * will be the Element instance. If this functions returns false, the class will not be added.
 
-      * @param {Object} [scope] The scope to execute the testFn in.
 
-      * @return {Ext.dom.Element} this
 
-      */
 
-     addClsOnClick : function(className, testFn, scope) {
 
-         var me = this,
 
-             dom = me.dom,
 
-             hasTest = Ext.isFunction(testFn);
 
-             
 
-         me.on("mousedown", function() {
 
-             if (hasTest && testFn.call(scope || me, me) === false) {
 
-                 return false;
 
-             }
 
-             Ext.fly(dom, INTERNAL).addCls(className);
 
-             var d = Ext.getDoc(),
 
-                 fn = function() {
 
-                     Ext.fly(dom, INTERNAL).removeCls(className);
 
-                     d.removeListener("mouseup", fn);
 
-                 };
 
-             d.on("mouseup", fn);
 
-         });
 
-         return me;
 
-     },
 
- <span id='Ext-dom-Element-method-getStyleSize'>    /**
 
- </span>     * Returns the dimensions of the element available to lay content out in.
 
-      *
 
-      * getStyleSize utilizes prefers style sizing if present, otherwise it chooses the larger of offsetHeight/clientHeight and
 
-      * offsetWidth/clientWidth. To obtain the size excluding scrollbars, use getViewSize.
 
-      *
 
-      * Sizing of the document body is handled at the adapter level which handles special cases for IE and strict modes, etc.
 
-      *
 
-      * @return {Object} Object describing width and height.
 
-      * @return {Number} return.width
 
-      * @return {Number} return.height
 
-      */
 
-     getStyleSize : function() {
 
-         var me = this,
 
-             d = this.dom,
 
-             isDoc = DOCORBODYRE.test(d.nodeName),
 
-             s ,
 
-             w, h;
 
-         // If the body, use static methods
 
-         if (isDoc) {
 
-             return {
 
-                 width : Element.getViewWidth(),
 
-                 height : Element.getViewHeight()
 
-             };
 
-         }
 
-         s = me.getStyle([HEIGHT, WIDTH], true);  //seek inline
 
-         // Use Styles if they are set
 
-         if (s.width && s.width != 'auto') {
 
-             w = parseFloat(s.width);
 
-             if (me.isBorderBox()) {
 
-                 w -= me.getFrameWidth('lr');
 
-             }
 
-         }
 
-         // Use Styles if they are set
 
-         if (s.height && s.height != 'auto') {
 
-             h = parseFloat(s.height);
 
-             if (me.isBorderBox()) {
 
-                 h -= me.getFrameWidth('tb');
 
-             }
 
-         }
 
-         // Use getWidth/getHeight if style not set.
 
-         return {width: w || me.getWidth(true), height: h || me.getHeight(true)};
 
-     },
 
- <span id='Ext-dom-Element-method-selectable'>    /**
 
- </span>     * Enable text selection for this element (normalized across browsers)
 
-      * @return {Ext.Element} this
 
-      */
 
-     selectable : function() {
 
-         var me = this;
 
-         me.dom.unselectable = "off";
 
-         // Prevent it from bubles up and enables it to be selectable
 
-         me.on('selectstart', function (e) {
 
-             e.stopPropagation();
 
-             return true;
 
-         });
 
-         me.applyStyles("-moz-user-select: text; -khtml-user-select: text;");
 
-         me.removeCls(Ext.baseCSSPrefix + 'unselectable');
 
-         return me;
 
-     },
 
- <span id='Ext-dom-Element-method-unselectable'>    /**
 
- </span>     * Disables text selection for this element (normalized across browsers)
 
-      * @return {Ext.dom.Element} this
 
-      */
 
-     unselectable : function() {
 
-         var me = this;
 
-         me.dom.unselectable = "on";
 
-         me.swallowEvent("selectstart", true);
 
-         me.applyStyles("-moz-user-select:-moz-none;-khtml-user-select:none;");
 
-         me.addCls(Ext.baseCSSPrefix + 'unselectable');
 
-         return me;
 
-     }
 
- });
 
- Element.prototype.styleHooks = styleHooks = Ext.dom.AbstractElement.prototype.styleHooks;
 
- if (Ext.isIE6 || Ext.isIE7) {
 
-     styleHooks.fontSize = styleHooks['font-size'] = {
 
-         name: 'fontSize',
 
-         canThrow: true
 
-     };
 
-     
 
-     styleHooks.fontStyle = styleHooks['font-style'] = {
 
-         name: 'fontStyle',
 
-         canThrow: true
 
-     };
 
-     
 
-     styleHooks.fontFamily = styleHooks['font-family'] = {
 
-         name: 'fontFamily',
 
-         canThrow: true
 
-     };
 
- }
 
- // override getStyle for border-*-width
 
- if (Ext.isIEQuirks || Ext.isIE && Ext.ieVersion <= 8) {
 
-     function getBorderWidth (dom, el, inline, style) {
 
-         if (style[this.styleName] == 'none') {
 
-             return '0px';
 
-         }
 
-         return style[this.name];
 
-     }
 
-     edges = ['Top','Right','Bottom','Left'];
 
-     k = edges.length;
 
-     while (k--) {
 
-         edge = edges[k];
 
-         borderWidth = 'border' + edge + 'Width';
 
-         styleHooks['border-'+edge.toLowerCase()+'-width'] = styleHooks[borderWidth] = {
 
-             name: borderWidth,
 
-             styleName: 'border' + edge + 'Style',
 
-             get: getBorderWidth
 
-         };
 
-     }
 
- }
 
- }());
 
- Ext.onReady(function () {
 
-     var opacityRe = /alpha\(opacity=(.*)\)/i,
 
-         trimRe = /^\s+|\s+$/g,
 
-         hooks = Ext.dom.Element.prototype.styleHooks;
 
-     // Ext.supports flags are not populated until onReady...
 
-     hooks.opacity = {
 
-         name: 'opacity',
 
-         afterSet: function(dom, value, el) {
 
-             if (el.isLayer) {
 
-                 el.onOpacitySet(value);
 
-             }
 
-         }
 
-     };
 
-     if (!Ext.supports.Opacity && Ext.isIE) {
 
-         Ext.apply(hooks.opacity, {
 
-             get: function (dom) {
 
-                 var filter = dom.style.filter,
 
-                     match, opacity;
 
-                 if (filter.match) {
 
-                     match = filter.match(opacityRe);
 
-                     if (match) {
 
-                         opacity = parseFloat(match[1]);
 
-                         if (!isNaN(opacity)) {
 
-                             return opacity ? opacity / 100 : 0;
 
-                         }
 
-                     }
 
-                 }
 
-                 return 1;
 
-             },
 
-             set: function (dom, value) {
 
-                 var style = dom.style,
 
-                     val = style.filter.replace(opacityRe, '').replace(trimRe, '');
 
-                 style.zoom = 1; // ensure dom.hasLayout
 
-                 // value can be a number or '' or null... so treat falsey as no opacity
 
-                 if (typeof(value) == 'number' && value >= 0 && value < 1) {
 
-                     value *= 100;
 
-                     style.filter = val + (val.length ? ' ' : '') + 'alpha(opacity='+value+')';
 
-                 } else {
 
-                     style.filter = val;
 
-                 }
 
-             }  
 
-         });
 
-     }
 
-     // else there is no work around for the lack of opacity support. Should not be a
 
-     // problem given that this has been supported for a long time now...
 
- });
 
- </pre>
 
- </body>
 
- </html>
 
 
  |