@@ -30,7 +30,7 @@ var removeDisplay = function(decl) {
30
30
decl . parent . each ( function ( neighbor ) {
31
31
if ( ( neighbor . prop == 'display' ) && ( neighbor . value == 'block' || neighbor . value == 'inline-block' ) ) {
32
32
//存在时删掉它
33
- neighbor . removeSelf ( ) ;
33
+ neighbor . remove ( ) ;
34
34
}
35
35
} ) ;
36
36
}
@@ -49,7 +49,7 @@ var removeFloat = function(decl) {
49
49
if (
50
50
( neighbor . prop == 'float' && neighbor . prop != 'none' )
51
51
) {
52
- neighbor . removeSelf ( ) ;
52
+ neighbor . remove ( ) ;
53
53
}
54
54
} ) ;
55
55
}
@@ -75,17 +75,16 @@ function positionCenterMixin(decl, i) {
75
75
} ) ;
76
76
77
77
if ( hasPosition && hasWidth && hasHeight ) {
78
- var widthValue , heightValue ;
78
+ var widthValue , heightValue , matchWidth , matchHeight ;
79
79
if ( decl . prop == 'position' ) {
80
80
decl . value = 'absolute' ;
81
- decl . parent . eachDecl ( function ( decl ) {
81
+ decl . parent . walkDecls ( function ( decl ) {
82
82
83
83
if ( decl . prop == 'width' ) {
84
84
matchWidth = decl . value . match ( reVALUE ) ;
85
85
if ( matchWidth && matchWidth != null ) {
86
86
widthValue = ( - matchWidth [ 1 ] / 2 ) + matchWidth [ 2 ] ;
87
87
}
88
-
89
88
}
90
89
if ( decl . prop == 'height' ) {
91
90
matchHeight = decl . value . match ( reVALUE ) ;
@@ -96,7 +95,7 @@ function positionCenterMixin(decl, i) {
96
95
} ) ;
97
96
98
97
//在后面插入计算的内容
99
- var reBefore = decl . before . replace ( reBLANK_LINE , '$1' )
98
+ var reBefore = decl . raws . before . replace ( reBLANK_LINE , '$1' )
100
99
101
100
insertDecl ( decl , i , {
102
101
before : reBefore ,
@@ -130,11 +129,11 @@ function positionCenterMixin(decl, i) {
130
129
function ellipsisMixin ( decl , i ) {
131
130
// var decl = decl.parent.childs[i];
132
131
if ( decl . prop == 'text-overflow' && decl . value == 'ellipsis' ) {
133
- var reBefore = decl . before . replace ( reBLANK_LINE , '$1' )
132
+ var reBefore = decl . raws . before . replace ( reBLANK_LINE , '$1' )
134
133
var countOverflow = 0 ,
135
134
countWhitespace = 0 ;
136
135
137
- decl . parent . eachDecl ( function ( decl ) {
136
+ decl . parent . walkDecls ( function ( decl ) {
138
137
// 如果存在 overflow 且不等于 hidden, 增加 white-space
139
138
if ( decl . prop == 'overflow' ) {
140
139
decl . value = 'hidden' ;
@@ -182,12 +181,12 @@ function ellipsisMixin(decl, i) {
182
181
function resizeMixin ( decl , i ) {
183
182
if ( decl . prop == 'resize' && decl . value !== 'none' ) {
184
183
var count = 0 ;
185
- decl . parent . eachDecl ( function ( decl ) {
184
+ decl . parent . walkDecls ( function ( decl ) {
186
185
if ( decl . prop == 'overflow' )
187
186
count ++ ;
188
187
} ) ;
189
188
if ( count === 0 ) {
190
- var reBefore = decl . before . replace ( reBLANK_LINE , '$1' )
189
+ var reBefore = decl . raws . before . replace ( reBLANK_LINE , '$1' )
191
190
192
191
insertDecl ( decl , i , {
193
192
before : reBefore ,
@@ -211,7 +210,7 @@ function clearfixMixin(decl, i) {
211
210
var count = 0 ;
212
211
213
212
//当存在这些属性的时候不生成伪元素
214
- decl . parent . eachDecl ( function ( decl ) {
213
+ decl . parent . walkDecls ( function ( decl ) {
215
214
if (
216
215
( decl . prop == "overflow" && decl . value != 'visible' ) ||
217
216
( decl . prop == "display" && decl . value == 'inline-block' ) ||
@@ -251,9 +250,9 @@ function clearfixMixin(decl, i) {
251
250
} ) ;
252
251
} else {
253
252
if ( decl . next ( ) && decl . next ( ) . type == "comment" ) {
254
- decl . next ( ) . removeSelf ( ) ;
253
+ decl . next ( ) . remove ( ) ;
255
254
}
256
- decl . removeSelf ( ) ;
255
+ decl . remove ( ) ;
257
256
}
258
257
}
259
258
}
@@ -267,7 +266,7 @@ function ieOpacityHack(decl, i) {
267
266
var amount = Math . round ( decl . value * 100 ) ;
268
267
if ( decl . prop == 'opacity' ) {
269
268
270
- var reBefore = decl . before . replace ( reBLANK_LINE , '$1' )
269
+ var reBefore = decl . raws . before . replace ( reBLANK_LINE , '$1' ) ;
271
270
272
271
insertDecl ( decl , i , {
273
272
before : reBefore ,
@@ -296,7 +295,7 @@ function ieRgbaHack(decl, i) {
296
295
var ARGB = "'" + "#" + colorA + colorR + colorG + colorB + "'" ;
297
296
298
297
// 插入IE半透明滤镜
299
- var reBefore = decl . before . replace ( reBLANK_LINE , '$1' )
298
+ var reBefore = decl . raws . before . replace ( reBLANK_LINE , '$1' )
300
299
insertDecl ( decl , i , {
301
300
before : reBefore ,
302
301
prop : 'filter' ,
@@ -321,7 +320,7 @@ function ieRgbaHack(decl, i) {
321
320
function ieInlineBlockHack ( decl , i ) {
322
321
if ( decl . prop == 'display' && decl . value == 'inline-block' ) {
323
322
324
- var reBefore = decl . before . replace ( reBLANK_LINE , '$1' )
323
+ var reBefore = decl . raws . before . replace ( reBLANK_LINE , '$1' )
325
324
326
325
insertDecl ( decl , i , {
327
326
before : reBefore ,
@@ -394,7 +393,7 @@ function imageSetMixin(decl, i) {
394
393
395
394
var nextrule = postcss . rule ( {
396
395
selector : decl . parent . selector ,
397
- after : decl . parent . after ,
396
+ after : decl . parent . raws . after ,
398
397
before : '\n '
399
398
} ) ;
400
399
//插入 @规则 中的选择器
@@ -413,7 +412,7 @@ function imageSetMixin(decl, i) {
413
412
}
414
413
} else if ( decl . value . indexOf ( 'url(' ) != - 1 ) {
415
414
//没有image-set,执行以下
416
- var retinaPaths = returnURL ( decl . value , reNO_SETURL ) //获取第一个url图片的路径
415
+ var retinaPaths = returnURL ( decl . value , reNO_SETURL ) ; //获取第一个url图片的路径
417
416
418
417
// var retinaSizes = sizeOf(getAbsolutePath(retinaPaths[0][2]));
419
418
@@ -448,7 +447,7 @@ function imageSetMixin(decl, i) {
448
447
function insertDecl ( decl , i , newDecl ) {
449
448
var next = decl . next ( ) ,
450
449
declAfter ;
451
- if ( next && next . type == 'comment' && next . before . indexOf ( '\n' ) == - 1 ) {
450
+ if ( next && next . type == 'comment' && next . raws . before . indexOf ( '\n' ) == - 1 ) {
452
451
declAfter = next ;
453
452
} else {
454
453
declAfter = decl ;
@@ -466,7 +465,7 @@ var cssgraceRule = function(rule, i) {
466
465
removeColons ( rule , i ) ;
467
466
468
467
//遍历 decl
469
- rule . eachDecl ( function ( decl , i ) {
468
+ rule . walkDecls ( function ( decl , i ) {
470
469
removeDisplay ( decl , i ) ;
471
470
ieInlineBlockHack ( decl , i ) ;
472
471
ieOpacityHack ( decl , i ) ;
@@ -477,11 +476,11 @@ var cssgraceRule = function(rule, i) {
477
476
imageSetMixin ( decl , i ) ;
478
477
} ) ;
479
478
480
- rule . eachDecl ( function ( decl , i ) {
479
+ rule . walkDecls ( function ( decl , i ) {
481
480
clearfixMixin ( decl , i ) ;
482
481
} ) ;
483
482
484
- rule . eachDecl ( function ( decl , i ) {
483
+ rule . walkDecls ( function ( decl , i ) {
485
484
positionCenterMixin ( decl , i ) ;
486
485
removeFloat ( decl , i ) ;
487
486
removeDisplay ( decl , i ) ;
@@ -490,7 +489,7 @@ var cssgraceRule = function(rule, i) {
490
489
491
490
//根据decl.value的值,返回paths数组
492
491
function returnURL ( val , reg ) {
493
- var result , paths = [ ]
492
+ var result , paths = [ ] ;
494
493
while ( ( result = reg . exec ( val ) ) != null ) {
495
494
paths . push ( result ) ;
496
495
}
@@ -505,17 +504,22 @@ function getAbsolutePath(sourcePath) {
505
504
return path . resolve ( currentFilePath , sourcePath . split ( "?" ) [ 0 ] ) ;
506
505
}
507
506
507
+ function getCurrentFilePath ( node ) {
508
+ var inputfile = node . source && node . source . input && node . source . input . file ;
509
+ var dirname = inputfile ? path . dirname ( inputfile ) : '' ;
510
+ return dirname ;
511
+ }
512
+
508
513
// PostCSS Processor
509
- var cssprocess = function ( css , opts ) {
514
+ var cssprocess = function ( css ) {
510
515
//保存当前处理文件路径
511
- currentFilePath = path . dirname ( opts . from ) ;
512
- css . eachRule ( cssgraceRule ) ;
516
+ currentFilePath = getCurrentFilePath ( css ) || currentFilePath ;
517
+ css . walkRules ( cssgraceRule ) ;
513
518
}
514
519
515
520
var pack = function ( css , opts ) {
516
521
//保存当前处理文件路径
517
522
currentFilePath = path . dirname ( opts . from ) ;
518
- console . log ( currentFilePath ) ;
519
523
return postcss ( cssprocess ) . process ( css , opts ) . css ;
520
524
}
521
525
0 commit comments