File tree Expand file tree Collapse file tree 6 files changed +214
-145
lines changed
Expand file tree Collapse file tree 6 files changed +214
-145
lines changed Original file line number Diff line number Diff line change @@ -24,152 +24,159 @@ $ yarn add projectwallace/css-analyzer
2424``` js
2525const analyze = require (' css-analyzer' );
2626
27- async function ( css ) {
28- const result = await analyze ( ' foo {} ' )
29- console .log (result )
27+ analyze ( ' foo {} ' )
28+ . then ( result => console . log (result) )
29+ . catch ( err => console .error (err) )
3030}
3131
3232// =>
3333// {
34- // atrules: {
35- // charsets: {
36- // total: 0,
37- // totalUnique: 0,
38- // unique: []
39- // },
40- // documents: {
41- // total: 0,
42- // totalUnique: 0,
43- // unique: []
44- // },
45- // fontfaces: {
46- // total: 0
47- // },
48- // imports: {
49- // total: 0,
50- // totalUnique: 0,
51- // unique: []
52- // },
53- // keyframes: {
54- // total: 0,
55- // totalUnique: 0,
56- // unique: []
57- // },
58- // mediaqueries: {
59- // total: 0,
60- // totalUnique: 0,
61- // unique: []
62- // },
63- // namespaces: {
64- // total: 0,
65- // totalUnique: 0,
66- // unique: []
67- // },
68- // pages: {
69- // total: 0,
70- // totalUnique: 0,
71- // unique: []
72- // },
73- // supports: {
74- // total: 0,
75- // totalUnique: 0,
76- // unique: []
77- // }
78- // },
79- // declarations: {
80- // importants: {
81- // share: 0,
82- // total: 0
83- // },
84- // total: 0,
85- // totalUnique: 0
86- // },
87- // properties: {
88- // prefixed: {
89- // share: 0,
90- // total: 0,
91- // totalUnique: 0,
92- // unique: []
93- // },
94- // total: 0,
95- // totalUnique: 0,
96- // unique: []
97- // },
98- // rules: {
99- // total: 1
100- // },
101- // selectors: {
102- // id: {
103- // total: 0,
104- // totalUnique: 0,
105- // unique: []
106- // },
107- // identifiers: {
108- // average: 1,
109- // top: [
110- // {
111- // identifiers: 1,
112- // selector: 'foo'
113- // }
114- // ]
115- // },
116- // js: {
117- // total: 0,
118- // totalUnique: 0,
119- // unique: []
120- // },
121- // specificity: {
122- // top: [
123- // {
124- // selector: 'foo',
125- // specificity: {
126- // a: 0,
127- // b: 0,
128- // c: 0,
129- // d: 1
130- // }
131- // }
132- // ]
133- // },
134- // total: 1,
135- // totalUnique: 1,
136- // universal: {
137- // total: 0,
138- // totalUnique: 0,
139- // unique: []
140- // }
141- // },
142- // stylesheets: {
143- // cohesion: {
144- // average: 0
145- // },
146- // simplicity: 1,
147- // size: 5
148- // },
149- // values: {
150- // colors: {
151- // total: 0,
152- // totalUnique: 0,
153- // unique: []
154- // },
155- // fontfamilies: {
156- // total: 0,
157- // totalUnique: 0,
158- // unique: []
159- // },
160- // fontsizes: {
161- // total: 0,
162- // totalUnique: 0,
163- // unique: []
164- // },
165- // prefixed: {
166- // share: 0,
167- // total: 0,
168- // totalUnique: 0,
169- // unique: []
170- // },
171- // total: 0
172- // }
34+ // atrules: {
35+ // charsets: {
36+ // total: 0,
37+ // totalUnique: 0,
38+ // unique: []
39+ // },
40+ // documents: {
41+ // total: 0,
42+ // totalUnique: 0,
43+ // unique: []
44+ // },
45+ // fontfaces: {
46+ // total: 0,
47+ // totalUnique: 0,
48+ // unique: []
49+ // },
50+ // imports: {
51+ // total: 0,
52+ // totalUnique: 0,
53+ // unique: []
54+ // },
55+ // keyframes: {
56+ // total: 0,
57+ // totalUnique: 0,
58+ // unique: []
59+ // },
60+ // mediaqueries: {
61+ // total: 0,
62+ // totalUnique: 0,
63+ // unique: []
64+ // },
65+ // namespaces: {
66+ // total: 0,
67+ // totalUnique: 0,
68+ // unique: []
69+ // },
70+ // pages: {
71+ // total: 0,
72+ // totalUnique: 0,
73+ // unique: []
74+ // },
75+ // supports: {
76+ // total: 0,
77+ // totalUnique: 0,
78+ // unique: []
79+ // }
80+ // },
81+ // declarations: {
82+ // importants: {
83+ // share: 0,
84+ // total: 0
85+ // },
86+ // total: 0,
87+ // totalUnique: 0
88+ // },
89+ // properties: {
90+ // prefixed: {
91+ // share: 0,
92+ // total: 0,
93+ // totalUnique: 0,
94+ // unique: []
95+ // },
96+ // total: 0,
97+ // totalUnique: 0,
98+ // unique: []
99+ // },
100+ // rules: {
101+ // total: 1
102+ // },
103+ // selectors: {
104+ // accessibility: {
105+ // total: 0,
106+ // totalUnique: 0,
107+ // unique: []
108+ // },
109+ // id: {
110+ // total: 0,
111+ // totalUnique: 0,
112+ // unique: []
113+ // },
114+ // identifiers: {
115+ // average: 1,
116+ // top: [
117+ // {
118+ // identifiers: 1,
119+ // selector: 'foo'
120+ // }
121+ // ]
122+ // },
123+ // js: {
124+ // total: 0,
125+ // totalUnique: 0,
126+ // unique: []
127+ // },
128+ // specificity: {
129+ // top: [
130+ // {
131+ // selector: 'foo',
132+ // specificity: {
133+ // a: 0,
134+ // b: 0,
135+ // c: 0,
136+ // d: 1
137+ // }
138+ // }
139+ // ]
140+ // },
141+ // total: 1,
142+ // totalUnique: 1,
143+ // universal: {
144+ // total: 0,
145+ // totalUnique: 0,
146+ // unique: []
147+ // }
148+ // },
149+ // stylesheets: {
150+ // cohesion: {
151+ // average: 0
152+ // },
153+ // simplicity: 1,
154+ // size: 5
155+ // },
156+ // values: {
157+ // colors: {
158+ // total: 0,
159+ // totalUnique: 0,
160+ // unique: []
161+ // },
162+ // fontfamilies: {
163+ // total: 0,
164+ // totalUnique: 0,
165+ // unique: []
166+ // },
167+ // fontsizes: {
168+ // total: 0,
169+ // totalUnique: 0,
170+ // unique: []
171+ // },
172+ // prefixed: {
173+ // share: 0,
174+ // total: 0,
175+ // totalUnique: 0,
176+ // unique: []
177+ // },
178+ // total: 0
179+ // }
173180// }
174181```
175182
Original file line number Diff line number Diff line change 1+ const uniquer = require ( '../../utils/uniquer' )
2+
3+ function isA11ySelector ( selector ) {
4+ return selector . includes ( '[aria-' ) || selector . includes ( '[role=' )
5+ }
6+
7+ module . exports = selectors => {
8+ const all = selectors . filter ( isA11ySelector )
9+
10+ return {
11+ total : all . length ,
12+ ...uniquer ( all )
13+ }
14+ }
Original file line number Diff line number Diff line change @@ -4,6 +4,7 @@ module.exports = selectors => {
44 const js = require ( './js' ) ( all )
55 const id = require ( './id' ) ( all )
66 const universal = require ( './universal' ) ( all )
7+ const accessibility = require ( './accessibility' ) ( all )
78 const specificity = require ( './specificity' ) ( all )
89 const identifiers = require ( './identifiers' ) ( all )
910
@@ -13,6 +14,7 @@ module.exports = selectors => {
1314 js,
1415 id,
1516 universal,
17+ accessibility,
1618 specificity,
1719 identifiers
1820 }
Original file line number Diff line number Diff line change @@ -82,6 +82,11 @@ test('Returns the correct analysis object structure', async t => {
8282 total : 1
8383 } ,
8484 selectors : {
85+ accessibility : {
86+ total : 0 ,
87+ totalUnique : 0 ,
88+ unique : [ ]
89+ } ,
8590 id : {
8691 total : 0 ,
8792 totalUnique : 0 ,
Original file line number Diff line number Diff line change 4848 color : # f00 ;
4949}
5050
51+ /**
52+ * Accessibility-related selectors
53+ * Examples from https://inclusive-components.design
54+ */
55+ [role = "tablist" ],
56+ [aria-selected ],
57+ [aria-selected ]::after ,
58+ [role = "menu" ] a ,
59+ : checked ~ [role = "menu" ],
60+ [role = "menuitem" ][aria-checked = "true" ]::before {}
61+
5162/**
5263 * CSS Hacks
5364 * Contains universal selectors
You can’t perform that action at this time.
0 commit comments