@@ -5,11 +5,11 @@ var EXTENSION_RE = /\(\s*(--[\w-]+)\s*\)/g
5
5
/*
6
6
* Resolve custom media values.
7
7
*/
8
- function resolveValue ( value , map , result ) {
9
- if ( ! EXTENSION_RE . test ( value ) ) {
10
- return value
8
+ function resolveValue ( query , depChain , map , result ) {
9
+ if ( ! EXTENSION_RE . test ( query . value ) ) {
10
+ return query . value
11
11
}
12
- return value . replace ( EXTENSION_RE , function ( orig , name ) {
12
+ var val = query . value . replace ( EXTENSION_RE , function ( orig , name ) {
13
13
if ( ! map [ name ] ) {
14
14
return orig
15
15
}
@@ -19,14 +19,18 @@ function resolveValue(value, map, result) {
19
19
return mq . value
20
20
}
21
21
22
- if ( mq . deps . indexOf ( name ) !== - 1 ) {
22
+ if ( depChain . indexOf ( name ) !== - 1 ) {
23
23
mq . circular = true
24
24
return orig
25
25
}
26
- mq . deps . push ( name )
27
- mq . value = resolveValue ( mq . value , map , result )
26
+ depChain . push ( name )
27
+ mq . value = resolveValue ( mq , depChain , map , result )
28
28
return mq . value
29
29
} )
30
+ if ( val === query . value ) {
31
+ query . circular = true
32
+ }
33
+ return val
30
34
}
31
35
32
36
/*
@@ -61,7 +65,6 @@ function customMedia(options) {
61
65
// map[<extension-name>] = <media-query-list>
62
66
map [ params . shift ( ) ] = {
63
67
value : params . join ( " " ) ,
64
- deps : [ ] ,
65
68
circular : false ,
66
69
resolved : false ,
67
70
}
@@ -75,14 +78,13 @@ function customMedia(options) {
75
78
Object . keys ( extensions ) . forEach ( function ( name ) {
76
79
map [ name ] = {
77
80
value : extensions [ name ] ,
78
- deps : [ ] ,
79
81
circular : false ,
80
82
resolved : false ,
81
83
}
82
84
} )
83
85
84
86
Object . keys ( map ) . forEach ( function ( name ) {
85
- map [ name ] . value = resolveValue ( map [ name ] . value , map , result )
87
+ map [ name ] . value = resolveValue ( map [ name ] , [ name ] , map , result )
86
88
map [ name ] . resolved = true
87
89
} )
88
90
0 commit comments