clone.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. //.CommonJS
  2. var CSSOM = {
  3. CSSStyleSheet: require("./CSSStyleSheet").CSSStyleSheet,
  4. CSSRule: require("./CSSRule").CSSRule,
  5. CSSStyleRule: require("./CSSStyleRule").CSSStyleRule,
  6. CSSGroupingRule: require("./CSSGroupingRule").CSSGroupingRule,
  7. CSSConditionRule: require("./CSSConditionRule").CSSConditionRule,
  8. CSSMediaRule: require("./CSSMediaRule").CSSMediaRule,
  9. CSSContainerRule: require("./CSSContainerRule").CSSContainerRule,
  10. CSSSupportsRule: require("./CSSSupportsRule").CSSSupportsRule,
  11. CSSStyleDeclaration: require("./CSSStyleDeclaration").CSSStyleDeclaration,
  12. CSSKeyframeRule: require('./CSSKeyframeRule').CSSKeyframeRule,
  13. CSSKeyframesRule: require('./CSSKeyframesRule').CSSKeyframesRule,
  14. CSSLayerBlockRule: require('./CSSLayerBlockRule').CSSLayerBlockRule
  15. };
  16. ///CommonJS
  17. /**
  18. * Produces a deep copy of stylesheet — the instance variables of stylesheet are copied recursively.
  19. * @param {CSSStyleSheet|CSSOM.CSSStyleSheet} stylesheet
  20. * @nosideeffects
  21. * @return {CSSOM.CSSStyleSheet}
  22. */
  23. CSSOM.clone = function clone(stylesheet) {
  24. var cloned = new CSSOM.CSSStyleSheet();
  25. var rules = stylesheet.cssRules;
  26. if (!rules) {
  27. return cloned;
  28. }
  29. for (var i = 0, rulesLength = rules.length; i < rulesLength; i++) {
  30. var rule = rules[i];
  31. var ruleClone = cloned.cssRules[i] = new rule.constructor();
  32. var style = rule.style;
  33. if (style) {
  34. var styleClone = ruleClone.style = new CSSOM.CSSStyleDeclaration();
  35. for (var j = 0, styleLength = style.length; j < styleLength; j++) {
  36. var name = styleClone[j] = style[j];
  37. styleClone[name] = style[name];
  38. styleClone._importants[name] = style.getPropertyPriority(name);
  39. }
  40. styleClone.length = style.length;
  41. }
  42. if (rule.hasOwnProperty('keyText')) {
  43. ruleClone.keyText = rule.keyText;
  44. }
  45. if (rule.hasOwnProperty('selectorText')) {
  46. ruleClone.selectorText = rule.selectorText;
  47. }
  48. if (rule.hasOwnProperty('mediaText')) {
  49. ruleClone.mediaText = rule.mediaText;
  50. }
  51. if (rule.hasOwnProperty('conditionText')) {
  52. ruleClone.conditionText = rule.conditionText;
  53. }
  54. if (rule.hasOwnProperty('layerName')) {
  55. ruleClone.layerName = rule.layerName;
  56. }
  57. if (rule.hasOwnProperty('cssRules')) {
  58. ruleClone.cssRules = clone(rule).cssRules;
  59. }
  60. }
  61. return cloned;
  62. };
  63. //.CommonJS
  64. exports.clone = CSSOM.clone;
  65. ///CommonJS