source: extensions/Autosize/js/jquery.dimensions.js @ 7816

Last change on this file since 7816 was 7816, checked in by cljosse, 13 years ago

[Autosize][beta] Improvement compatibility Gmaps, rvmaps,pamooramic.

File size: 11.3 KB
Line 
1/* Copyright (c) 2007 Paul Bakaus (paul.bakaus@googlemail.com) and Brandon Aaron (brandon.aaron@gmail.com || http://brandonaaron.net)
2 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
3 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
4 *
5 * $LastChangedDate: 2007-12-20 08:43:48 -0600 (Thu, 20 Dec 2007) $
6 * $Rev: 4257 $
7 *
8 * $LastChangedDate: 2010-10-23 08:43:48 -0600 (Thu, 20 Dec 2007) $
9 * By cljosse
10 * Version: 1.2
11 *
12 * Requires: jQuery 1.2+
13 *
14 */
15(function (jQuery) {
16    jQuery.dimensions = { version: '1.3' };
17    /*
18    * Interception Height, Width
19    */
20    jQuery.each(['Height', 'Width'],
21            function (i, name) {
22                jQuery.fn['inner' + name] = function () {
23                    if (!this[0]) return;
24                    var torl = name == 'Height' ? 'Top' : 'Left',
25                        borr = name == 'Height' ? 'Bottom' : 'Right';
26                    return this.is(':visible') ? this[0]['client' + name] : num(this, name.toLowerCase()) + num(this, 'padding' + torl) + num(this, 'padding' + borr);
27                };
28
29                jQuery.fn['outer' + name] = function (options) {
30                    if (!this[0]) return;
31                    var torl = name == 'Height' ? 'Top' : 'Left',
32                        borr = name == 'Height' ? 'Bottom' : 'Right';
33                    options = jQuery.extend({ margin: false },
34                                                options || {});
35                    var val = this.is(':visible') ? this[0]['offset' + name] :
36                        num(this,
37                        name.toLowerCase()) +
38                        num(this, 'border' + torl + 'Width') +
39                        num(this, 'border' + borr + 'Width') +
40                        num(this, 'padding' + torl) +
41                        num(this, 'padding' + borr);
42                    return val + (options.margin ? (num(this, 'margin' + torl) + num(this, 'margin' + borr)) : 0);
43                };
44            });
45    /*
46    *
47    */
48    jQuery.each(['Left', 'Top'],
49      function (i, name) {
50          jQuery.fn['scroll' + name] = function (val) {
51              if (!this[0]) return;
52              return val != undefined ? this.each(function () {
53                  this == window || this == document ? window.scrollTo(name == 'Left' ? val : $(window)['scrollLeft'](),
54           name == 'Top' ? val : $(window)['scrollTop']()) : this['scroll' + name] = val;
55              }) : this[0] == window || this[0] == document ? self[(name == 'Left' ? 'pageXOffset' : 'pageYOffset')] || jQuery.boxModel && document.documentElement['scroll' + name] || document.body['scroll' + name] : this[0]['scroll' + name];
56          };
57
58      });
59    jQuery.fn.extend({
60
61        infos: function () {
62            var width = 0, height = 0;
63            var elem = jQuery(this).get(0);
64
65
66            var left = 0, top = 0, offset, parentOffset, offsetParent, results;
67            var borderwidth = { width: "0 0 0 0",
68                top: 0,
69                left: 0,
70                right: 0,
71                bottom: 0
72            }
73            var padding = { padding: "0 0 0 0",
74                top: 0,
75                left: 0,
76                right: 0,
77                bottom: 0
78            };
79            var margin = { margin: "0 0 0 0",
80                top: 0,
81                left: 0,
82                right: 0,
83                bottom: 0
84            };
85            //=====================================================================
86            results = {
87                position: jQuery(this).attr("position"),
88                top: 0,
89                left: 0,
90                width: 0,
91                height: 0,
92                right: 0,
93                bottom: 0,
94                borderwidth: borderwidth,
95                padding: padding,
96                margin: margin, id: "", nodeName: ""
97            };
98            ;
99            if (elem) {
100                id = ""; nodeName = "";
101                if (elem.id) id = elem.id;
102                if (elem.nodeName) nodeName = elem.nodeName;
103
104                if (elem == window) {
105                    Position = { top: 0, left: 0 };
106                } else {
107                    Position = jQuery(elem).position();
108                }
109                left = Position.left;
110                top = Position.top;
111                if (elem == window) {
112                    width = jQuery(elem).width();
113                    height = jQuery(elem).height();
114                } else {
115                    width = jQuery(elem).outerWidth();
116                    height = jQuery(elem).outerHeight();
117
118
119
120                    borderwidth.left = jQuery(elem).Get_Val_int(jQuery(elem).css("borderLeftWidth"));
121                    borderwidth.right = jQuery(elem).Get_Val_int(jQuery(elem).css("borderRightWidth"));
122                    borderwidth.top = jQuery(elem).Get_Val_int(jQuery(elem).css("borderTopWidth"));
123                    borderwidth.bottom = jQuery(elem).Get_Val_int(jQuery(elem).css("borderBottomWidth"));
124                    try {
125                        borderwidth.width = jQuery(elem).Get_Val_int(jQuery(elem).css("borderWidth"));
126                    } catch (e) {
127                        borderwidth.width = '"' + borderwidth.left + ' ' + borderwidth.top + ' ' + borderwidth.right + ' ' + borderwidth.bottom + '"';
128                    }
129
130
131                    margin.left = jQuery(elem).Get_Val_int(jQuery(elem).css("marginLeft"));
132                    margin.right = jQuery(elem).Get_Val_int(jQuery(elem).css("marginRight"));
133                    margin.top = jQuery(elem).Get_Val_int(jQuery(elem).css("marginTop"));
134                    margin.bottom = jQuery(elem).Get_Val_int(jQuery(elem).css("marginBottom"));
135                    try {
136                        margin.margin = jQuery(elem).Get_Val_int(jQuery(elem).css("margin"));
137                    } catch (e) {
138                        margin.margin = '"' + margin.left + ' ' + margin.top + ' ' + margin.right + ' ' + margin.bottom + '"';
139                    }
140
141                    padding.left = jQuery(elem).Get_Val_int(jQuery(elem).css("paddingLeft"));
142                    padding.right = jQuery(elem).Get_Val_int(jQuery(elem).css("paddingRight"));
143                    padding.top = jQuery(elem).Get_Val_int(jQuery(elem).css("paddingTop"));
144                    padding.bottom = jQuery(elem).Get_Val_int(jQuery(elem).css("paddingBottom"));
145                    try { padding.padding = jQuery(elem).Get_Val_int(jQuery(elem).css("padding")); } catch (e) {
146                        padding.padding = '"' + padding.left + ' ' + padding.top + ' ' + padding.right + ' ' + padding.bottom + '"';
147                    }
148                }
149
150                results = {
151                    position: jQuery(this).attr("position"),
152                    top: top,
153                    left: left,
154                    width: width,
155                    height: height,
156                    right: left + width,
157                    bottom: top + height,
158                    borderwidth: borderwidth,
159                    margin: margin,
160                    padding: padding,
161                    id: id,
162                    nodeName: nodeName
163                };
164
165                return results
166            } return results;
167        },
168        /*
169        * Position de l'object elem
170        */
171        position: function () {
172            var left = 0, top = 0, elem = this[0], offset, parentOffset, offsetParent, results;
173
174            if (elem) {
175                offsetParent = this.offsetParent();
176                offset = this.offset();
177
178                if (offsetParent) {
179                    if (elem == window) {
180                        parentOffset = { top: 0, left: 0 };
181                    } else if (typeof (offsetParent.offset) != "undefined")
182                        parentOffset = offsetParent.offset();
183                    else
184                        parentOffset = { top: 0, left: 0 };
185
186                    if (!offset)
187                        offset = { top: 0, left: 0 };
188
189                    offset.top -= num(elem, 'marginTop');
190                    offset.left -= num(elem, 'marginLeft');
191
192                    if (offsetParent.length > 0) {
193                        parentOffset.top += num(offsetParent, 'borderTopWidth');
194                        parentOffset.left += num(offsetParent, 'borderLeftWidth');
195                    } else {
196                        parentOffset = { top: 0, left: 0 };
197
198                    }
199                } else {
200                    parentOffset = { top: 0, left: 0 };
201                }
202
203                results = {
204                    top: Math.ceil( offset.top - parentOffset.top), left: Math.ceil(offset.left - parentOffset.left)
205                };
206            } return results;
207        },
208        /*
209        * offsetParent
210        */
211        offsetParent: function () {
212            var offsetParent = this[0].offsetParent;
213            while (offsetParent && (!/^body|html$/i.test(offsetParent.tagName) && jQuery.css(offsetParent, 'position') == 'static'))
214                offsetParent = offsetParent.offsetParent;
215            return jQuery(offsetParent);
216        },
217        /*
218        * Get_val_int
219        * params: element,valeur maxi
220        * return: valeur entiere
221        */
222
223        Get_Val_int: function (myObj, Maxi_val, Mini_val) {
224            var val = 0;
225
226            Maxi_val = parseInt(Maxi_val || "0");
227
228            /*
229            - numérique suivie de px ou % ou pt ou em,
230            - thin, bordure mince,
231            - medium, bordure moyenne (valeur par défaut),
232            - thick, bordure épaisse,
233            - inherit, hérite de son parent (css2).
234            */
235
236            if (!myObj) {
237                return Maxi_val;
238            }
239
240            if (typeof (myObj) == "string") {
241                if (myObj == "none") return Maxi_val;
242                if (myObj == "auto") return Maxi_val;
243                var reg1 = new RegExp("px", "g")
244                if (myObj.match(reg1)) {
245
246                    myObj = parseInt(myObj) ;
247
248                }
249                else {
250                    reg1 = new RegExp("%", "g")
251                    if (myObj.match(reg1)) {
252                        val =Math.ceil(myObj * Maxi_val / 100);
253                        return val;
254                    }
255                }
256
257                if (Mini_val)
258                    if (myObj < Mini_val) return Maxi_val;
259
260                switch (myObj) {
261                    case 'thin':
262                        return 1;
263                        break;
264                    case 'medium':
265                        return 2;
266                        break;
267                    case 'thick':
268                        return 4;
269                        break;
270                    case 'inherit':
271                        break;
272                    default:
273                        break;
274                }
275
276
277
278                val = parseInt(myObj);
279
280            } else {
281                val = parseInt(myObj);
282            }
283            if (typeof (val) == "NaN") return Maxi_val;
284            return val;
285        }
286    });
287    /*
288    *
289    */
290    function num(el, prop) {
291        return parseInt(jQuery.curCSS(el.jquery ? el[0] : el, prop, true)) || 0;
292    };
293
294
295
296})(jQuery);
Note: See TracBrowser for help on using the repository browser.