1 /* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
2 * license. See http://svn.openlayers.org/trunk/openlayers/license.txt for the
3 * full text of the license. */
6 * Namespace: OpenLayers.Element
11 * APIFunction: visible
14 * element - {DOMElement}
17 * {Boolean} Is the element visible?
19 visible: function(element) {
20 return OpenLayers.Util.getElement(element).style.display != 'none';
25 * Toggle the visibility of element(s) passed in
28 * element - {DOMElement} Actually user can pass any number of elements
31 for (var i=0, len=arguments.length; i<len; i++) {
32 var element = OpenLayers.Util.getElement(arguments[i]);
33 var display = OpenLayers.Element.visible(element) ? 'hide'
35 OpenLayers.Element[display](element);
42 * Hide element(s) passed in
45 * element - {DOMElement} Actually user can pass any number of elements
48 for (var i=0, len=arguments.length; i<len; i++) {
49 var element = OpenLayers.Util.getElement(arguments[i]);
50 element.style.display = 'none';
56 * Show element(s) passed in
59 * element - {DOMElement} Actually user can pass any number of elements
62 for (var i=0, len=arguments.length; i<len; i++) {
63 var element = OpenLayers.Util.getElement(arguments[i]);
64 element.style.display = '';
70 * Remove the specified element from the DOM.
73 * element - {DOMElement}
75 remove: function(element) {
76 element = OpenLayers.Util.getElement(element);
77 element.parentNode.removeChild(element);
81 * APIFunction: getHeight
84 * element - {DOMElement}
87 * {Integer} The offset height of the element passed in
89 getHeight: function(element) {
90 element = OpenLayers.Util.getElement(element);
91 return element.offsetHeight;
95 * APIFunction: getDimensions
98 * element - {DOMElement}
101 * {Object} Object with 'width' and 'height' properties which are the
102 * dimensions of the element passed in.
104 getDimensions: function(element) {
105 element = OpenLayers.Util.getElement(element);
106 if (OpenLayers.Element.getStyle(element, 'display') != 'none') {
107 return {width: element.offsetWidth, height: element.offsetHeight};
110 // All *Width and *Height properties give 0 on elements with display none,
111 // so enable the element temporarily
112 var els = element.style;
113 var originalVisibility = els.visibility;
114 var originalPosition = els.position;
115 els.visibility = 'hidden';
116 els.position = 'absolute';
118 var originalWidth = element.clientWidth;
119 var originalHeight = element.clientHeight;
120 els.display = 'none';
121 els.position = originalPosition;
122 els.visibility = originalVisibility;
123 return {width: originalWidth, height: originalHeight};
128 * Tests if an element has the given CSS class name.
131 * element - {DOMElement} A DOM element node.
132 * name - {String} The CSS class name to search for.
135 * {Boolean} The element has the given class name.
137 hasClass: function(element, name) {
138 var names = element.className;
139 return (!!names && new RegExp("(^|\\s)" + name + "(\\s|$)").test(names));
144 * Add a CSS class name to an element. Safe where element already has
148 * element - {DOMElement} A DOM element node.
149 * name - {String} The CSS class name to add.
152 * {DOMElement} The element.
154 addClass: function(element, name) {
155 if(!OpenLayers.Element.hasClass(element, name)) {
156 element.className += (element.className ? " " : "") + name;
162 * Function: removeClass
163 * Remove a CSS class name from an element. Safe where element does not
164 * have the class name.
167 * element - {DOMElement} A DOM element node.
168 * name - {String} The CSS class name to remove.
171 * {DOMElement} The element.
173 removeClass: function(element, name) {
174 var names = element.className;
176 element.className = OpenLayers.String.trim(
178 new RegExp("(^|\\s+)" + name + "(\\s+|$)"), " "
186 * Function: toggleClass
187 * Remove a CSS class name from an element if it exists. Add the class name
188 * if it doesn't exist.
191 * element - {DOMElement} A DOM element node.
192 * name - {String} The CSS class name to toggle.
195 * {DOMElement} The element.
197 toggleClass: function(element, name) {
198 if(OpenLayers.Element.hasClass(element, name)) {
199 OpenLayers.Element.removeClass(element, name);
201 OpenLayers.Element.addClass(element, name);
207 * APIFunction: getStyle
210 * element - {DOMElement}
216 getStyle: function(element, style) {
217 element = OpenLayers.Util.getElement(element);
220 if (element && element.style) {
221 value = element.style[OpenLayers.String.camelize(style)];
223 if (document.defaultView &&
224 document.defaultView.getComputedStyle) {
226 var css = document.defaultView.getComputedStyle(element, null);
227 value = css ? css.getPropertyValue(style) : null;
228 } else if (element.currentStyle) {
229 value = element.currentStyle[OpenLayers.String.camelize(style)];
233 var positions = ['left', 'top', 'right', 'bottom'];
235 (OpenLayers.Util.indexOf(positions,style) != -1) &&
236 (OpenLayers.Element.getStyle(element, 'position') == 'static')) {
241 return value == 'auto' ? null : value;