|
|
- //.CommonJS
- var CSSOM = {};
- ///CommonJS
-
-
- /**
- * @constructor
- * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration
- */
- CSSOM.CSSStyleDeclaration = function CSSStyleDeclaration(){
- this.length = 0;
- this.parentRule = null;
-
- // NON-STANDARD
- this._importants = {};
- };
-
-
- CSSOM.CSSStyleDeclaration.prototype = {
-
- constructor: CSSOM.CSSStyleDeclaration,
-
- /**
- *
- * @param {string} name
- * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-getPropertyValue
- * @return {string} the value of the property if it has been explicitly set for this declaration block.
- * Returns the empty string if the property has not been set.
- */
- getPropertyValue: function(name) {
- return this[name] || "";
- },
-
- /**
- *
- * @param {string} name
- * @param {string} value
- * @param {string} [priority=null] "important" or null
- * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-setProperty
- */
- setProperty: function(name, value, priority) {
- if (this[name]) {
- // Property already exist. Overwrite it.
- var index = Array.prototype.indexOf.call(this, name);
- if (index < 0) {
- this[this.length] = name;
- this.length++;
- }
- } else {
- // New property.
- this[this.length] = name;
- this.length++;
- }
- this[name] = value + "";
- this._importants[name] = priority;
- },
-
- /**
- *
- * @param {string} name
- * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-removeProperty
- * @return {string} the value of the property if it has been explicitly set for this declaration block.
- * Returns the empty string if the property has not been set or the property name does not correspond to a known CSS property.
- */
- removeProperty: function(name) {
- if (!(name in this)) {
- return "";
- }
- var index = Array.prototype.indexOf.call(this, name);
- if (index < 0) {
- return "";
- }
- var prevValue = this[name];
- this[name] = "";
-
- // That's what WebKit and Opera do
- Array.prototype.splice.call(this, index, 1);
-
- // That's what Firefox does
- //this[index] = ""
-
- return prevValue;
- },
-
- getPropertyCSSValue: function() {
- //FIXME
- },
-
- /**
- *
- * @param {String} name
- */
- getPropertyPriority: function(name) {
- return this._importants[name] || "";
- },
-
-
- /**
- * element.style.overflow = "auto"
- * element.style.getPropertyShorthand("overflow-x")
- * -> "overflow"
- */
- getPropertyShorthand: function() {
- //FIXME
- },
-
- isPropertyImplicit: function() {
- //FIXME
- },
-
- // Doesn't work in IE < 9
- get cssText(){
- var properties = [];
- for (var i=0, length=this.length; i < length; ++i) {
- var name = this[i];
- var value = this.getPropertyValue(name);
- var priority = this.getPropertyPriority(name);
- if (priority) {
- priority = " !" + priority;
- }
- properties[i] = name + ": " + value + priority + ";";
- }
- return properties.join(" ");
- },
-
- set cssText(text){
- var i, name;
- for (i = this.length; i--;) {
- name = this[i];
- this[name] = "";
- }
- Array.prototype.splice.call(this, 0, this.length);
- this._importants = {};
-
- var dummyRule = CSSOM.parse('#bogus{' + text + '}').cssRules[0].style;
- var length = dummyRule.length;
- for (i = 0; i < length; ++i) {
- name = dummyRule[i];
- this.setProperty(dummyRule[i], dummyRule.getPropertyValue(name), dummyRule.getPropertyPriority(name));
- }
- }
- };
-
-
- //.CommonJS
- exports.CSSStyleDeclaration = CSSOM.CSSStyleDeclaration;
- CSSOM.parse = require('./parse').parse; // Cannot be included sooner due to the mutual dependency between parse.js and CSSStyleDeclaration.js
- ///CommonJS
|