summaryrefslogtreecommitdiff
path: root/school/node_modules/cssom
diff options
context:
space:
mode:
Diffstat (limited to 'school/node_modules/cssom')
-rw-r--r--school/node_modules/cssom/LICENSE.txt20
-rw-r--r--school/node_modules/cssom/README.mdown67
-rw-r--r--school/node_modules/cssom/lib/CSSDocumentRule.js39
-rw-r--r--school/node_modules/cssom/lib/CSSFontFaceRule.js36
-rw-r--r--school/node_modules/cssom/lib/CSSHostRule.js37
-rw-r--r--school/node_modules/cssom/lib/CSSImportRule.js132
-rw-r--r--school/node_modules/cssom/lib/CSSKeyframeRule.js37
-rw-r--r--school/node_modules/cssom/lib/CSSKeyframesRule.js39
-rw-r--r--school/node_modules/cssom/lib/CSSMediaRule.js41
-rw-r--r--school/node_modules/cssom/lib/CSSOM.js3
-rw-r--r--school/node_modules/cssom/lib/CSSRule.js43
-rw-r--r--school/node_modules/cssom/lib/CSSStyleDeclaration.js148
-rw-r--r--school/node_modules/cssom/lib/CSSStyleRule.js190
-rw-r--r--school/node_modules/cssom/lib/CSSStyleSheet.js88
-rw-r--r--school/node_modules/cssom/lib/CSSSupportsRule.js36
-rw-r--r--school/node_modules/cssom/lib/CSSValue.js43
-rw-r--r--school/node_modules/cssom/lib/CSSValueExpression.js344
-rw-r--r--school/node_modules/cssom/lib/MatcherList.js62
-rw-r--r--school/node_modules/cssom/lib/MediaList.js61
-rw-r--r--school/node_modules/cssom/lib/StyleSheet.js17
-rw-r--r--school/node_modules/cssom/lib/clone.js71
-rw-r--r--school/node_modules/cssom/lib/index.js21
-rw-r--r--school/node_modules/cssom/lib/parse.js463
-rw-r--r--school/node_modules/cssom/package.json18
24 files changed, 2056 insertions, 0 deletions
diff --git a/school/node_modules/cssom/LICENSE.txt b/school/node_modules/cssom/LICENSE.txt
new file mode 100644
index 0000000..bc57aac
--- /dev/null
+++ b/school/node_modules/cssom/LICENSE.txt
@@ -0,0 +1,20 @@
+Copyright (c) Nikita Vasilyev
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/school/node_modules/cssom/README.mdown b/school/node_modules/cssom/README.mdown
new file mode 100644
index 0000000..83af16b
--- /dev/null
+++ b/school/node_modules/cssom/README.mdown
@@ -0,0 +1,67 @@
+# CSSOM
+
+CSSOM.js is a CSS parser written in pure JavaScript. It is also a partial implementation of [CSS Object Model](http://dev.w3.org/csswg/cssom/).
+
+ CSSOM.parse("body {color: black}")
+ -> {
+ cssRules: [
+ {
+ selectorText: "body",
+ style: {
+ 0: "color",
+ color: "black",
+ length: 1
+ }
+ }
+ ]
+ }
+
+
+## [Parser demo](http://nv.github.com/CSSOM/docs/parse.html)
+
+Works well in Google Chrome 6+, Safari 5+, Firefox 3.6+, Opera 10.63+.
+Doesn't work in IE < 9 because of unsupported getters/setters.
+
+To use CSSOM.js in the browser you might want to build a one-file version that exposes a single `CSSOM` global variable:
+
+ ➤ git clone https://github.com/NV/CSSOM.git
+ ➤ cd CSSOM
+ ➤ node build.js
+ build/CSSOM.js is done
+
+To use it with Node.js or any other CommonJS loader:
+
+ ➤ npm install cssom
+
+## Don’t use it if...
+
+You parse CSS to mungle, minify or reformat code like this:
+
+```css
+div {
+ background: gray;
+ background: linear-gradient(to bottom, white 0%, black 100%);
+}
+```
+
+This pattern is often used to give browsers that don’t understand linear gradients a fallback solution (e.g. gray color in the example).
+In CSSOM, `background: gray` [gets overwritten](http://nv.github.io/CSSOM/docs/parse.html#css=div%20%7B%0A%20%20%20%20%20%20background%3A%20gray%3B%0A%20%20%20%20background%3A%20linear-gradient(to%20bottom%2C%20white%200%25%2C%20black%20100%25)%3B%0A%7D).
+It doesn't get preserved.
+
+If you do CSS mungling, minification, image inlining, and such, CSSOM.js is no good for you, considere using one of the following:
+
+ * [postcss](https://github.com/postcss/postcss)
+ * [reworkcss/css](https://github.com/reworkcss/css)
+ * [csso](https://github.com/css/csso)
+ * [mensch](https://github.com/brettstimmerman/mensch)
+
+
+## [Tests](http://nv.github.com/CSSOM/spec/)
+
+To run tests locally:
+
+ ➤ git submodule init
+ ➤ git submodule update
+
+
+## [Who uses CSSOM.js](https://github.com/NV/CSSOM/wiki/Who-uses-CSSOM.js)
diff --git a/school/node_modules/cssom/lib/CSSDocumentRule.js b/school/node_modules/cssom/lib/CSSDocumentRule.js
new file mode 100644
index 0000000..aec0776
--- /dev/null
+++ b/school/node_modules/cssom/lib/CSSDocumentRule.js
@@ -0,0 +1,39 @@
+//.CommonJS
+var CSSOM = {
+ CSSRule: require("./CSSRule").CSSRule,
+ MatcherList: require("./MatcherList").MatcherList
+};
+///CommonJS
+
+
+/**
+ * @constructor
+ * @see https://developer.mozilla.org/en/CSS/@-moz-document
+ */
+CSSOM.CSSDocumentRule = function CSSDocumentRule() {
+ CSSOM.CSSRule.call(this);
+ this.matcher = new CSSOM.MatcherList();
+ this.cssRules = [];
+};
+
+CSSOM.CSSDocumentRule.prototype = new CSSOM.CSSRule();
+CSSOM.CSSDocumentRule.prototype.constructor = CSSOM.CSSDocumentRule;
+CSSOM.CSSDocumentRule.prototype.type = 10;
+//FIXME
+//CSSOM.CSSDocumentRule.prototype.insertRule = CSSStyleSheet.prototype.insertRule;
+//CSSOM.CSSDocumentRule.prototype.deleteRule = CSSStyleSheet.prototype.deleteRule;
+
+Object.defineProperty(CSSOM.CSSDocumentRule.prototype, "cssText", {
+ get: function() {
+ var cssTexts = [];
+ for (var i=0, length=this.cssRules.length; i < length; i++) {
+ cssTexts.push(this.cssRules[i].cssText);
+ }
+ return "@-moz-document " + this.matcher.matcherText + " {" + cssTexts.join("") + "}";
+ }
+});
+
+
+//.CommonJS
+exports.CSSDocumentRule = CSSOM.CSSDocumentRule;
+///CommonJS
diff --git a/school/node_modules/cssom/lib/CSSFontFaceRule.js b/school/node_modules/cssom/lib/CSSFontFaceRule.js
new file mode 100644
index 0000000..7a537fb
--- /dev/null
+++ b/school/node_modules/cssom/lib/CSSFontFaceRule.js
@@ -0,0 +1,36 @@
+//.CommonJS
+var CSSOM = {
+ CSSStyleDeclaration: require("./CSSStyleDeclaration").CSSStyleDeclaration,
+ CSSRule: require("./CSSRule").CSSRule
+};
+///CommonJS
+
+
+/**
+ * @constructor
+ * @see http://dev.w3.org/csswg/cssom/#css-font-face-rule
+ */
+CSSOM.CSSFontFaceRule = function CSSFontFaceRule() {
+ CSSOM.CSSRule.call(this);
+ this.style = new CSSOM.CSSStyleDeclaration();
+ this.style.parentRule = this;
+};
+
+CSSOM.CSSFontFaceRule.prototype = new CSSOM.CSSRule();
+CSSOM.CSSFontFaceRule.prototype.constructor = CSSOM.CSSFontFaceRule;
+CSSOM.CSSFontFaceRule.prototype.type = 5;
+//FIXME
+//CSSOM.CSSFontFaceRule.prototype.insertRule = CSSStyleSheet.prototype.insertRule;
+//CSSOM.CSSFontFaceRule.prototype.deleteRule = CSSStyleSheet.prototype.deleteRule;
+
+// http://www.opensource.apple.com/source/WebCore/WebCore-955.66.1/css/WebKitCSSFontFaceRule.cpp
+Object.defineProperty(CSSOM.CSSFontFaceRule.prototype, "cssText", {
+ get: function() {
+ return "@font-face {" + this.style.cssText + "}";
+ }
+});
+
+
+//.CommonJS
+exports.CSSFontFaceRule = CSSOM.CSSFontFaceRule;
+///CommonJS
diff --git a/school/node_modules/cssom/lib/CSSHostRule.js b/school/node_modules/cssom/lib/CSSHostRule.js
new file mode 100644
index 0000000..365304f
--- /dev/null
+++ b/school/node_modules/cssom/lib/CSSHostRule.js
@@ -0,0 +1,37 @@
+//.CommonJS
+var CSSOM = {
+ CSSRule: require("./CSSRule").CSSRule
+};
+///CommonJS
+
+
+/**
+ * @constructor
+ * @see http://www.w3.org/TR/shadow-dom/#host-at-rule
+ */
+CSSOM.CSSHostRule = function CSSHostRule() {
+ CSSOM.CSSRule.call(this);
+ this.cssRules = [];
+};
+
+CSSOM.CSSHostRule.prototype = new CSSOM.CSSRule();
+CSSOM.CSSHostRule.prototype.constructor = CSSOM.CSSHostRule;
+CSSOM.CSSHostRule.prototype.type = 1001;
+//FIXME
+//CSSOM.CSSHostRule.prototype.insertRule = CSSStyleSheet.prototype.insertRule;
+//CSSOM.CSSHostRule.prototype.deleteRule = CSSStyleSheet.prototype.deleteRule;
+
+Object.defineProperty(CSSOM.CSSHostRule.prototype, "cssText", {
+ get: function() {
+ var cssTexts = [];
+ for (var i=0, length=this.cssRules.length; i < length; i++) {
+ cssTexts.push(this.cssRules[i].cssText);
+ }
+ return "@host {" + cssTexts.join("") + "}";
+ }
+});
+
+
+//.CommonJS
+exports.CSSHostRule = CSSOM.CSSHostRule;
+///CommonJS
diff --git a/school/node_modules/cssom/lib/CSSImportRule.js b/school/node_modules/cssom/lib/CSSImportRule.js
new file mode 100644
index 0000000..0398105
--- /dev/null
+++ b/school/node_modules/cssom/lib/CSSImportRule.js
@@ -0,0 +1,132 @@
+//.CommonJS
+var CSSOM = {
+ CSSRule: require("./CSSRule").CSSRule,
+ CSSStyleSheet: require("./CSSStyleSheet").CSSStyleSheet,
+ MediaList: require("./MediaList").MediaList
+};
+///CommonJS
+
+
+/**
+ * @constructor
+ * @see http://dev.w3.org/csswg/cssom/#cssimportrule
+ * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule
+ */
+CSSOM.CSSImportRule = function CSSImportRule() {
+ CSSOM.CSSRule.call(this);
+ this.href = "";
+ this.media = new CSSOM.MediaList();
+ this.styleSheet = new CSSOM.CSSStyleSheet();
+};
+
+CSSOM.CSSImportRule.prototype = new CSSOM.CSSRule();
+CSSOM.CSSImportRule.prototype.constructor = CSSOM.CSSImportRule;
+CSSOM.CSSImportRule.prototype.type = 3;
+
+Object.defineProperty(CSSOM.CSSImportRule.prototype, "cssText", {
+ get: function() {
+ var mediaText = this.media.mediaText;
+ return "@import url(" + this.href + ")" + (mediaText ? " " + mediaText : "") + ";";
+ },
+ set: function(cssText) {
+ var i = 0;
+
+ /**
+ * @import url(partial.css) screen, handheld;
+ * || |
+ * after-import media
+ * |
+ * url
+ */
+ var state = '';
+
+ var buffer = '';
+ var index;
+ for (var character; (character = cssText.charAt(i)); i++) {
+
+ switch (character) {
+ case ' ':
+ case '\t':
+ case '\r':
+ case '\n':
+ case '\f':
+ if (state === 'after-import') {
+ state = 'url';
+ } else {
+ buffer += character;
+ }
+ break;
+
+ case '@':
+ if (!state && cssText.indexOf('@import', i) === i) {
+ state = 'after-import';
+ i += 'import'.length;
+ buffer = '';
+ }
+ break;
+
+ case 'u':
+ if (state === 'url' && cssText.indexOf('url(', i) === i) {
+ index = cssText.indexOf(')', i + 1);
+ if (index === -1) {
+ throw i + ': ")" not found';
+ }
+ i += 'url('.length;
+ var url = cssText.slice(i, index);
+ if (url[0] === url[url.length - 1]) {
+ if (url[0] === '"' || url[0] === "'") {
+ url = url.slice(1, -1);
+ }
+ }
+ this.href = url;
+ i = index;
+ state = 'media';
+ }
+ break;
+
+ case '"':
+ if (state === 'url') {
+ index = cssText.indexOf('"', i + 1);
+ if (!index) {
+ throw i + ": '\"' not found";
+ }
+ this.href = cssText.slice(i + 1, index);
+ i = index;
+ state = 'media';
+ }
+ break;
+
+ case "'":
+ if (state === 'url') {
+ index = cssText.indexOf("'", i + 1);
+ if (!index) {
+ throw i + ': "\'" not found';
+ }
+ this.href = cssText.slice(i + 1, index);
+ i = index;
+ state = 'media';
+ }
+ break;
+
+ case ';':
+ if (state === 'media') {
+ if (buffer) {
+ this.media.mediaText = buffer.trim();
+ }
+ }
+ break;
+
+ default:
+ if (state === 'media') {
+ buffer += character;
+ }
+ break;
+ }
+ }
+ }
+});
+
+
+//.CommonJS
+exports.CSSImportRule = CSSOM.CSSImportRule;
+///CommonJS
diff --git a/school/node_modules/cssom/lib/CSSKeyframeRule.js b/school/node_modules/cssom/lib/CSSKeyframeRule.js
new file mode 100644
index 0000000..3b928ef
--- /dev/null
+++ b/school/node_modules/cssom/lib/CSSKeyframeRule.js
@@ -0,0 +1,37 @@
+//.CommonJS
+var CSSOM = {
+ CSSRule: require("./CSSRule").CSSRule,
+ CSSStyleDeclaration: require('./CSSStyleDeclaration').CSSStyleDeclaration
+};
+///CommonJS
+
+
+/**
+ * @constructor
+ * @see http://www.w3.org/TR/css3-animations/#DOM-CSSKeyframeRule
+ */
+CSSOM.CSSKeyframeRule = function CSSKeyframeRule() {
+ CSSOM.CSSRule.call(this);
+ this.keyText = '';
+ this.style = new CSSOM.CSSStyleDeclaration();
+ this.style.parentRule = this;
+};
+
+CSSOM.CSSKeyframeRule.prototype = new CSSOM.CSSRule();
+CSSOM.CSSKeyframeRule.prototype.constructor = CSSOM.CSSKeyframeRule;
+CSSOM.CSSKeyframeRule.prototype.type = 8;
+//FIXME
+//CSSOM.CSSKeyframeRule.prototype.insertRule = CSSStyleSheet.prototype.insertRule;
+//CSSOM.CSSKeyframeRule.prototype.deleteRule = CSSStyleSheet.prototype.deleteRule;
+
+// http://www.opensource.apple.com/source/WebCore/WebCore-955.66.1/css/WebKitCSSKeyframeRule.cpp
+Object.defineProperty(CSSOM.CSSKeyframeRule.prototype, "cssText", {
+ get: function() {
+ return this.keyText + " {" + this.style.cssText + "} ";
+ }
+});
+
+
+//.CommonJS
+exports.CSSKeyframeRule = CSSOM.CSSKeyframeRule;
+///CommonJS
diff --git a/school/node_modules/cssom/lib/CSSKeyframesRule.js b/school/node_modules/cssom/lib/CSSKeyframesRule.js
new file mode 100644
index 0000000..53e61fa
--- /dev/null
+++ b/school/node_modules/cssom/lib/CSSKeyframesRule.js
@@ -0,0 +1,39 @@
+//.CommonJS
+var CSSOM = {
+ CSSRule: require("./CSSRule").CSSRule
+};
+///CommonJS
+
+
+/**
+ * @constructor
+ * @see http://www.w3.org/TR/css3-animations/#DOM-CSSKeyframesRule
+ */
+CSSOM.CSSKeyframesRule = function CSSKeyframesRule() {
+ CSSOM.CSSRule.call(this);
+ this.name = '';
+ this.cssRules = [];
+};
+
+CSSOM.CSSKeyframesRule.prototype = new CSSOM.CSSRule();
+CSSOM.CSSKeyframesRule.prototype.constructor = CSSOM.CSSKeyframesRule;
+CSSOM.CSSKeyframesRule.prototype.type = 7;
+//FIXME
+//CSSOM.CSSKeyframesRule.prototype.insertRule = CSSStyleSheet.prototype.insertRule;
+//CSSOM.CSSKeyframesRule.prototype.deleteRule = CSSStyleSheet.prototype.deleteRule;
+
+// http://www.opensource.apple.com/source/WebCore/WebCore-955.66.1/css/WebKitCSSKeyframesRule.cpp
+Object.defineProperty(CSSOM.CSSKeyframesRule.prototype, "cssText", {
+ get: function() {
+ var cssTexts = [];
+ for (var i=0, length=this.cssRules.length; i < length; i++) {
+ cssTexts.push(" " + this.cssRules[i].cssText);
+ }
+ return "@" + (this._vendorPrefix || '') + "keyframes " + this.name + " { \n" + cssTexts.join("\n") + "\n}";
+ }
+});
+
+
+//.CommonJS
+exports.CSSKeyframesRule = CSSOM.CSSKeyframesRule;
+///CommonJS
diff --git a/school/node_modules/cssom/lib/CSSMediaRule.js b/school/node_modules/cssom/lib/CSSMediaRule.js
new file mode 100644
index 0000000..367a35e
--- /dev/null
+++ b/school/node_modules/cssom/lib/CSSMediaRule.js
@@ -0,0 +1,41 @@
+//.CommonJS
+var CSSOM = {
+ CSSRule: require("./CSSRule").CSSRule,
+ MediaList: require("./MediaList").MediaList
+};
+///CommonJS
+
+
+/**
+ * @constructor
+ * @see http://dev.w3.org/csswg/cssom/#cssmediarule
+ * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule
+ */
+CSSOM.CSSMediaRule = function CSSMediaRule() {
+ CSSOM.CSSRule.call(this);
+ this.media = new CSSOM.MediaList();
+ this.cssRules = [];
+};
+
+CSSOM.CSSMediaRule.prototype = new CSSOM.CSSRule();
+CSSOM.CSSMediaRule.prototype.constructor = CSSOM.CSSMediaRule;
+CSSOM.CSSMediaRule.prototype.type = 4;
+//FIXME
+//CSSOM.CSSMediaRule.prototype.insertRule = CSSStyleSheet.prototype.insertRule;
+//CSSOM.CSSMediaRule.prototype.deleteRule = CSSStyleSheet.prototype.deleteRule;
+
+// http://opensource.apple.com/source/WebCore/WebCore-658.28/css/CSSMediaRule.cpp
+Object.defineProperty(CSSOM.CSSMediaRule.prototype, "cssText", {
+ get: function() {
+ var cssTexts = [];
+ for (var i=0, length=this.cssRules.length; i < length; i++) {
+ cssTexts.push(this.cssRules[i].cssText);
+ }
+ return "@media " + this.media.mediaText + " {" + cssTexts.join("") + "}";
+ }
+});
+
+
+//.CommonJS
+exports.CSSMediaRule = CSSOM.CSSMediaRule;
+///CommonJS
diff --git a/school/node_modules/cssom/lib/CSSOM.js b/school/node_modules/cssom/lib/CSSOM.js
new file mode 100644
index 0000000..95f3563
--- /dev/null
+++ b/school/node_modules/cssom/lib/CSSOM.js
@@ -0,0 +1,3 @@
+var CSSOM = {};
+
+
diff --git a/school/node_modules/cssom/lib/CSSRule.js b/school/node_modules/cssom/lib/CSSRule.js
new file mode 100644
index 0000000..0b5e25b
--- /dev/null
+++ b/school/node_modules/cssom/lib/CSSRule.js
@@ -0,0 +1,43 @@
+//.CommonJS
+var CSSOM = {};
+///CommonJS
+
+
+/**
+ * @constructor
+ * @see http://dev.w3.org/csswg/cssom/#the-cssrule-interface
+ * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule
+ */
+CSSOM.CSSRule = function CSSRule() {
+ this.parentRule = null;
+ this.parentStyleSheet = null;
+};
+
+CSSOM.CSSRule.UNKNOWN_RULE = 0; // obsolete
+CSSOM.CSSRule.STYLE_RULE = 1;
+CSSOM.CSSRule.CHARSET_RULE = 2; // obsolete
+CSSOM.CSSRule.IMPORT_RULE = 3;
+CSSOM.CSSRule.MEDIA_RULE = 4;
+CSSOM.CSSRule.FONT_FACE_RULE = 5;
+CSSOM.CSSRule.PAGE_RULE = 6;
+CSSOM.CSSRule.KEYFRAMES_RULE = 7;
+CSSOM.CSSRule.KEYFRAME_RULE = 8;
+CSSOM.CSSRule.MARGIN_RULE = 9;
+CSSOM.CSSRule.NAMESPACE_RULE = 10;
+CSSOM.CSSRule.COUNTER_STYLE_RULE = 11;
+CSSOM.CSSRule.SUPPORTS_RULE = 12;
+CSSOM.CSSRule.DOCUMENT_RULE = 13;
+CSSOM.CSSRule.FONT_FEATURE_VALUES_RULE = 14;
+CSSOM.CSSRule.VIEWPORT_RULE = 15;
+CSSOM.CSSRule.REGION_STYLE_RULE = 16;
+
+
+CSSOM.CSSRule.prototype = {
+ constructor: CSSOM.CSSRule
+ //FIXME
+};
+
+
+//.CommonJS
+exports.CSSRule = CSSOM.CSSRule;
+///CommonJS
diff --git a/school/node_modules/cssom/lib/CSSStyleDeclaration.js b/school/node_modules/cssom/lib/CSSStyleDeclaration.js
new file mode 100644
index 0000000..b43b9af
--- /dev/null
+++ b/school/node_modules/cssom/lib/CSSStyleDeclaration.js
@@ -0,0 +1,148 @@
+//.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
diff --git a/school/node_modules/cssom/lib/CSSStyleRule.js b/school/node_modules/cssom/lib/CSSStyleRule.js
new file mode 100644
index 0000000..630b3f8
--- /dev/null
+++ b/school/node_modules/cssom/lib/CSSStyleRule.js
@@ -0,0 +1,190 @@
+//.CommonJS
+var CSSOM = {
+ CSSStyleDeclaration: require("./CSSStyleDeclaration").CSSStyleDeclaration,
+ CSSRule: require("./CSSRule").CSSRule
+};
+///CommonJS
+
+
+/**
+ * @constructor
+ * @see http://dev.w3.org/csswg/cssom/#cssstylerule
+ * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule
+ */
+CSSOM.CSSStyleRule = function CSSStyleRule() {
+ CSSOM.CSSRule.call(this);
+ this.selectorText = "";
+ this.style = new CSSOM.CSSStyleDeclaration();
+ this.style.parentRule = this;
+};
+
+CSSOM.CSSStyleRule.prototype = new CSSOM.CSSRule();
+CSSOM.CSSStyleRule.prototype.constructor = CSSOM.CSSStyleRule;
+CSSOM.CSSStyleRule.prototype.type = 1;
+
+Object.defineProperty(CSSOM.CSSStyleRule.prototype, "cssText", {
+ get: function() {
+ var text;
+ if (this.selectorText) {
+ text = this.selectorText + " {" + this.style.cssText + "}";
+ } else {
+ text = "";
+ }
+ return text;
+ },
+ set: function(cssText) {
+ var rule = CSSOM.CSSStyleRule.parse(cssText);
+ this.style = rule.style;
+ this.selectorText = rule.selectorText;
+ }
+});
+
+
+/**
+ * NON-STANDARD
+ * lightweight version of parse.js.
+ * @param {string} ruleText
+ * @return CSSStyleRule
+ */
+CSSOM.CSSStyleRule.parse = function(ruleText) {
+ var i = 0;
+ var state = "selector";
+ var index;
+ var j = i;
+ var buffer = "";
+
+ var SIGNIFICANT_WHITESPACE = {
+ "selector": true,
+ "value": true
+ };
+
+ var styleRule = new CSSOM.CSSStyleRule();
+ var name, priority="";
+
+ for (var character; (character = ruleText.charAt(i)); i++) {
+
+ switch (character) {
+
+ case " ":
+ case "\t":
+ case "\r":
+ case "\n":
+ case "\f":
+ if (SIGNIFICANT_WHITESPACE[state]) {
+ // Squash 2 or more white-spaces in the row into 1
+ switch (ruleText.charAt(i - 1)) {
+ case " ":
+ case "\t":
+ case "\r":
+ case "\n":
+ case "\f":
+ break;
+ default:
+ buffer += " ";
+ break;
+ }
+ }
+ break;
+
+ // String
+ case '"':
+ j = i + 1;
+ index = ruleText.indexOf('"', j) + 1;
+ if (!index) {
+ throw '" is missing';
+ }
+ buffer += ruleText.slice(i, index);
+ i = index - 1;
+ break;
+
+ case "'":
+ j = i + 1;
+ index = ruleText.indexOf("'", j) + 1;
+ if (!index) {
+ throw "' is missing";
+ }
+ buffer += ruleText.slice(i, index);
+ i = index - 1;
+ break;
+
+ // Comment
+ case "/":
+ if (ruleText.charAt(i + 1) === "*") {
+ i += 2;
+ index = ruleText.indexOf("*/", i);
+ if (index === -1) {
+ throw new SyntaxError("Missing */");
+ } else {
+ i = index + 1;
+ }
+ } else {
+ buffer += character;
+ }
+ break;
+
+ case "{":
+ if (state === "selector") {
+ styleRule.selectorText = buffer.trim();
+ buffer = "";
+ state = "name";
+ }
+ break;
+
+ case ":":
+ if (state === "name") {
+ name = buffer.trim();
+ buffer = "";
+ state = "value";
+ } else {
+ buffer += character;
+ }
+ break;
+
+ case "!":
+ if (state === "value" && ruleText.indexOf("!important", i) === i) {
+ priority = "important";
+ i += "important".length;
+ } else {
+ buffer += character;
+ }
+ break;
+
+ case ";":
+ if (state === "value") {
+ styleRule.style.setProperty(name, buffer.trim(), priority);
+ priority = "";
+ buffer = "";
+ state = "name";
+ } else {
+ buffer += character;
+ }
+ break;
+
+ case "}":
+ if (state === "value") {
+ styleRule.style.setProperty(name, buffer.trim(), priority);
+ priority = "";
+ buffer = "";
+ } else if (state === "name") {
+ break;
+ } else {
+ buffer += character;
+ }
+ state = "selector";
+ break;
+
+ default:
+ buffer += character;
+ break;
+
+ }
+ }
+
+ return styleRule;
+
+};
+
+
+//.CommonJS
+exports.CSSStyleRule = CSSOM.CSSStyleRule;
+///CommonJS
diff --git a/school/node_modules/cssom/lib/CSSStyleSheet.js b/school/node_modules/cssom/lib/CSSStyleSheet.js
new file mode 100644
index 0000000..f0e0dfc
--- /dev/null
+++ b/school/node_modules/cssom/lib/CSSStyleSheet.js
@@ -0,0 +1,88 @@
+//.CommonJS
+var CSSOM = {
+ StyleSheet: require("./StyleSheet").StyleSheet,
+ CSSStyleRule: require("./CSSStyleRule").CSSStyleRule
+};
+///CommonJS
+
+
+/**
+ * @constructor
+ * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet
+ */
+CSSOM.CSSStyleSheet = function CSSStyleSheet() {
+ CSSOM.StyleSheet.call(this);
+ this.cssRules = [];
+};
+
+
+CSSOM.CSSStyleSheet.prototype = new CSSOM.StyleSheet();
+CSSOM.CSSStyleSheet.prototype.constructor = CSSOM.CSSStyleSheet;
+
+
+/**
+ * Used to insert a new rule into the style sheet. The new rule now becomes part of the cascade.
+ *
+ * sheet = new Sheet("body {margin: 0}")
+ * sheet.toString()
+ * -> "body{margin:0;}"
+ * sheet.insertRule("img {border: none}", 0)
+ * -> 0
+ * sheet.toString()
+ * -> "img{border:none;}body{margin:0;}"
+ *
+ * @param {string} rule
+ * @param {number} index
+ * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-insertRule
+ * @return {number} The index within the style sheet's rule collection of the newly inserted rule.
+ */
+CSSOM.CSSStyleSheet.prototype.insertRule = function(rule, index) {
+ if (index < 0 || index > this.cssRules.length) {
+ throw new RangeError("INDEX_SIZE_ERR");
+ }
+ var cssRule = CSSOM.parse(rule).cssRules[0];
+ cssRule.parentStyleSheet = this;
+ this.cssRules.splice(index, 0, cssRule);
+ return index;
+};
+
+
+/**
+ * Used to delete a rule from the style sheet.
+ *
+ * sheet = new Sheet("img{border:none} body{margin:0}")
+ * sheet.toString()
+ * -> "img{border:none;}body{margin:0;}"
+ * sheet.deleteRule(0)
+ * sheet.toString()
+ * -> "body{margin:0;}"
+ *
+ * @param {number} index within the style sheet's rule list of the rule to remove.
+ * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-deleteRule
+ */
+CSSOM.CSSStyleSheet.prototype.deleteRule = function(index) {
+ if (index < 0 || index >= this.cssRules.length) {
+ throw new RangeError("INDEX_SIZE_ERR");
+ }
+ this.cssRules.splice(index, 1);
+};
+
+
+/**
+ * NON-STANDARD
+ * @return {string} serialize stylesheet
+ */
+CSSOM.CSSStyleSheet.prototype.toString = function() {
+ var result = "";
+ var rules = this.cssRules;
+ for (var i=0; i<rules.length; i++) {
+ result += rules[i].cssText + "\n";
+ }
+ return result;
+};
+
+
+//.CommonJS
+exports.CSSStyleSheet = CSSOM.CSSStyleSheet;
+CSSOM.parse = require('./parse').parse; // Cannot be included sooner due to the mutual dependency between parse.js and CSSStyleSheet.js
+///CommonJS
diff --git a/school/node_modules/cssom/lib/CSSSupportsRule.js b/school/node_modules/cssom/lib/CSSSupportsRule.js
new file mode 100644
index 0000000..19f85d4
--- /dev/null
+++ b/school/node_modules/cssom/lib/CSSSupportsRule.js
@@ -0,0 +1,36 @@
+//.CommonJS
+var CSSOM = {
+ CSSRule: require("./CSSRule").CSSRule,
+};
+///CommonJS
+
+
+/**
+ * @constructor
+ * @see https://drafts.csswg.org/css-conditional-3/#the-csssupportsrule-interface
+ */
+CSSOM.CSSSupportsRule = function CSSSupportsRule() {
+ CSSOM.CSSRule.call(this);
+ this.conditionText = '';
+ this.cssRules = [];
+};
+
+CSSOM.CSSSupportsRule.prototype = new CSSOM.CSSRule();
+CSSOM.CSSSupportsRule.prototype.constructor = CSSOM.CSSSupportsRule;
+CSSOM.CSSSupportsRule.prototype.type = 12;
+
+Object.defineProperty(CSSOM.CSSSupportsRule.prototype, "cssText", {
+ get: function() {
+ var cssTexts = [];
+
+ for (var i = 0, length = this.cssRules.length; i < length; i++) {
+ cssTexts.push(this.cssRules[i].cssText);
+ }
+
+ return "@supports " + this.conditionText + " {" + cssTexts.join("") + "}";
+ }
+});
+
+//.CommonJS
+exports.CSSSupportsRule = CSSOM.CSSSupportsRule;
+///CommonJS
diff --git a/school/node_modules/cssom/lib/CSSValue.js b/school/node_modules/cssom/lib/CSSValue.js
new file mode 100644
index 0000000..2b868d5
--- /dev/null
+++ b/school/node_modules/cssom/lib/CSSValue.js
@@ -0,0 +1,43 @@
+//.CommonJS
+var CSSOM = {};
+///CommonJS
+
+
+/**
+ * @constructor
+ * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue
+ *
+ * TODO: add if needed
+ */
+CSSOM.CSSValue = function CSSValue() {
+};
+
+CSSOM.CSSValue.prototype = {
+ constructor: CSSOM.CSSValue,
+
+ // @see: http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue
+ set cssText(text) {
+ var name = this._getConstructorName();
+
+ throw new Error('DOMException: property "cssText" of "' + name + '" is readonly and can not be replaced with "' + text + '"!');
+ },
+
+ get cssText() {
+ var name = this._getConstructorName();
+
+ throw new Error('getter "cssText" of "' + name + '" is not implemented!');
+ },
+
+ _getConstructorName: function() {
+ var s = this.constructor.toString(),
+ c = s.match(/function\s([^\(]+)/),
+ name = c[1];
+
+ return name;
+ }
+};
+
+
+//.CommonJS
+exports.CSSValue = CSSOM.CSSValue;
+///CommonJS
diff --git a/school/node_modules/cssom/lib/CSSValueExpression.js b/school/node_modules/cssom/lib/CSSValueExpression.js
new file mode 100644
index 0000000..3a6881d
--- /dev/null
+++ b/school/node_modules/cssom/lib/CSSValueExpression.js
@@ -0,0 +1,344 @@
+//.CommonJS
+var CSSOM = {
+ CSSValue: require('./CSSValue').CSSValue
+};
+///CommonJS
+
+
+/**
+ * @constructor
+ * @see http://msdn.microsoft.com/en-us/library/ms537634(v=vs.85).aspx
+ *
+ */
+CSSOM.CSSValueExpression = function CSSValueExpression(token, idx) {
+ this._token = token;
+ this._idx = idx;
+};
+
+CSSOM.CSSValueExpression.prototype = new CSSOM.CSSValue();
+CSSOM.CSSValueExpression.prototype.constructor = CSSOM.CSSValueExpression;
+
+/**
+ * parse css expression() value
+ *
+ * @return {Object}
+ * - error:
+ * or
+ * - idx:
+ * - expression:
+ *
+ * Example:
+ *
+ * .selector {
+ * zoom: expression(documentElement.clientWidth > 1000 ? '1000px' : 'auto');
+ * }
+ */
+CSSOM.CSSValueExpression.prototype.parse = function() {
+ var token = this._token,
+ idx = this._idx;
+
+ var character = '',
+ expression = '',
+ error = '',
+ info,
+ paren = [];
+
+
+ for (; ; ++idx) {
+ character = token.charAt(idx);
+
+ // end of token
+ if (character === '') {
+ error = 'css expression error: unfinished expression!';
+ break;
+ }
+
+ switch(character) {
+ case '(':
+ paren.push(character);
+ expression += character;
+ break;
+
+ case ')':
+ paren.pop(character);
+ expression += character;
+ break;
+
+ case '/':
+ if ((info = this._parseJSComment(token, idx))) { // comment?
+ if (info.error) {
+ error = 'css expression error: unfinished comment in expression!';
+ } else {
+ idx = info.idx;
+ // ignore the comment
+ }
+ } else if ((info = this._parseJSRexExp(token, idx))) { // regexp
+ idx = info.idx;
+ expression += info.text;
+ } else { // other
+ expression += character;
+ }
+ break;
+
+ case "'":
+ case '"':
+ info = this._parseJSString(token, idx, character);
+ if (info) { // string
+ idx = info.idx;
+ expression += info.text;
+ } else {
+ expression += character;
+ }
+ break;
+
+ default:
+ expression += character;
+ break;
+ }
+
+ if (error) {
+ break;
+ }
+
+ // end of expression
+ if (paren.length === 0) {
+ break;
+ }
+ }
+
+ var ret;
+ if (error) {
+ ret = {
+ error: error
+ };
+ } else {
+ ret = {
+ idx: idx,
+ expression: expression
+ };
+ }
+
+ return ret;
+};
+
+
+/**
+ *
+ * @return {Object|false}
+ * - idx:
+ * - text:
+ * or
+ * - error:
+ * or
+ * false
+ *
+ */
+CSSOM.CSSValueExpression.prototype._parseJSComment = function(token, idx) {
+ var nextChar = token.charAt(idx + 1),
+ text;
+
+ if (nextChar === '/' || nextChar === '*') {
+ var startIdx = idx,
+ endIdx,
+ commentEndChar;
+
+ if (nextChar === '/') { // line comment
+ commentEndChar = '\n';
+ } else if (nextChar === '*') { // block comment
+ commentEndChar = '*/';
+ }
+
+ endIdx = token.indexOf(commentEndChar, startIdx + 1 + 1);
+ if (endIdx !== -1) {
+ endIdx = endIdx + commentEndChar.length - 1;
+ text = token.substring(idx, endIdx + 1);
+ return {
+ idx: endIdx,
+ text: text
+ };
+ } else {
+ var error = 'css expression error: unfinished comment in expression!';
+ return {
+ error: error
+ };
+ }
+ } else {
+ return false;
+ }
+};
+
+
+/**
+ *
+ * @return {Object|false}
+ * - idx:
+ * - text:
+ * or
+ * false
+ *
+ */
+CSSOM.CSSValueExpression.prototype._parseJSString = function(token, idx, sep) {
+ var endIdx = this._findMatchedIdx(token, idx, sep),
+ text;
+
+ if (endIdx === -1) {
+ return false;
+ } else {
+ text = token.substring(idx, endIdx + sep.length);
+
+ return {
+ idx: endIdx,
+ text: text
+ };
+ }
+};
+
+
+/**
+ * parse regexp in css expression
+ *
+ * @return {Object|false}
+ * - idx:
+ * - regExp:
+ * or
+ * false
+ */
+
+/*
+
+all legal RegExp
+
+/a/
+(/a/)
+[/a/]
+[12, /a/]
+
+!/a/
+
++/a/
+-/a/
+* /a/
+/ /a/
+%/a/
+
+===/a/
+!==/a/
+==/a/
+!=/a/
+>/a/
+>=/a/
+</a/
+<=/a/
+
+&/a/
+|/a/
+^/a/
+~/a/
+<</a/
+>>/a/
+>>>/a/
+
+&&/a/
+||/a/
+?/a/
+=/a/
+,/a/
+
+ delete /a/
+ in /a/
+instanceof /a/
+ new /a/
+ typeof /a/
+ void /a/
+
+*/
+CSSOM.CSSValueExpression.prototype._parseJSRexExp = function(token, idx) {
+ var before = token.substring(0, idx).replace(/\s+$/, ""),
+ legalRegx = [
+ /^$/,
+ /\($/,
+ /\[$/,
+ /\!$/,
+ /\+$/,
+ /\-$/,
+ /\*$/,
+ /\/\s+/,
+ /\%$/,
+ /\=$/,
+ /\>$/,
+ /<$/,
+ /\&$/,
+ /\|$/,
+ /\^$/,
+ /\~$/,
+ /\?$/,
+ /\,$/,
+ /delete$/,
+ /in$/,
+ /instanceof$/,
+ /new$/,
+ /typeof$/,
+ /void$/
+ ];
+
+ var isLegal = legalRegx.some(function(reg) {
+ return reg.test(before);
+ });
+
+ if (!isLegal) {
+ return false;
+ } else {
+ var sep = '/';
+
+ // same logic as string
+ return this._parseJSString(token, idx, sep);
+ }
+};
+
+
+/**
+ *
+ * find next sep(same line) index in `token`
+ *
+ * @return {Number}
+ *
+ */
+CSSOM.CSSValueExpression.prototype._findMatchedIdx = function(token, idx, sep) {
+ var startIdx = idx,
+ endIdx;
+
+ var NOT_FOUND = -1;
+
+ while(true) {
+ endIdx = token.indexOf(sep, startIdx + 1);
+
+ if (endIdx === -1) { // not found
+ endIdx = NOT_FOUND;
+ break;
+ } else {
+ var text = token.substring(idx + 1, endIdx),
+ matched = text.match(/\\+$/);
+ if (!matched || matched[0] % 2 === 0) { // not escaped
+ break;
+ } else {
+ startIdx = endIdx;
+ }
+ }
+ }
+
+ // boundary must be in the same line(js sting or regexp)
+ var nextNewLineIdx = token.indexOf('\n', idx + 1);
+ if (nextNewLineIdx < endIdx) {
+ endIdx = NOT_FOUND;
+ }
+
+
+ return endIdx;
+};
+
+
+
+
+//.CommonJS
+exports.CSSValueExpression = CSSOM.CSSValueExpression;
+///CommonJS
diff --git a/school/node_modules/cssom/lib/MatcherList.js b/school/node_modules/cssom/lib/MatcherList.js
new file mode 100644
index 0000000..a791585
--- /dev/null
+++ b/school/node_modules/cssom/lib/MatcherList.js
@@ -0,0 +1,62 @@
+//.CommonJS
+var CSSOM = {};
+///CommonJS
+
+
+/**
+ * @constructor
+ * @see https://developer.mozilla.org/en/CSS/@-moz-document
+ */
+CSSOM.MatcherList = function MatcherList(){
+ this.length = 0;
+};
+
+CSSOM.MatcherList.prototype = {
+
+ constructor: CSSOM.MatcherList,
+
+ /**
+ * @return {string}
+ */
+ get matcherText() {
+ return Array.prototype.join.call(this, ", ");
+ },
+
+ /**
+ * @param {string} value
+ */
+ set matcherText(value) {
+ // just a temporary solution, actually it may be wrong by just split the value with ',', because a url can include ','.
+ var values = value.split(",");
+ var length = this.length = values.length;
+ for (var i=0; i<length; i++) {
+ this[i] = values[i].trim();
+ }
+ },
+
+ /**
+ * @param {string} matcher
+ */
+ appendMatcher: function(matcher) {
+ if (Array.prototype.indexOf.call(this, matcher) === -1) {
+ this[this.length] = matcher;
+ this.length++;
+ }
+ },
+
+ /**
+ * @param {string} matcher
+ */
+ deleteMatcher: function(matcher) {
+ var index = Array.prototype.indexOf.call(this, matcher);
+ if (index !== -1) {
+ Array.prototype.splice.call(this, index, 1);
+ }
+ }
+
+};
+
+
+//.CommonJS
+exports.MatcherList = CSSOM.MatcherList;
+///CommonJS
diff --git a/school/node_modules/cssom/lib/MediaList.js b/school/node_modules/cssom/lib/MediaList.js
new file mode 100644
index 0000000..9ce18ab
--- /dev/null
+++ b/school/node_modules/cssom/lib/MediaList.js
@@ -0,0 +1,61 @@
+//.CommonJS
+var CSSOM = {};
+///CommonJS
+
+
+/**
+ * @constructor
+ * @see http://dev.w3.org/csswg/cssom/#the-medialist-interface
+ */
+CSSOM.MediaList = function MediaList(){
+ this.length = 0;
+};
+
+CSSOM.MediaList.prototype = {
+
+ constructor: CSSOM.MediaList,
+
+ /**
+ * @return {string}
+ */
+ get mediaText() {
+ return Array.prototype.join.call(this, ", ");
+ },
+
+ /**
+ * @param {string} value
+ */
+ set mediaText(value) {
+ var values = value.split(",");
+ var length = this.length = values.length;
+ for (var i=0; i<length; i++) {
+ this[i] = values[i].trim();
+ }
+ },
+
+ /**
+ * @param {string} medium
+ */
+ appendMedium: function(medium) {
+ if (Array.prototype.indexOf.call(this, medium) === -1) {
+ this[this.length] = medium;
+ this.length++;
+ }
+ },
+
+ /**
+ * @param {string} medium
+ */
+ deleteMedium: function(medium) {
+ var index = Array.prototype.indexOf.call(this, medium);
+ if (index !== -1) {
+ Array.prototype.splice.call(this, index, 1);
+ }
+ }
+
+};
+
+
+//.CommonJS
+exports.MediaList = CSSOM.MediaList;
+///CommonJS
diff --git a/school/node_modules/cssom/lib/StyleSheet.js b/school/node_modules/cssom/lib/StyleSheet.js
new file mode 100644
index 0000000..cfe69b5
--- /dev/null
+++ b/school/node_modules/cssom/lib/StyleSheet.js
@@ -0,0 +1,17 @@
+//.CommonJS
+var CSSOM = {};
+///CommonJS
+
+
+/**
+ * @constructor
+ * @see http://dev.w3.org/csswg/cssom/#the-stylesheet-interface
+ */
+CSSOM.StyleSheet = function StyleSheet() {
+ this.parentStyleSheet = null;
+};
+
+
+//.CommonJS
+exports.StyleSheet = CSSOM.StyleSheet;
+///CommonJS
diff --git a/school/node_modules/cssom/lib/clone.js b/school/node_modules/cssom/lib/clone.js
new file mode 100644
index 0000000..c6867f2
--- /dev/null
+++ b/school/node_modules/cssom/lib/clone.js
@@ -0,0 +1,71 @@
+//.CommonJS
+var CSSOM = {
+ CSSStyleSheet: require("./CSSStyleSheet").CSSStyleSheet,
+ CSSStyleRule: require("./CSSStyleRule").CSSStyleRule,
+ CSSMediaRule: require("./CSSMediaRule").CSSMediaRule,
+ CSSSupportsRule: require("./CSSSupportsRule").CSSSupportsRule,
+ CSSStyleDeclaration: require("./CSSStyleDeclaration").CSSStyleDeclaration,
+ CSSKeyframeRule: require('./CSSKeyframeRule').CSSKeyframeRule,
+ CSSKeyframesRule: require('./CSSKeyframesRule').CSSKeyframesRule
+};
+///CommonJS
+
+
+/**
+ * Produces a deep copy of stylesheet — the instance variables of stylesheet are copied recursively.
+ * @param {CSSStyleSheet|CSSOM.CSSStyleSheet} stylesheet
+ * @nosideeffects
+ * @return {CSSOM.CSSStyleSheet}
+ */
+CSSOM.clone = function clone(stylesheet) {
+
+ var cloned = new CSSOM.CSSStyleSheet();
+
+ var rules = stylesheet.cssRules;
+ if (!rules) {
+ return cloned;
+ }
+
+ for (var i = 0, rulesLength = rules.length; i < rulesLength; i++) {
+ var rule = rules[i];
+ var ruleClone = cloned.cssRules[i] = new rule.constructor();
+
+ var style = rule.style;
+ if (style) {
+ var styleClone = ruleClone.style = new CSSOM.CSSStyleDeclaration();
+ for (var j = 0, styleLength = style.length; j < styleLength; j++) {
+ var name = styleClone[j] = style[j];
+ styleClone[name] = style[name];
+ styleClone._importants[name] = style.getPropertyPriority(name);
+ }
+ styleClone.length = style.length;
+ }
+
+ if (rule.hasOwnProperty('keyText')) {
+ ruleClone.keyText = rule.keyText;
+ }
+
+ if (rule.hasOwnProperty('selectorText')) {
+ ruleClone.selectorText = rule.selectorText;
+ }
+
+ if (rule.hasOwnProperty('mediaText')) {
+ ruleClone.mediaText = rule.mediaText;
+ }
+
+ if (rule.hasOwnProperty('conditionText')) {
+ ruleClone.conditionText = rule.conditionText;
+ }
+
+ if (rule.hasOwnProperty('cssRules')) {
+ ruleClone.cssRules = clone(rule).cssRules;
+ }
+ }
+
+ return cloned;
+
+};
+
+//.CommonJS
+exports.clone = CSSOM.clone;
+///CommonJS
diff --git a/school/node_modules/cssom/lib/index.js b/school/node_modules/cssom/lib/index.js
new file mode 100644
index 0000000..e14826c
--- /dev/null
+++ b/school/node_modules/cssom/lib/index.js
@@ -0,0 +1,21 @@
+'use strict';
+
+exports.CSSStyleDeclaration = require('./CSSStyleDeclaration').CSSStyleDeclaration;
+exports.CSSRule = require('./CSSRule').CSSRule;
+exports.CSSStyleRule = require('./CSSStyleRule').CSSStyleRule;
+exports.MediaList = require('./MediaList').MediaList;
+exports.CSSMediaRule = require('./CSSMediaRule').CSSMediaRule;
+exports.CSSSupportsRule = require('./CSSSupportsRule').CSSSupportsRule;
+exports.CSSImportRule = require('./CSSImportRule').CSSImportRule;
+exports.CSSFontFaceRule = require('./CSSFontFaceRule').CSSFontFaceRule;
+exports.CSSHostRule = require('./CSSHostRule').CSSHostRule;
+exports.StyleSheet = require('./StyleSheet').StyleSheet;
+exports.CSSStyleSheet = require('./CSSStyleSheet').CSSStyleSheet;
+exports.CSSKeyframesRule = require('./CSSKeyframesRule').CSSKeyframesRule;
+exports.CSSKeyframeRule = require('./CSSKeyframeRule').CSSKeyframeRule;
+exports.MatcherList = require('./MatcherList').MatcherList;
+exports.CSSDocumentRule = require('./CSSDocumentRule').CSSDocumentRule;
+exports.CSSValue = require('./CSSValue').CSSValue;
+exports.CSSValueExpression = require('./CSSValueExpression').CSSValueExpression;
+exports.parse = require('./parse').parse;
+exports.clone = require('./clone').clone;
diff --git a/school/node_modules/cssom/lib/parse.js b/school/node_modules/cssom/lib/parse.js
new file mode 100644
index 0000000..450df31
--- /dev/null
+++ b/school/node_modules/cssom/lib/parse.js
@@ -0,0 +1,463 @@
+//.CommonJS
+var CSSOM = {};
+///CommonJS
+
+
+/**
+ * @param {string} token
+ */
+CSSOM.parse = function parse(token) {
+
+ var i = 0;
+
+ /**
+ "before-selector" or
+ "selector" or
+ "atRule" or
+ "atBlock" or
+ "conditionBlock" or
+ "before-name" or
+ "name" or
+ "before-value" or
+ "value"
+ */
+ var state = "before-selector";
+
+ var index;
+ var buffer = "";
+ var valueParenthesisDepth = 0;
+
+ var SIGNIFICANT_WHITESPACE = {
+ "selector": true,
+ "value": true,
+ "value-parenthesis": true,
+ "atRule": true,
+ "importRule-begin": true,
+ "importRule": true,
+ "atBlock": true,
+ "conditionBlock": true,
+ 'documentRule-begin': true
+ };
+
+ var styleSheet = new CSSOM.CSSStyleSheet();
+
+ // @type CSSStyleSheet|CSSMediaRule|CSSSupportsRule|CSSFontFaceRule|CSSKeyframesRule|CSSDocumentRule
+ var currentScope = styleSheet;
+
+ // @type CSSMediaRule|CSSSupportsRule|CSSKeyframesRule|CSSDocumentRule
+ var parentRule;
+
+ var ancestorRules = [];
+ var hasAncestors = false;
+ var prevScope;
+
+ var name, priority="", styleRule, mediaRule, supportsRule, importRule, fontFaceRule, keyframesRule, documentRule, hostRule;
+
+ var atKeyframesRegExp = /@(-(?:\w+-)+)?keyframes/g;
+
+ var parseError = function(message) {
+ var lines = token.substring(0, i).split('\n');
+ var lineCount = lines.length;
+ var charCount = lines.pop().length + 1;
+ var error = new Error(message + ' (line ' + lineCount + ', char ' + charCount + ')');
+ error.line = lineCount;
+ /* jshint sub : true */
+ error['char'] = charCount;
+ error.styleSheet = styleSheet;
+ throw error;
+ };
+
+ for (var character; (character = token.charAt(i)); i++) {
+
+ switch (character) {
+
+ case " ":
+ case "\t":
+ case "\r":
+ case "\n":
+ case "\f":
+ if (SIGNIFICANT_WHITESPACE[state]) {
+ buffer += character;
+ }
+ break;
+
+ // String
+ case '"':
+ index = i + 1;
+ do {
+ index = token.indexOf('"', index) + 1;
+ if (!index) {
+ parseError('Unmatched "');
+ }
+ } while (token[index - 2] === '\\');
+ buffer += token.slice(i, index);
+ i = index - 1;
+ switch (state) {
+ case 'before-value':
+ state = 'value';
+ break;
+ case 'importRule-begin':
+ state = 'importRule';
+ break;
+ }
+ break;
+
+ case "'":
+ index = i + 1;
+ do {
+ index = token.indexOf("'", index) + 1;
+ if (!index) {
+ parseError("Unmatched '");
+ }
+ } while (token[index - 2] === '\\');
+ buffer += token.slice(i, index);
+ i = index - 1;
+ switch (state) {
+ case 'before-value':
+ state = 'value';
+ break;
+ case 'importRule-begin':
+ state = 'importRule';
+ break;
+ }
+ break;
+
+ // Comment
+ case "/":
+ if (token.charAt(i + 1) === "*") {
+ i += 2;
+ index = token.indexOf("*/", i);
+ if (index === -1) {
+ parseError("Missing */");
+ } else {
+ i = index + 1;
+ }
+ } else {
+ buffer += character;
+ }
+ if (state === "importRule-begin") {
+ buffer += " ";
+ state = "importRule";
+ }
+ break;
+
+ // At-rule
+ case "@":
+ if (token.indexOf("@-moz-document", i) === i) {
+ state = "documentRule-begin";
+ documentRule = new CSSOM.CSSDocumentRule();
+ documentRule.__starts = i;
+ i += "-moz-document".length;
+ buffer = "";
+ break;
+ } else if (token.indexOf("@media", i) === i) {
+ state = "atBlock";
+ mediaRule = new CSSOM.CSSMediaRule();
+ mediaRule.__starts = i;
+ i += "media".length;
+ buffer = "";
+ break;
+ } else if (token.indexOf("@supports", i) === i) {
+ state = "conditionBlock";
+ supportsRule = new CSSOM.CSSSupportsRule();
+ supportsRule.__starts = i;
+ i += "supports".length;
+ buffer = "";
+ break;
+ } else if (token.indexOf("@host", i) === i) {
+ state = "hostRule-begin";
+ i += "host".length;
+ hostRule = new CSSOM.CSSHostRule();
+ hostRule.__starts = i;
+ buffer = "";
+ break;
+ } else if (token.indexOf("@import", i) === i) {
+ state = "importRule-begin";
+ i += "import".length;
+ buffer += "@import";
+ break;
+ } else if (token.indexOf("@font-face", i) === i) {
+ state = "fontFaceRule-begin";
+ i += "font-face".length;
+ fontFaceRule = new CSSOM.CSSFontFaceRule();
+ fontFaceRule.__starts = i;
+ buffer = "";
+ break;
+ } else {
+ atKeyframesRegExp.lastIndex = i;
+ var matchKeyframes = atKeyframesRegExp.exec(token);
+ if (matchKeyframes && matchKeyframes.index === i) {
+ state = "keyframesRule-begin";
+ keyframesRule = new CSSOM.CSSKeyframesRule();
+ keyframesRule.__starts = i;
+ keyframesRule._vendorPrefix = matchKeyframes[1]; // Will come out as undefined if no prefix was found
+ i += matchKeyframes[0].length - 1;
+ buffer = "";
+ break;
+ } else if (state === "selector") {
+ state = "atRule";
+ }
+ }
+ buffer += character;
+ break;
+
+ case "{":
+ if (state === "selector" || state === "atRule") {
+ styleRule.selectorText = buffer.trim();
+ styleRule.style.__starts = i;
+ buffer = "";
+ state = "before-name";
+ } else if (state === "atBlock") {
+ mediaRule.media.mediaText = buffer.trim();
+
+ if (parentRule) {
+ ancestorRules.push(parentRule);
+ }
+
+ currentScope = parentRule = mediaRule;
+ mediaRule.parentStyleSheet = styleSheet;
+ buffer = "";
+ state = "before-selector";
+ } else if (state === "conditionBlock") {
+ supportsRule.conditionText = buffer.trim();
+
+ if (parentRule) {
+ ancestorRules.push(parentRule);
+ }
+
+ currentScope = parentRule = supportsRule;
+ supportsRule.parentStyleSheet = styleSheet;
+ buffer = "";
+ state = "before-selector";
+ } else if (state === "hostRule-begin") {
+ if (parentRule) {
+ ancestorRules.push(parentRule);
+ }
+
+ currentScope = parentRule = hostRule;
+ hostRule.parentStyleSheet = styleSheet;
+ buffer = "";
+ state = "before-selector";
+ } else if (state === "fontFaceRule-begin") {
+ if (parentRule) {
+ fontFaceRule.parentRule = parentRule;
+ }
+ fontFaceRule.parentStyleSheet = styleSheet;
+ styleRule = fontFaceRule;
+ buffer = "";
+ state = "before-name";
+ } else if (state === "keyframesRule-begin") {
+ keyframesRule.name = buffer.trim();
+ if (parentRule) {
+ ancestorRules.push(parentRule);
+ keyframesRule.parentRule = parentRule;
+ }
+ keyframesRule.parentStyleSheet = styleSheet;
+ currentScope = parentRule = keyframesRule;
+ buffer = "";
+ state = "keyframeRule-begin";
+ } else if (state === "keyframeRule-begin") {
+ styleRule = new CSSOM.CSSKeyframeRule();
+ styleRule.keyText = buffer.trim();
+ styleRule.__starts = i;
+ buffer = "";
+ state = "before-name";
+ } else if (state === "documentRule-begin") {
+ // FIXME: what if this '{' is in the url text of the match function?
+ documentRule.matcher.matcherText = buffer.trim();
+ if (parentRule) {
+ ancestorRules.push(parentRule);
+ documentRule.parentRule = parentRule;
+ }
+ currentScope = parentRule = documentRule;
+ documentRule.parentStyleSheet = styleSheet;
+ buffer = "";
+ state = "before-selector";
+ }
+ break;
+
+ case ":":
+ if (state === "name") {
+ name = buffer.trim();
+ buffer = "";
+ state = "before-value";
+ } else {
+ buffer += character;
+ }
+ break;
+
+ case "(":
+ if (state === 'value') {
+ // ie css expression mode
+ if (buffer.trim() === 'expression') {
+ var info = (new CSSOM.CSSValueExpression(token, i)).parse();
+
+ if (info.error) {
+ parseError(info.error);
+ } else {
+ buffer += info.expression;
+ i = info.idx;
+ }
+ } else {
+ state = 'value-parenthesis';
+ //always ensure this is reset to 1 on transition
+ //from value to value-parenthesis
+ valueParenthesisDepth = 1;
+ buffer += character;
+ }
+ } else if (state === 'value-parenthesis') {
+ valueParenthesisDepth++;
+ buffer += character;
+ } else {
+ buffer += character;
+ }
+ break;
+
+ case ")":
+ if (state === 'value-parenthesis') {
+ valueParenthesisDepth--;
+ if (valueParenthesisDepth === 0) state = 'value';
+ }
+ buffer += character;
+ break;
+
+ case "!":
+ if (state === "value" && token.indexOf("!important", i) === i) {
+ priority = "important";
+ i += "important".length;
+ } else {
+ buffer += character;
+ }
+ break;
+
+ case ";":
+ switch (state) {
+ case "value":
+ styleRule.style.setProperty(name, buffer.trim(), priority);
+ priority = "";
+ buffer = "";
+ state = "before-name";
+ break;
+ case "atRule":
+ buffer = "";
+ state = "before-selector";
+ break;
+ case "importRule":
+ importRule = new CSSOM.CSSImportRule();
+ importRule.parentStyleSheet = importRule.styleSheet.parentStyleSheet = styleSheet;
+ importRule.cssText = buffer + character;
+ styleSheet.cssRules.push(importRule);
+ buffer = "";
+ state = "before-selector";
+ break;
+ default:
+ buffer += character;
+ break;
+ }
+ break;
+
+ case "}":
+ switch (state) {
+ case "value":
+ styleRule.style.setProperty(name, buffer.trim(), priority);
+ priority = "";
+ /* falls through */
+ case "before-name":
+ case "name":
+ styleRule.__ends = i + 1;
+ if (parentRule) {
+ styleRule.parentRule = parentRule;
+ }
+ styleRule.parentStyleSheet = styleSheet;
+ currentScope.cssRules.push(styleRule);
+ buffer = "";
+ if (currentScope.constructor === CSSOM.CSSKeyframesRule) {
+ state = "keyframeRule-begin";
+ } else {
+ state = "before-selector";
+ }
+ break;
+ case "keyframeRule-begin":
+ case "before-selector":
+ case "selector":
+ // End of media/supports/document rule.
+ if (!parentRule) {
+ parseError("Unexpected }");
+ }
+
+ // Handle rules nested in @media or @supports
+ hasAncestors = ancestorRules.length > 0;
+
+ while (ancestorRules.length > 0) {
+ parentRule = ancestorRules.pop();
+
+ if (
+ parentRule.constructor.name === "CSSMediaRule"
+ || parentRule.constructor.name === "CSSSupportsRule"
+ ) {
+ prevScope = currentScope;
+ currentScope = parentRule;
+ currentScope.cssRules.push(prevScope);
+ break;
+ }
+
+ if (ancestorRules.length === 0) {
+ hasAncestors = false;
+ }
+ }
+
+ if (!hasAncestors) {
+ currentScope.__ends = i + 1;
+ styleSheet.cssRules.push(currentScope);
+ currentScope = styleSheet;
+ parentRule = null;
+ }
+
+ buffer = "";
+ state = "before-selector";
+ break;
+ }
+ break;
+
+ default:
+ switch (state) {
+ case "before-selector":
+ state = "selector";
+ styleRule = new CSSOM.CSSStyleRule();
+ styleRule.__starts = i;
+ break;
+ case "before-name":
+ state = "name";
+ break;
+ case "before-value":
+ state = "value";
+ break;
+ case "importRule-begin":
+ state = "importRule";
+ break;
+ }
+ buffer += character;
+ break;
+ }
+ }
+
+ return styleSheet;
+};
+
+
+//.CommonJS
+exports.parse = CSSOM.parse;
+// The following modules cannot be included sooner due to the mutual dependency with parse.js
+CSSOM.CSSStyleSheet = require("./CSSStyleSheet").CSSStyleSheet;
+CSSOM.CSSStyleRule = require("./CSSStyleRule").CSSStyleRule;
+CSSOM.CSSImportRule = require("./CSSImportRule").CSSImportRule;
+CSSOM.CSSMediaRule = require("./CSSMediaRule").CSSMediaRule;
+CSSOM.CSSSupportsRule = require("./CSSSupportsRule").CSSSupportsRule;
+CSSOM.CSSFontFaceRule = require("./CSSFontFaceRule").CSSFontFaceRule;
+CSSOM.CSSHostRule = require("./CSSHostRule").CSSHostRule;
+CSSOM.CSSStyleDeclaration = require('./CSSStyleDeclaration').CSSStyleDeclaration;
+CSSOM.CSSKeyframeRule = require('./CSSKeyframeRule').CSSKeyframeRule;
+CSSOM.CSSKeyframesRule = require('./CSSKeyframesRule').CSSKeyframesRule;
+CSSOM.CSSValueExpression = require('./CSSValueExpression').CSSValueExpression;
+CSSOM.CSSDocumentRule = require('./CSSDocumentRule').CSSDocumentRule;
+///CommonJS
diff --git a/school/node_modules/cssom/package.json b/school/node_modules/cssom/package.json
new file mode 100644
index 0000000..c8e813f
--- /dev/null
+++ b/school/node_modules/cssom/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "cssom",
+ "description": "CSS Object Model implementation and CSS parser",
+ "keywords": [
+ "CSS",
+ "CSSOM",
+ "parser",
+ "styleSheet"
+ ],
+ "version": "0.4.4",
+ "author": "Nikita Vasilyev <me@elv1s.ru>",
+ "repository": "NV/CSSOM",
+ "files": [
+ "lib/"
+ ],
+ "main": "./lib/index.js",
+ "license": "MIT"
+}