39c8b14f |
1 | //.CommonJS |
2 | var CSSOM = { |
3 | CSSStyleSheet: require("./CSSStyleSheet").CSSStyleSheet, |
4 | CSSStyleRule: require("./CSSStyleRule").CSSStyleRule, |
5 | CSSMediaRule: require("./CSSMediaRule").CSSMediaRule, |
6 | CSSStyleDeclaration: require("./CSSStyleDeclaration").CSSStyleDeclaration, |
7 | CSSKeyframeRule: require('./CSSKeyframeRule').CSSKeyframeRule, |
8 | CSSKeyframesRule: require('./CSSKeyframesRule').CSSKeyframesRule |
9 | }; |
10 | ///CommonJS |
11 | |
12 | |
13 | /** |
14 | * Produces a deep copy of stylesheet — the instance variables of stylesheet are copied recursively. |
15 | * @param {CSSStyleSheet|CSSOM.CSSStyleSheet} stylesheet |
16 | * @nosideeffects |
17 | * @return {CSSOM.CSSStyleSheet} |
18 | */ |
19 | CSSOM.clone = function clone(stylesheet) { |
20 | |
21 | var cloned = new CSSOM.CSSStyleSheet; |
22 | |
23 | var rules = stylesheet.cssRules; |
24 | if (!rules) { |
25 | return cloned; |
26 | } |
27 | |
28 | var RULE_TYPES = { |
29 | 1: CSSOM.CSSStyleRule, |
30 | 4: CSSOM.CSSMediaRule, |
31 | //3: CSSOM.CSSImportRule, |
32 | //5: CSSOM.CSSFontFaceRule, |
33 | //6: CSSOM.CSSPageRule, |
34 | 8: CSSOM.CSSKeyframesRule, |
35 | 9: CSSOM.CSSKeyframeRule |
36 | }; |
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_TYPES[rule.type]; |
41 | |
42 | var style = rule.style; |
43 | if (style) { |
44 | var styleClone = ruleClone.style = new CSSOM.CSSStyleDeclaration; |
45 | for (var j=0, styleLength=style.length; j < styleLength; j++) { |
46 | var name = styleClone[j] = style[j]; |
47 | styleClone[name] = style[name]; |
48 | styleClone._importants[name] = style.getPropertyPriority(name); |
49 | } |
50 | styleClone.length = style.length; |
51 | } |
52 | |
53 | if (rule.hasOwnProperty('keyText')) { |
54 | ruleClone.keyText = rule.keyText; |
55 | } |
56 | |
57 | if (rule.hasOwnProperty('selectorText')) { |
58 | ruleClone.selectorText = rule.selectorText; |
59 | } |
60 | |
61 | if (rule.hasOwnProperty('mediaText')) { |
62 | ruleClone.mediaText = rule.mediaText; |
63 | } |
64 | |
65 | if (rule.hasOwnProperty('cssRules')) { |
66 | ruleClone.cssRules = clone(rule).cssRules; |
67 | } |
68 | } |
69 | |
70 | return cloned; |
71 | |
72 | }; |
73 | |
74 | //.CommonJS |
75 | exports.clone = CSSOM.clone; |
76 | ///CommonJS |