Вход Регистрация
Файл: library/wysihtml5/src/dom/get_style.js
Строк: 107
<?php
/**
 * Get element's style for a specific css property
 *
 * @param {Element} element The element on which to retrieve the style
 * @param {String} property The CSS property to retrieve ("float", "display", "text-align", ...)
 *
 * @example
 *    wysihtml5.dom.getStyle("display").from(document.body);
 *    // => "block"
 */
wysihtml5.dom.getStyle = (function() {
  var 
stylePropertyMapping = {
        
"float": ("styleFloat" in document.createElement("div").style) ? "styleFloat" "cssFloat"
      
},
      
REG_EXP_CAMELIZE = /-[a-z]/g;
  
  function 
camelize(str) {
    return 
str.replace(REG_EXP_CAMELIZE, function(match) {
      return 
match.charAt(1).toUpperCase();
    });
  }
  
  return function(
property) {
    return {
      
from: function(element) {
        if (
element.nodeType !== wysihtml5.ELEMENT_NODE) {
          return;
        }
        
        var 
doc               element.ownerDocument,
            
camelizedProperty stylePropertyMapping[property] || camelize(property),
            
style             element.style,
            
currentStyle      element.currentStyle,
            
styleValue        style[camelizedProperty];
        if (
styleValue) {
          return 
styleValue;
        }
        
        
// currentStyle is no standard and only supported by Opera and IE but it has one important advantage over the standard-compliant
        // window.getComputedStyle, since it returns css property values in their original unit:
        // If you set an elements width to "50%", window.getComputedStyle will give you it's current width in px while currentStyle
        // gives you the original "50%".
        // Opera supports both, currentStyle and window.getComputedStyle, that's why checking for currentStyle should have higher prio
        
if (currentStyle) {
          try {
            return 
currentStyle[camelizedProperty];
          } catch(
e) {
            
//ie will occasionally fail for unknown reasons. swallowing exception
          
}
        }

        var 
win                 doc.defaultView || doc.parentWindow,
            
needsOverflowReset  = (property === "height" || property === "width") && element.nodeName === "TEXTAREA",
            
originalOverflow,
            
returnValue;

        if (
win.getComputedStyle) {
          
// Chrome and Safari both calculate a wrong width and height for textareas when they have scroll bars
          // therfore we remove and restore the scrollbar and calculate the value in between
          
if (needsOverflowReset) {
            
originalOverflow style.overflow;
            
style.overflow "hidden";
          }
          
returnValue win.getComputedStyle(elementnull).getPropertyValue(property);
          if (
needsOverflowReset) {
            
style.overflow originalOverflow || "";
          }
          return 
returnValue;
        }
      }
    };
  };
})();
?>
Онлайн: 2
Реклама