You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							132 lines
						
					
					
						
							3.2 KiB
						
					
					
				
			
		
		
	
	
							132 lines
						
					
					
						
							3.2 KiB
						
					
					
				//.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
 | 
						|
 |