clone.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. //.CommonJS
  2. var CSSOM = {
  3. CSSStyleSheet: require("./CSSStyleSheet").CSSStyleSheet,
  4. CSSRule: require("./CSSRule").CSSRule,
  5. CSSNestedDeclarations: require("./CSSNestedDeclarations").CSSNestedDeclarations,
  6. CSSStyleRule: require("./CSSStyleRule").CSSStyleRule,
  7. CSSGroupingRule: require("./CSSGroupingRule").CSSGroupingRule,
  8. CSSConditionRule: require("./CSSConditionRule").CSSConditionRule,
  9. CSSMediaRule: require("./CSSMediaRule").CSSMediaRule,
  10. CSSContainerRule: require("./CSSContainerRule").CSSContainerRule,
  11. CSSSupportsRule: require("./CSSSupportsRule").CSSSupportsRule,
  12. CSSStyleDeclaration: require("./CSSStyleDeclaration").CSSStyleDeclaration,
  13. CSSKeyframeRule: require('./CSSKeyframeRule').CSSKeyframeRule,
  14. CSSKeyframesRule: require('./CSSKeyframesRule').CSSKeyframesRule,
  15. CSSScopeRule: require('./CSSScopeRule').CSSScopeRule,
  16. CSSLayerBlockRule: require('./CSSLayerBlockRule').CSSLayerBlockRule,
  17. CSSLayerStatementRule: require('./CSSLayerStatementRule').CSSLayerStatementRule
  18. };
  19. // Use cssstyle if available
  20. try {
  21. CSSOM.CSSStyleDeclaration = require("cssstyle").CSSStyleDeclaration;
  22. } catch (e) {
  23. // ignore
  24. }
  25. ///CommonJS
  26. /**
  27. * Produces a deep copy of stylesheet — the instance variables of stylesheet are copied recursively.
  28. * @param {CSSStyleSheet|CSSOM.CSSStyleSheet} stylesheet
  29. * @nosideeffects
  30. * @return {CSSOM.CSSStyleSheet}
  31. */
  32. CSSOM.clone = function clone(stylesheet) {
  33. var cloned = new CSSOM.CSSStyleSheet();
  34. var rules = stylesheet.cssRules;
  35. if (!rules) {
  36. return cloned;
  37. }
  38. for (var i = 0, rulesLength = rules.length; i < rulesLength; i++) {
  39. var rule = rules[i];
  40. var ruleClone = cloned.cssRules[i] = new rule.constructor();
  41. var style = rule.style;
  42. if (style) {
  43. var styleClone = ruleClone.style = new CSSOM.CSSStyleDeclaration();
  44. for (var j = 0, styleLength = style.length; j < styleLength; j++) {
  45. var name = styleClone[j] = style[j];
  46. styleClone[name] = style[name];
  47. styleClone._importants[name] = style.getPropertyPriority(name);
  48. }
  49. styleClone.length = style.length;
  50. }
  51. if (rule.hasOwnProperty('keyText')) {
  52. ruleClone.keyText = rule.keyText;
  53. }
  54. if (rule.hasOwnProperty('selectorText')) {
  55. ruleClone.selectorText = rule.selectorText;
  56. }
  57. if (rule.hasOwnProperty('mediaText')) {
  58. ruleClone.mediaText = rule.mediaText;
  59. }
  60. if (rule.hasOwnProperty('supportsText')) {
  61. ruleClone.supports = rule.supports;
  62. }
  63. if (rule.hasOwnProperty('conditionText')) {
  64. ruleClone.conditionText = rule.conditionText;
  65. }
  66. if (rule.hasOwnProperty('layerName')) {
  67. ruleClone.layerName = rule.layerName;
  68. }
  69. if (rule.hasOwnProperty('href')) {
  70. ruleClone.href = rule.href;
  71. }
  72. if (rule.hasOwnProperty('name')) {
  73. ruleClone.name = rule.name;
  74. }
  75. if (rule.hasOwnProperty('nameList')) {
  76. ruleClone.nameList = rule.nameList;
  77. }
  78. if (rule.hasOwnProperty('cssRules')) {
  79. ruleClone.cssRules = clone(rule).cssRules;
  80. }
  81. }
  82. return cloned;
  83. };
  84. //.CommonJS
  85. exports.clone = CSSOM.clone;
  86. ///CommonJS