Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
81143 views
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(cssText){
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{' + cssText + '}').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
149
150