Changeset 6215
- Timestamp:
- 02/23/07 01:19:18 (2 years ago)
- Files:
-
- spinoffs/prototype/trunk/CHANGELOG (modified) (1 diff)
- spinoffs/prototype/trunk/src/dom.js (modified) (3 diffs)
- spinoffs/prototype/trunk/test/unit/dom.html (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
spinoffs/prototype/trunk/CHANGELOG
r6173 r6215 1 1 *SVN* 2 3 * Optimize Element.setStyle and add new Element.setOpacity method, special case IE and Gecko opacity methods. Closes #7585. [savetheclocktower] 2 4 3 5 * Add unified Browser detection by providing Prototype.Browser.(IE|Gecko|WebKit|Opera) booleans. Closes #6800. [savetheclocktower] spinoffs/prototype/trunk/src/dom.js
r6173 r6215 322 322 if(style == 'opacity') { 323 323 if(value) return parseFloat(value); 324 if(value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/)) 324 if(value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/)) 325 325 if(value[1]) return parseFloat(value[1]) / 100; 326 326 return 1.0; … … 331 331 setStyle: function(element, style) { 332 332 element = $(element); 333 var elementStyle = element.style; 333 334 for (var name in style) { 334 335 var value = style[name]; 335 if(name == 'opacity') { 336 if (value == 1) { 337 value = (/Gecko/.test(navigator.userAgent) && 338 !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 0.999999 : 1.0; 339 if(/MSIE/.test(navigator.userAgent) && !window.opera) 340 element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,''); 341 } else if(value === '') { 342 if(/MSIE/.test(navigator.userAgent) && !window.opera) 343 element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,''); 344 } else { 345 if(value < 0.00001) value = 0; 346 if(/MSIE/.test(navigator.userAgent) && !window.opera) 347 element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'') + 348 'alpha(opacity='+value*100+')'; 349 } 350 } else if(['float','cssFloat'].include(name)) name = (typeof element.style.styleFloat != 'undefined') ? 'styleFloat' : 'cssFloat'; 351 element.style[name.camelize()] = value; 352 } 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 return element; 344 }, 345 346 setOpacity: function(element, value) { 347 element = $(element); 348 element.style.opacity = (value < 0.00001) ? 0 : value; 353 349 return element; 354 350 }, … … 425 421 426 422 Object.extend(Element.Methods, {childOf: Element.Methods.descendantOf}); 423 424 if (Prototype.Browser.IE) { 425 Element.Methods.setOpacity = function(element, value) { 426 element = $(element); 427 var filter = element.getStyle('filter'), style = element.style; 428 if (value == 1 || value === '') { 429 style.filter = filter.replace(/alpha\([^\)]*\)/gi,''); 430 return element; 431 } else if (value < 0.00001) value = 0; 432 style.filter = filter.replace(/alpha\([^\)]*\)/gi, '') + 433 'alpha(opacity=' + (value * 100) + ')'; 434 return element; 435 }; 436 } 437 438 if (Prototype.Browser.Gecko) { 439 Element.Methods.setOpacity = function(element, value) { 440 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; 445 return element; 446 }; 447 } 427 448 428 449 Element._attributeTranslations = {}; spinoffs/prototype/trunk/test/unit/dom.html
r6048 r6215 631 631 }}, 632 632 633 testElementSetOpacity: function() { with(this) { 634 [0,0.1,0.5,0.999].each(function(opacity){ 635 $('style_test_3').setOpacity(opacity); 636 // b/c of rounding issues on IE special case 637 assert($('style_test_3').getStyle('opacity').toString().startsWith(opacity)); 638 }); 639 640 assertEqual(0, 641 $('style_test_3').setOpacity(0.0000001).getStyle('opacity')); 642 643 // for Firefox, we don't set to 1, because of flickering 644 assert( 645 $('style_test_3').setOpacity(0.9999999).getStyle('opacity') > 0.999 646 ); 647 }}, 648 633 649 testElementGetStyle: function() { with(this) { 634 650 assertEqual("none", … … 682 698 assertEqual(0.3, $('op3').getStyle('opacity')); 683 699 700 $('op3').setStyle({opacity: 0}); 701 assertEqual(0, $('op3').getStyle('opacity')); 702 684 703 if(navigator.appVersion.match(/MSIE/)) { 685 704 assertEqual('alpha(opacity=30)', $('op1').getStyle('filter')); 686 705 assertEqual('progid:DXImageTransform.Microsoft.Blur(strength=10)alpha(opacity=30)', $('op2').getStyle('filter')); 687 assertEqual('alpha(opacity=30)', $('op3').getStyle('filter')); 706 $('op2').setStyle({opacity:''}); 707 assertEqual('progid:DXImageTransform.Microsoft.Blur(strength=10)', $('op2').getStyle('filter')); 708 assertEqual('alpha(opacity=0)', $('op3').getStyle('filter')); 688 709 assertEqual(0.3, $('op4-ie').getStyle('opacity')); 689 710 }