Skip to content

Commit b211652

Browse files
authored
Feature/browser hacks mq (#70)
* Adds css media query hacks analysis * Refs #3
1 parent 7dc6a0d commit b211652

File tree

10 files changed

+71
-34
lines changed

10 files changed

+71
-34
lines changed

package-lock.json

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
"dependencies": {
4545
"color-sorter": "^2.2.0",
4646
"css-color-names": "^1.0.0",
47+
"css-media-query-browser-h4cks-analyzer": "^1.0.0",
4748
"css-property-browser-h4cks-analyzer": "^1.0.1",
4849
"css-shorthand-expand": "^1.2.0",
4950
"css-unit-sort": "^1.1.1",
Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,24 @@
1+
const isBrowserHack = require('css-media-query-browser-h4cks-analyzer')
12
const uniquer = require('../../utils/uniquer')
23

34
module.exports = atRules => {
45
const all = atRules
56
.filter(rule => rule.type === 'media')
67
.map(rule => rule.params)
78

9+
const browserhacks = all.filter(isBrowserHack)
10+
const {
11+
unique: uniqueBrowserHacks,
12+
totalUnique: totalUniqueBrowserhacks
13+
} = uniquer(browserhacks)
14+
815
return {
916
total: all.length,
10-
...uniquer(all)
17+
...uniquer(all),
18+
browserhacks: {
19+
total: browserhacks.length,
20+
unique: uniqueBrowserHacks,
21+
totalUnique: totalUniqueBrowserhacks
22+
}
1123
}
1224
}

src/analyzer/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ module.exports = input => {
1313
const values = require('./values')(css.declarations)
1414
const stylesheets = require('./stylesheets')(
1515
input,
16+
atrules,
1617
rules,
1718
selectors,
1819
declarations,

src/analyzer/stylesheets/browserhacks.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
module.exports = (properties, values) => {
2-
const {total, totalUnique} = [properties, values]
1+
module.exports = (atrules, properties, values) => {
2+
const {total, totalUnique} = [atrules.mediaqueries, properties, values]
33
.map(metric => metric.browserhacks)
44
.reduce(
55
(totals, current) => {

src/analyzer/stylesheets/index.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
1-
module.exports = (raw, rules, selectors, declarations, properties, values) => {
1+
module.exports = (
2+
raw,
3+
atrules,
4+
rules,
5+
selectors,
6+
declarations,
7+
properties,
8+
values
9+
) => {
210
const size = Buffer.byteLength(raw, 'utf8')
311
const simplicity = require('./simplicity.js')(rules, selectors)
412
const cohesion = require('./cohesion.js')(rules, declarations)
5-
const browserhacks = require('./browserhacks.js')(properties, values)
13+
const browserhacks = require('./browserhacks.js')(atrules, properties, values)
614

715
return {
816
size,

test/analyzer/atrules/mediaqueries/input.css

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,6 @@
3636
}
3737

3838
/**
39-
* TODO support CSS Hacks
40-
*
41-
@media screen\9{.selector{color:red}}
42-
@media screen\9{.selector{color:red}}
43-
@media \0screen\,screen\9{.selector{color:red}}
44-
@media \0screen{.selector{color:red}}
45-
@media screen and (min-width: 0\0){.selector{color:red}}
46-
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none){.selector{color:red}}
47-
@-moz-document url-prefix(){.selector{color:red}}
48-
@media all and (-webkit-min-device-pixel-ratio:0) and (min-resolution: .001dpcm) { .selector{color:red}}
39+
* browser hacks
40+
*/
4941
@media \0 all{.selector{color:red}}
50-
@media screen and (-moz-images-in-menus:0){.selector{color:red}}
51-
@media screen and (min--moz-device-pixel-ratio:0){.selector{color:red}}
52-
@media all and (min--moz-device-pixel-ratio:0) and (min-resolution: 3e1dpcm){.selector{color:red}}
53-
@media (min-resolution: .001dpcm){.selector{color:red}}
54-
*/

test/analyzer/atrules/mediaqueries/output.json

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
{
2-
"total": 8,
3-
"totalUnique": 6,
2+
"total": 9,
3+
"totalUnique": 7,
44
"unique": [
55
{
6-
"value": "(max-width: 200px)",
7-
"count": 1
6+
"count": 1,
7+
"value": "(max-width: 200px)"
88
},
99
{
1010
"value": "(min-width: 20px)",
1111
"count": 2
1212
},
13+
{
14+
"count": 1,
15+
"value": "\\0 all"
16+
},
1317
{
1418
"value": "print",
1519
"count": 1
@@ -26,5 +30,15 @@
2630
"value": "screen or print",
2731
"count": 1
2832
}
29-
]
33+
],
34+
"browserhacks": {
35+
"total": 1,
36+
"unique": [
37+
{
38+
"count": 1,
39+
"value": "\\0 all"
40+
}
41+
],
42+
"totalUnique": 1
43+
}
3044
}

test/analyzer/index.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,12 @@ test('Returns the correct analysis object structure', async t => {
4141
mediaqueries: {
4242
total: 0,
4343
totalUnique: 0,
44-
unique: []
44+
unique: [],
45+
browserhacks: {
46+
total: 0,
47+
unique: [],
48+
totalUnique: 0
49+
}
4550
},
4651
namespaces: {
4752
total: 0,

test/analyzer/values/browserhacks.js

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,12 @@ test('It recognizes browser hacks correctly', t => {
2121
])
2222
const expected = {
2323
total: 1,
24-
unique: [{
25-
value: 'blue\\9',
26-
count: 1
27-
}],
24+
unique: [
25+
{
26+
value: 'blue\\9',
27+
count: 1
28+
}
29+
],
2830
totalUnique: 1
2931
}
3032

@@ -38,10 +40,12 @@ test('It does not report values that are no browser hacks', t => {
3840
totalUnique: 0
3941
}
4042

41-
const actual = analyze([{
42-
property: 'color',
43-
value: 'blue'
44-
}])
43+
const actual = analyze([
44+
{
45+
property: 'color',
46+
value: 'blue'
47+
}
48+
])
4549

4650
t.deepEqual(actual, expected)
4751
})

0 commit comments

Comments
 (0)