Вход Регистрация
Файл: library/wysihtml5/src/dom/copy_styles.js
Строк: 90
<?php
/**
 * Copy a set of styles from one element to another
 * Please note that this only works properly across browsers when the element from which to copy the styles
 * is in the dom
 *
 * Interesting article on how to copy styles
 *
 * @param {Array} stylesToCopy List of styles which should be copied
 * @return {Object} Returns an object which offers the "from" method which can be invoked with the element where to
 *    copy the styles from., this again returns an object which provides a method named "to" which can be invoked 
 *    with the element where to copy the styles to (see example)
 *
 * @example
 *    var textarea    = document.querySelector("textarea"),
 *        div         = document.querySelector("div[contenteditable=true]"),
 *        anotherDiv  = document.querySelector("div.preview");
 *    wysihtml5.dom.copyStyles(["overflow-y", "width", "height"]).from(textarea).to(div).andTo(anotherDiv);
 *
 */
(function(dom) {
  
  
/**
   * Mozilla, WebKit and Opera recalculate the computed width when box-sizing: boder-box; is set
   * So if an element has "width: 200px; -moz-box-sizing: border-box; border: 1px;" then 
   * its computed css width will be 198px
   *
   * See https://bugzilla.mozilla.org/show_bug.cgi?id=520992
   */
  
var BOX_SIZING_PROPERTIES = ["-webkit-box-sizing""-moz-box-sizing""-ms-box-sizing""box-sizing"];
  
  var 
shouldIgnoreBoxSizingBorderBox = function(element) {
    if (
hasBoxSizingBorderBox(element)) {
       return 
parseInt(dom.getStyle("width").from(element), 10) < element.offsetWidth;
    }
    return 
false;
  };
  
  var 
hasBoxSizingBorderBox = function(element) {
    var 
i       0,
        
length  BOX_SIZING_PROPERTIES.length;
    for (; 
i<lengthi++) {
      if (
dom.getStyle(BOX_SIZING_PROPERTIES[i]).from(element) === "border-box") {
        return 
BOX_SIZING_PROPERTIES[i];
      }
    }
  };
  
  
dom.copyStyles = function(stylesToCopy) {
    return {
      
from: function(element) {
        if (
shouldIgnoreBoxSizingBorderBox(element)) {
          
stylesToCopy wysihtml5.lang.array(stylesToCopy).without(BOX_SIZING_PROPERTIES);
        }
        
        var 
cssText "",
            
length  stylesToCopy.length,
            
i       0,
            
property;
        for (; 
i<lengthi++) {
          
property stylesToCopy[i];
          
cssText += property ":" dom.getStyle(property).from(element) + ";";
        }
        
        return {
          
to: function(element) {
            
dom.setStyles(cssText).on(element);
            return { 
andToarguments.callee };
          }
        };
      }
    };
  };
})(
wysihtml5.dom);
?>
Онлайн: 2
Реклама