initial commit
[JIRC.git] / node_modules / jsdom / node_modules / cssom / lib / clone.js
CommitLineData
39c8b14f 1//.CommonJS
2var 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 */
19CSSOM.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
75exports.clone = CSSOM.clone;
76///CommonJS