| //.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 |