@@ -31,18 +31,19 @@ CSSOM.parse = function parse(token) {
3131 "atRule" : true ,
3232 "importRule-begin" : true ,
3333 "importRule" : true ,
34- "atBlock" : true
34+ "atBlock" : true ,
35+ 'documentRule-begin' : true
3536 } ;
3637
3738 var styleSheet = new CSSOM . CSSStyleSheet ;
3839
39- // @type CSSStyleSheet|CSSMediaRule|CSSFontFaceRule|CSSKeyframesRule
40+ // @type CSSStyleSheet|CSSMediaRule|CSSFontFaceRule|CSSKeyframesRule|CSSDocumentRule
4041 var currentScope = styleSheet ;
4142
42- // @type CSSMediaRule|CSSKeyframesRule
43+ // @type CSSMediaRule|CSSKeyframesRule|CSSDocumentRule
4344 var parentRule ;
4445
45- var selector , name , value , priority = "" , styleRule , mediaRule , importRule , fontFaceRule , keyframesRule , keyframeRule ;
46+ var selector , name , value , priority = "" , styleRule , mediaRule , importRule , fontFaceRule , keyframesRule , keyframeRule , documentRule ;
4647
4748 var atKeyframesRegExp = / @ ( - (?: \w + - ) + ) ? k e y f r a m e s / g;
4849
@@ -133,7 +134,14 @@ CSSOM.parse = function parse(token) {
133134
134135 // At-rule
135136 case "@" :
136- if ( token . indexOf ( "@media" , i ) === i ) {
137+ if ( token . indexOf ( "@-moz-document" , i ) === i ) {
138+ state = "documentRule-begin" ;
139+ documentRule = new CSSOM . CSSDocumentRule ;
140+ documentRule . __starts = i ;
141+ i += "-moz-document" . length ;
142+ buffer = "" ;
143+ break ;
144+ } else if ( token . indexOf ( "@media" , i ) === i ) {
137145 state = "atBlock" ;
138146 mediaRule = new CSSOM . CSSMediaRule ;
139147 mediaRule . __starts = i ;
@@ -205,6 +213,16 @@ CSSOM.parse = function parse(token) {
205213 styleRule . __starts = i ;
206214 buffer = "" ;
207215 state = "before-name" ;
216+ } else if ( state === "documentRule-begin" ) {
217+ // FIXME: what if this '{' is in the url text of the match function?
218+ documentRule . matcher . matcherText = buffer . trim ( ) ;
219+ if ( parentRule ) {
220+ documentRule . parentRule = parentRule ;
221+ }
222+ currentScope = parentRule = documentRule ;
223+ documentRule . parentStyleSheet = styleSheet ;
224+ buffer = "" ;
225+ state = "before-selector" ;
208226 }
209227 break ;
210228
@@ -302,7 +320,7 @@ CSSOM.parse = function parse(token) {
302320 case "keyframeRule-begin" :
303321 case "before-selector" :
304322 case "selector" :
305- // End of media rule.
323+ // End of media/document rule.
306324 if ( ! parentRule ) {
307325 parseError ( "Unexpected }" ) ;
308326 }
@@ -355,4 +373,5 @@ CSSOM.CSSStyleDeclaration = require('./CSSStyleDeclaration').CSSStyleDeclaration
355373CSSOM . CSSKeyframeRule = require ( './CSSKeyframeRule' ) . CSSKeyframeRule ;
356374CSSOM . CSSKeyframesRule = require ( './CSSKeyframesRule' ) . CSSKeyframesRule ;
357375CSSOM . CSSValueExpression = require ( './CSSValueExpression' ) . CSSValueExpression ;
376+ CSSOM . CSSDocumentRule = require ( './CSSDocumentRule' ) . CSSDocumentRule ;
358377///CommonJS
0 commit comments