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