1 (function () { 2 3 /** 4 * Cross-browser wrapper for setting element's style 5 * @method setStyle 6 * @memberOf fabric.util 7 * @param {HTMLElement} element 8 * @param {Object} styles 9 * @return {HTMLElement} Element that was passed as a first argument 10 */ 11 function setStyle(element, styles) { 12 var elementStyle = element.style, match; 13 if (typeof styles === 'string') { 14 element.style.cssText += ';' + styles; 15 return styles.indexOf('opacity') > -1 16 ? setOpacity(element, styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) 17 : element; 18 } 19 for (var property in styles) { 20 if (property === 'opacity') { 21 setOpacity(element, styles[property]); 22 } 23 else { 24 var normalizedProperty = (property === 'float' || property === 'cssFloat') 25 ? (typeof elementStyle.styleFloat === 'undefined' ? 'cssFloat' : 'styleFloat') 26 : property; 27 elementStyle[normalizedProperty] = styles[property]; 28 } 29 } 30 return element; 31 } 32 33 var parseEl = document.createElement('div'), 34 supportsOpacity = typeof parseEl.style.opacity === 'string', 35 supportsFilters = typeof parseEl.style.filter === 'string', 36 view = document.defaultView, 37 supportsGCS = view && typeof view.getComputedStyle !== 'undefined', 38 reOpacity = /alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/, 39 40 /** @ignore */ 41 setOpacity = function (element) { return element; }; 42 43 if (supportsOpacity) { 44 /** @ignore */ 45 setOpacity = function(element, value) { 46 element.style.opacity = value; 47 return element; 48 }; 49 } 50 else if (supportsFilters) { 51 /** @ignore */ 52 setOpacity = function(element, value) { 53 var es = element.style; 54 if (element.currentStyle && !element.currentStyle.hasLayout) { 55 es.zoom = 1; 56 } 57 if (reOpacity.test(es.filter)) { 58 value = value >= 0.9999 ? '' : ('alpha(opacity=' + (value * 100) + ')'); 59 es.filter = es.filter.replace(reOpacity, value); 60 } 61 else { 62 es.filter += ' alpha(opacity=' + (value * 100) + ')'; 63 } 64 return element; 65 }; 66 } 67 68 fabric.util.setStyle = setStyle; 69 70 })();