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