Upgrade to ExtJS 3.3.1 - Released 11/30/2010
[extjs.git] / docs / source / Element.position-more.html
1 <html>
2 <head>
3   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    
4   <title>The source code</title>
5     <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
6     <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
7 </head>
8 <body  onload="prettyPrint();">
9     <pre class="prettyprint lang-js">/*!
10  * Ext JS Library 3.3.1
11  * Copyright(c) 2006-2010 Sencha Inc.
12  * licensing@sencha.com
13  * http://www.sencha.com/license
14  */
15 /**
16  * @class Ext.Element
17  */
18 Ext.Element.addMethods({
19     <div id="method-Ext.Element-setBox"></div>/**
20      * Sets the element's box. Use getBox() on another element to get a box obj. If animate is true then width, height, x and y will be animated concurrently.
21      * @param {Object} box The box to fill {x, y, width, height}
22      * @param {Boolean} adjust (optional) Whether to adjust for box-model issues automatically
23      * @param {Boolean/Object} animate (optional) true for the default animation or a standard Element animation config object
24      * @return {Ext.Element} this
25      */
26     setBox : function(box, adjust, animate){
27         var me = this,
28                 w = box.width, 
29                 h = box.height;
30         if((adjust && !me.autoBoxAdjust) && !me.isBorderBox()){
31            w -= (me.getBorderWidth("lr") + me.getPadding("lr"));
32            h -= (me.getBorderWidth("tb") + me.getPadding("tb"));
33         }
34         me.setBounds(box.x, box.y, w, h, me.animTest.call(me, arguments, animate, 2));
35         return me;
36     },
37
38     <div id="method-Ext.Element-getBox"></div>/**
39      * Return an object defining the area of this Element which can be passed to {@link #setBox} to
40      * set another Element's size/location to match this element.
41      * @param {Boolean} contentBox (optional) If true a box for the content of the element is returned.
42      * @param {Boolean} local (optional) If true the element's left and top are returned instead of page x/y.
43      * @return {Object} box An object in the format<pre><code>
44 {
45     x: &lt;Element's X position>,
46     y: &lt;Element's Y position>,
47     width: &lt;Element's width>,
48     height: &lt;Element's height>,
49     bottom: &lt;Element's lower bound>,
50     right: &lt;Element's rightmost bound>
51 }
52 </code></pre>
53      * The returned object may also be addressed as an Array where index 0 contains the X position
54      * and index 1 contains the Y position. So the result may also be used for {@link #setXY}
55      */
56         getBox : function(contentBox, local) {      
57             var me = this,
58                 xy,
59                 left,
60                 top,
61                 getBorderWidth = me.getBorderWidth,
62                 getPadding = me.getPadding, 
63                 l,
64                 r,
65                 t,
66                 b;
67         if(!local){
68             xy = me.getXY();
69         }else{
70             left = parseInt(me.getStyle("left"), 10) || 0;
71             top = parseInt(me.getStyle("top"), 10) || 0;
72             xy = [left, top];
73         }
74         var el = me.dom, w = el.offsetWidth, h = el.offsetHeight, bx;
75         if(!contentBox){
76             bx = {x: xy[0], y: xy[1], 0: xy[0], 1: xy[1], width: w, height: h};
77         }else{
78             l = getBorderWidth.call(me, "l") + getPadding.call(me, "l");
79             r = getBorderWidth.call(me, "r") + getPadding.call(me, "r");
80             t = getBorderWidth.call(me, "t") + getPadding.call(me, "t");
81             b = getBorderWidth.call(me, "b") + getPadding.call(me, "b");
82             bx = {x: xy[0]+l, y: xy[1]+t, 0: xy[0]+l, 1: xy[1]+t, width: w-(l+r), height: h-(t+b)};
83         }
84         bx.right = bx.x + bx.width;
85         bx.bottom = bx.y + bx.height;
86         return bx;
87         },
88         
89     <div id="method-Ext.Element-move"></div>/**
90      * Move this element relative to its current position.
91      * @param {String} direction Possible values are: "l" (or "left"), "r" (or "right"), "t" (or "top", or "up"), "b" (or "bottom", or "down").
92      * @param {Number} distance How far to move the element in pixels
93      * @param {Boolean/Object} animate (optional) true for the default animation or a standard Element animation config object
94      * @return {Ext.Element} this
95      */
96      move : function(direction, distance, animate){
97         var me = this,          
98                 xy = me.getXY(),
99                 x = xy[0],
100                 y = xy[1],              
101                 left = [x - distance, y],
102                 right = [x + distance, y],
103                 top = [x, y - distance],
104                 bottom = [x, y + distance],
105                 hash = {
106                         l :     left,
107                         left : left,
108                         r : right,
109                         right : right,
110                         t : top,
111                         top : top,
112                         up : top,
113                         b : bottom, 
114                         bottom : bottom,
115                         down : bottom                           
116                 };
117         
118             direction = direction.toLowerCase();    
119             me.moveTo(hash[direction][0], hash[direction][1], me.animTest.call(me, arguments, animate, 2));
120     },
121     
122     <div id="method-Ext.Element-setLeftTop"></div>/**
123      * Quick set left and top adding default units
124      * @param {String} left The left CSS property value
125      * @param {String} top The top CSS property value
126      * @return {Ext.Element} this
127      */
128      setLeftTop : function(left, top){
129             var me = this,
130                 style = me.dom.style;
131         style.left = me.addUnits(left);
132         style.top = me.addUnits(top);
133         return me;
134     },
135     
136     <div id="method-Ext.Element-getRegion"></div>/**
137      * Returns the region of the given element.
138      * The element must be part of the DOM tree to have a region (display:none or elements not appended return false).
139      * @return {Region} A Ext.lib.Region containing "top, left, bottom, right" member data.
140      */
141     getRegion : function(){
142         return Ext.lib.Dom.getRegion(this.dom);
143     },
144     
145     <div id="method-Ext.Element-setBounds"></div>/**
146      * Sets the element's position and size in one shot. If animation is true then width, height, x and y will be animated concurrently.
147      * @param {Number} x X value for new position (coordinates are page-based)
148      * @param {Number} y Y value for new position (coordinates are page-based)
149      * @param {Mixed} width The new width. This may be one of:<div class="mdetail-params"><ul>
150      * <li>A Number specifying the new width in this Element's {@link #defaultUnit}s (by default, pixels)</li>
151      * <li>A String used to set the CSS width style. Animation may <b>not</b> be used.
152      * </ul></div>
153      * @param {Mixed} height The new height. This may be one of:<div class="mdetail-params"><ul>
154      * <li>A Number specifying the new height in this Element's {@link #defaultUnit}s (by default, pixels)</li>
155      * <li>A String used to set the CSS height style. Animation may <b>not</b> be used.</li>
156      * </ul></div>
157      * @param {Boolean/Object} animate (optional) true for the default animation or a standard Element animation config object
158      * @return {Ext.Element} this
159      */
160     setBounds : function(x, y, width, height, animate){
161             var me = this;
162         if (!animate || !me.anim) {
163             me.setSize(width, height);
164             me.setLocation(x, y);
165         } else {
166             me.anim({points: {to: [x, y]}, 
167                          width: {to: me.adjustWidth(width)}, 
168                          height: {to: me.adjustHeight(height)}},
169                      me.preanim(arguments, 4), 
170                      'motion');
171         }
172         return me;
173     },
174
175     <div id="method-Ext.Element-setRegion"></div>/**
176      * Sets the element's position and size the specified region. If animation is true then width, height, x and y will be animated concurrently.
177      * @param {Ext.lib.Region} region The region to fill
178      * @param {Boolean/Object} animate (optional) true for the default animation or a standard Element animation config object
179      * @return {Ext.Element} this
180      */
181     setRegion : function(region, animate) {
182         return this.setBounds(region.left, region.top, region.right-region.left, region.bottom-region.top, this.animTest.call(this, arguments, animate, 1));
183     }
184 });</pre>    
185 </body>
186 </html>