Changeset 6255
- Timestamp:
- 02/27/07 11:35:21 (2 years ago)
- Files:
-
- spinoffs/prototype/trunk/CHANGELOG (modified) (1 diff)
- spinoffs/prototype/trunk/src/dom.js (modified) (4 diffs)
- spinoffs/prototype/trunk/test/unit/dom.html (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
spinoffs/prototype/trunk/CHANGELOG
r6215 r6255 1 1 *SVN* 2 3 * Optimize Element.getStyle and add new Element.getOpacity method. Special case IE and Opera getStyle methods. Closes #7648. [Tobie Langel, Thomas Fuchs] 2 4 3 5 * Optimize Element.setStyle and add new Element.setOpacity method, special case IE and Gecko opacity methods. Closes #7585. [savetheclocktower] spinoffs/prototype/trunk/src/dom.js
r6215 r6255 302 302 getStyle: function(element, style) { 303 303 element = $(element); 304 if (['float','cssFloat'].include(style)) 305 style = (typeof element.style.styleFloat != 'undefined' ? 'styleFloat' : 'cssFloat'); 306 style = style.camelize(); 304 style = style == 'float' ? 'cssFloat' : style.camelize(); 307 305 var value = element.style[style]; 308 306 if (!value) { 309 if (document.defaultView && document.defaultView.getComputedStyle) { 310 var css = document.defaultView.getComputedStyle(element, null); 311 value = css ? css[style] : null; 312 } else if (element.currentStyle) { 313 value = element.currentStyle[style]; 307 var css = document.defaultView.getComputedStyle(element, null); 308 value = css ? css[style] : null; 309 } 310 if (style == 'opacity') return value ? parseFloat(value) : 1.0; 311 return value == 'auto' ? null : value; 312 }, 313 314 getOpacity: function(element) { 315 return $(element).getStyle('opacity'); 316 }, 317 318 setStyle: function(element, styles) { 319 element = $(element); 320 var elementStyle = element.style; 321 for (var property in styles) { 322 var value = styles[property]; 323 if (property == 'opacity') { 324 element.setOpacity(value) 325 } else { 326 property = (property == 'float' || property == 'cssFloat') ? 327 ((elementStyle.styleFloat === undefined) ? 'cssFloat' : 'styleFloat') : property.camelize(); 328 elementStyle[property] = value; 314 329 } 315 330 } 316 317 if((value == 'auto') && ['width','height'].include(style) && (element.getStyle('display') != 'none'))318 value = element['offset'+style.capitalize()] + 'px';319 320 if (window.opera && ['left', 'top', 'right', 'bottom'].include(style))321 if (Element.getStyle(element, 'position') == 'static') value = 'auto';322 if(style == 'opacity') {323 if(value) return parseFloat(value);324 if(value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))325 if(value[1]) return parseFloat(value[1]) / 100;326 return 1.0;327 }328 return value == 'auto' ? null : value;329 },330 331 setStyle: function(element, style) {332 element = $(element);333 var elementStyle = element.style;334 for (var name in style) {335 var value = style[name];336 if (name == 'opacity') element.setOpacity(value);337 if (name == 'float' || name == 'cssFloat') {338 name = (typeof elementStyle.styleFloat != 'undefined') ?339 'styleFloat' : 'cssFloat';340 }341 elementStyle[name.camelize()] = value;342 }343 331 return element; 344 332 }, … … 346 334 setOpacity: function(element, value) { 347 335 element = $(element); 348 element.style.opacity = (value < 0.00001) ? 0 : value; 336 element.style.opacity = (value == 1 || value === '') ? '' : 337 (value < 0.00001) ? 0 : value; 349 338 return element; 350 339 }, … … 422 411 Object.extend(Element.Methods, {childOf: Element.Methods.descendantOf}); 423 412 413 if (Prototype.Browser.Opera) { 414 Element.Methods._getStyle = Element.Methods.getStyle; 415 Element.Methods.getStyle = function(element, style) { 416 switch(style) { 417 case 'left': 418 case 'top': 419 case 'right': 420 case 'bottom': 421 if(Element._getStyle(element, 'position') == 'static') return null; 422 default: return Element._getStyle(element, style); 423 } 424 }; 425 } 426 424 427 if (Prototype.Browser.IE) { 428 Element.Methods.getStyle = function(element, style) { 429 element = $(element); 430 style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize(); 431 var value = element.style[style]; 432 if (!value && element.currentStyle) value = element.currentStyle[style]; 433 434 if (style == 'opacity') { 435 if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/)) 436 if (value[1]) return parseFloat(value[1]) / 100; 437 return 1.0; 438 } 439 440 if (value == 'auto') { 441 if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none')) 442 return element['offset'+style.capitalize()] + 'px'; 443 return null; 444 } 445 return value; 446 }; 447 425 448 Element.Methods.setOpacity = function(element, value) { 426 449 element = $(element); … … 439 462 Element.Methods.setOpacity = function(element, value) { 440 463 element = $(element); 441 var style = element.style; 442 if (value == 1) value = 0.999999; 443 else if (value < 0.00001) value = 0; 444 style.opacity = value; 464 element.style.opacity = (value == 1) ? 0.999999 : 465 (value === '') ? '' : (value < 0.00001) ? 0 : value; 445 466 return element; 446 467 }; spinoffs/prototype/trunk/test/unit/dom.html
r6215 r6255 715 715 }}, 716 716 717 testElementGetOpacity: function() {with(this) { 718 assertEqual(0.45, $('op1').setOpacity(0.45).getOpacity()); 719 }}, 720 717 721 testElementReadAttribute: function() {with(this) { 718 722 assertEqual('test.html' , $('attributes_with_issues_1').readAttribute('href'));