@@ -4,6 +4,7 @@ const _ = require('lodash')
4
4
const cssnano = require ( 'cssnano' )
5
5
const getSelectorName = require ( './getSelectorName' )
6
6
const getSelectorType = require ( './getSelectorType' )
7
+ const pseudoMapDefault = require ( './pseudoMap' )
7
8
8
9
const cacheLocalRuleInfo = { }
9
10
const parserPlugin = postcss . plugin ( 'postcss-flat' , ( options ) => {
@@ -13,6 +14,7 @@ const parserPlugin = postcss.plugin('postcss-flat', (options) => {
13
14
rules,
14
15
atRulesConfig,
15
16
htmlClass,
17
+ pseudoMap,
16
18
} = options
17
19
const localsMap = _ . invert ( locals )
18
20
const localRuleMark = { normal : { } }
@@ -21,9 +23,10 @@ const parserPlugin = postcss.plugin('postcss-flat', (options) => {
21
23
const globalRule = [ ]
22
24
css . walkRules ( ( rule ) => {
23
25
let parentParams = ''
26
+ let parentName = ''
24
27
let keySuffix = '@'
25
28
if ( rule . parent . type === 'atrule' ) {
26
- const parentName = rule . parent . name
29
+ parentName = rule . parent . name
27
30
if ( parentName === 'supports' || parentName === 'media' ) {
28
31
parentParams = rule . parent . params
29
32
keySuffix = keySuffix + parentName + parentParams
@@ -47,18 +50,14 @@ const parserPlugin = postcss.plugin('postcss-flat', (options) => {
47
50
const value = decl . value
48
51
let key = prop + ':' + value + ';' + selectorHalf + keySuffix
49
52
if ( ! cacheLocalRuleInfo [ key ] ) {
50
- const newClassName = getSelectorName ( decl , parentParams , { rules, prefix, atRulesConfig } )
53
+ const newClassName = getSelectorName ( decl , { parentName , parentParams, rules, prefix, atRulesConfig, selectorHalf , pseudoMap } )
51
54
let propLen = 0
52
55
let priority = ''
53
56
if ( prop [ 0 ] !== '-' ) {
54
57
propLen = prop . split ( '-' ) . length
55
58
}
56
59
for ( let i = 1 ; i < propLen ; i ++ ) {
57
- if ( i === 1 ) {
58
- priority += 'html'
59
- } else {
60
- priority += '.' + htmlClass
61
- }
60
+ priority += '.' + htmlClass
62
61
}
63
62
cacheLocalRuleInfo [ key ] = {
64
63
newClassName,
@@ -82,8 +81,11 @@ const parserPlugin = postcss.plugin('postcss-flat', (options) => {
82
81
rule . remove ( )
83
82
} )
84
83
css . walkAtRules ( / m e d i a | s u p p o r t s / , rule => {
84
+ const atRulesConfigKey = ( '@' + rule . name + rule . params ) . replace ( / / g, '' )
85
85
for ( let key in localRuleMark [ rule . params ] ) {
86
- const { newClassName, selectorHalf = '' , priority, keySuffix } = cacheLocalRuleInfo [ key ]
86
+ const { newClassName, selectorHalf = '' , priority : tempP , keySuffix } = cacheLocalRuleInfo [ key ]
87
+ const atRulePriority = ( atRulesConfig [ atRulesConfigKey ] || { } ) . priority || ''
88
+ const priority = _ . trim ( atRulePriority + tempP ) + ' '
87
89
rule . append ( priority + '.' + newClassName + selectorHalf + '{' + key . replace ( ';' + selectorHalf + keySuffix , '' ) + '}' )
88
90
}
89
91
} )
@@ -106,16 +108,19 @@ module.exports = function processCss(inputSource, inputMap, options, callback) {
106
108
rules = { } ,
107
109
atRules = [ ] ,
108
110
htmlClass = 'css-flat' ,
111
+ pseudoMap = pseudoMapDefault ,
109
112
} = options . params || { }
110
113
111
114
const atRulesConfig = { }
112
115
atRules . forEach ( ( atRule , i ) => {
113
- for ( let [ key , value ] of Object . entries ( atRule ) ) {
114
- atRulesConfig [ key ] = {
116
+ for ( let key in atRule ) {
117
+ const value = atRule [ key ]
118
+ atRulesConfig [ key . replace ( / / g, '' ) ] = {
115
119
suffix : value ,
116
120
priority : Array ( i + 1 ) . fill ( '.' + htmlClass ) . join ( '' ) ,
117
121
}
118
122
}
123
+
119
124
} )
120
125
121
126
const parserOptions = {
@@ -124,6 +129,7 @@ module.exports = function processCss(inputSource, inputMap, options, callback) {
124
129
atRulesConfig,
125
130
htmlClass,
126
131
locals : options . locals || { } ,
132
+ pseudoMap,
127
133
}
128
134
129
135
const pipeline = postcss ( [
@@ -157,6 +163,7 @@ module.exports = function processCss(inputSource, inputMap, options, callback) {
157
163
annotation : false ,
158
164
} ,
159
165
} ) . then ( function ( result ) {
166
+ console . log ( result . css )
160
167
callback ( null , {
161
168
source : result . css ,
162
169
map : result . map && result . map . toJSON ( ) ,
0 commit comments