/ cloudformation-templates / node_modules / cssom / lib / CSSStyleDeclaration.js
CSSStyleDeclaration.js
  1  //.CommonJS
  2  var CSSOM = {};
  3  ///CommonJS
  4  
  5  
  6  /**
  7   * @constructor
  8   * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration
  9   */
 10  CSSOM.CSSStyleDeclaration = function CSSStyleDeclaration(){
 11  	this.length = 0;
 12  	this.parentRule = null;
 13  
 14  	// NON-STANDARD
 15  	this._importants = {};
 16  };
 17  
 18  
 19  CSSOM.CSSStyleDeclaration.prototype = {
 20  
 21  	constructor: CSSOM.CSSStyleDeclaration,
 22  
 23  	/**
 24  	 *
 25  	 * @param {string} name
 26  	 * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-getPropertyValue
 27  	 * @return {string} the value of the property if it has been explicitly set for this declaration block.
 28  	 * Returns the empty string if the property has not been set.
 29  	 */
 30  	getPropertyValue: function(name) {
 31  		return this[name] || "";
 32  	},
 33  
 34  	/**
 35  	 *
 36  	 * @param {string} name
 37  	 * @param {string} value
 38  	 * @param {string} [priority=null] "important" or null
 39  	 * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-setProperty
 40  	 */
 41  	setProperty: function(name, value, priority) {
 42  		if (this[name]) {
 43  			// Property already exist. Overwrite it.
 44  			var index = Array.prototype.indexOf.call(this, name);
 45  			if (index < 0) {
 46  				this[this.length] = name;
 47  				this.length++;
 48  			}
 49  		} else {
 50  			// New property.
 51  			this[this.length] = name;
 52  			this.length++;
 53  		}
 54  		this[name] = value + "";
 55  		this._importants[name] = priority;
 56  	},
 57  
 58  	/**
 59  	 *
 60  	 * @param {string} name
 61  	 * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-removeProperty
 62  	 * @return {string} the value of the property if it has been explicitly set for this declaration block.
 63  	 * Returns the empty string if the property has not been set or the property name does not correspond to a known CSS property.
 64  	 */
 65  	removeProperty: function(name) {
 66  		if (!(name in this)) {
 67  			return "";
 68  		}
 69  		var index = Array.prototype.indexOf.call(this, name);
 70  		if (index < 0) {
 71  			return "";
 72  		}
 73  		var prevValue = this[name];
 74  		this[name] = "";
 75  
 76  		// That's what WebKit and Opera do
 77  		Array.prototype.splice.call(this, index, 1);
 78  
 79  		// That's what Firefox does
 80  		//this[index] = ""
 81  
 82  		return prevValue;
 83  	},
 84  
 85  	getPropertyCSSValue: function() {
 86  		//FIXME
 87  	},
 88  
 89  	/**
 90  	 *
 91  	 * @param {String} name
 92  	 */
 93  	getPropertyPriority: function(name) {
 94  		return this._importants[name] || "";
 95  	},
 96  
 97  
 98  	/**
 99  	 *   element.style.overflow = "auto"
100  	 *   element.style.getPropertyShorthand("overflow-x")
101  	 *   -> "overflow"
102  	 */
103  	getPropertyShorthand: function() {
104  		//FIXME
105  	},
106  
107  	isPropertyImplicit: function() {
108  		//FIXME
109  	},
110  
111  	// Doesn't work in IE < 9
112  	get cssText(){
113  		var properties = [];
114  		for (var i=0, length=this.length; i < length; ++i) {
115  			var name = this[i];
116  			var value = this.getPropertyValue(name);
117  			var priority = this.getPropertyPriority(name);
118  			if (priority) {
119  				priority = " !" + priority;
120  			}
121  			properties[i] = name + ": " + value + priority + ";";
122  		}
123  		return properties.join(" ");
124  	},
125  
126  	set cssText(text){
127  		var i, name;
128  		for (i = this.length; i--;) {
129  			name = this[i];
130  			this[name] = "";
131  		}
132  		Array.prototype.splice.call(this, 0, this.length);
133  		this._importants = {};
134  
135  		var dummyRule = CSSOM.parse('#bogus{' + text + '}').cssRules[0].style;
136  		var length = dummyRule.length;
137  		for (i = 0; i < length; ++i) {
138  			name = dummyRule[i];
139  			this.setProperty(dummyRule[i], dummyRule.getPropertyValue(name), dummyRule.getPropertyPriority(name));
140  		}
141  	}
142  };
143  
144  
145  //.CommonJS
146  exports.CSSStyleDeclaration = CSSOM.CSSStyleDeclaration;
147  CSSOM.parse = require('./parse').parse; // Cannot be included sooner due to the mutual dependency between parse.js and CSSStyleDeclaration.js
148  ///CommonJS