Skip to content

Commit 1ac5341

Browse files
authored
add analysis for MediaFeatures (#461)
closes #261
1 parent 4745eae commit 1ac5341

File tree

3 files changed

+44
-0
lines changed

3 files changed

+44
-0
lines changed

src/atrules/atrules.test.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -624,6 +624,38 @@ AtRules('finds @media browserhacks', () => {
624624
assert.equal(actual, expected)
625625
})
626626

627+
AtRules('finds Media Features', () => {
628+
const fixture = `
629+
@media (min-width: 0) {}
630+
@media (max-width: 0) {}
631+
@media (hover) {}
632+
@media (forced-colors: none) {}
633+
@media (prefers-color-scheme: dark) {}
634+
@media (prefers-reduced-motion: reduce) {}
635+
@media (prefers-contrast: more) {}
636+
637+
@media screen and (50px <= width <= 100px), (min-height: 100px) {}
638+
`
639+
const actual = analyze(fixture).atrules.media.features
640+
const expected = {
641+
total: 8,
642+
totalUnique: 8,
643+
unique: {
644+
'min-width': 1,
645+
'max-width': 1,
646+
'hover': 1,
647+
'forced-colors': 1,
648+
'prefers-color-scheme': 1,
649+
'prefers-reduced-motion': 1,
650+
'prefers-contrast': 1,
651+
'min-height': 1,
652+
},
653+
uniquenessRatio: 8 / 8,
654+
}
655+
656+
assert.equal(actual, expected)
657+
})
658+
627659
AtRules('does not crash on incomplete @media queries', () => {
628660
let css = `
629661
@media (min-width) {}

src/index.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ export function analyze(css, options = {}) {
119119
let imports = new Collection(useLocations)
120120
let medias = new Collection(useLocations)
121121
let mediaBrowserhacks = new Collection(useLocations)
122+
let mediaFeatures = new Collection(useLocations)
122123
let charsets = new Collection(useLocations)
123124
let supports = new Collection(useLocations)
124125
let supportsBrowserhacks = new Collection(useLocations)
@@ -283,6 +284,10 @@ export function analyze(css, options = {}) {
283284
}
284285
break
285286
}
287+
case 'Feature': {
288+
mediaFeatures.p(node.name, node.loc)
289+
break
290+
}
286291
case Rule: {
287292
let prelude = node.prelude
288293
let block = node.block
@@ -747,6 +752,7 @@ export function analyze(css, options = {}) {
747752
medias.c(),
748753
{
749754
browserhacks: mediaBrowserhacks.c(),
755+
features: mediaFeatures.c(),
750756
}
751757
),
752758
charset: charsets.c(),

src/index.test.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,12 @@ Api("handles empty input gracefully", () => {
110110
unique: {},
111111
uniquenessRatio: 0,
112112
},
113+
features: {
114+
total: 0,
115+
totalUnique: 0,
116+
unique: {},
117+
uniquenessRatio: 0,
118+
},
113119
},
114120
charset: {
115121
total: 0,

0 commit comments

Comments
 (0)