Skip to content

Commit 4eb63fa

Browse files
committed
Merge pull request #39 from yuezk/bugfix
Use PostCSS 5 API #25 , Fix some bug.
2 parents a81be90 + 9d0a063 commit 4eb63fa

File tree

2 files changed

+32
-31
lines changed

2 files changed

+32
-31
lines changed

lib/index.js

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ var removeDisplay = function(decl) {
3030
decl.parent.each(function(neighbor) {
3131
if ((neighbor.prop == 'display') && (neighbor.value == 'block' || neighbor.value == 'inline-block')) {
3232
//存在时删掉它
33-
neighbor.removeSelf();
33+
neighbor.remove();
3434
}
3535
});
3636
}
@@ -49,7 +49,7 @@ var removeFloat = function(decl) {
4949
if (
5050
(neighbor.prop == 'float' && neighbor.prop != 'none')
5151
) {
52-
neighbor.removeSelf();
52+
neighbor.remove();
5353
}
5454
});
5555
}
@@ -75,17 +75,16 @@ function positionCenterMixin(decl, i) {
7575
});
7676

7777
if (hasPosition && hasWidth && hasHeight) {
78-
var widthValue, heightValue;
78+
var widthValue, heightValue, matchWidth, matchHeight;
7979
if (decl.prop == 'position') {
8080
decl.value = 'absolute';
81-
decl.parent.eachDecl(function(decl) {
81+
decl.parent.walkDecls(function(decl) {
8282

8383
if (decl.prop == 'width') {
8484
matchWidth = decl.value.match(reVALUE);
8585
if (matchWidth && matchWidth != null) {
8686
widthValue = (-matchWidth[1] / 2) + matchWidth[2];
8787
}
88-
8988
}
9089
if (decl.prop == 'height') {
9190
matchHeight = decl.value.match(reVALUE);
@@ -96,7 +95,7 @@ function positionCenterMixin(decl, i) {
9695
});
9796

9897
//在后面插入计算的内容
99-
var reBefore = decl.before.replace(reBLANK_LINE, '$1')
98+
var reBefore = decl.raws.before.replace(reBLANK_LINE, '$1')
10099

101100
insertDecl(decl, i, {
102101
before: reBefore,
@@ -130,11 +129,11 @@ function positionCenterMixin(decl, i) {
130129
function ellipsisMixin(decl, i) {
131130
// var decl = decl.parent.childs[i];
132131
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')
134133
var countOverflow = 0,
135134
countWhitespace = 0;
136135

137-
decl.parent.eachDecl(function(decl) {
136+
decl.parent.walkDecls(function(decl) {
138137
// 如果存在 overflow 且不等于 hidden, 增加 white-space
139138
if (decl.prop == 'overflow') {
140139
decl.value = 'hidden';
@@ -182,12 +181,12 @@ function ellipsisMixin(decl, i) {
182181
function resizeMixin(decl, i) {
183182
if (decl.prop == 'resize' && decl.value !== 'none') {
184183
var count = 0;
185-
decl.parent.eachDecl(function(decl) {
184+
decl.parent.walkDecls(function(decl) {
186185
if (decl.prop == 'overflow')
187186
count++;
188187
});
189188
if (count === 0) {
190-
var reBefore = decl.before.replace(reBLANK_LINE, '$1')
189+
var reBefore = decl.raws.before.replace(reBLANK_LINE, '$1')
191190

192191
insertDecl(decl, i, {
193192
before: reBefore,
@@ -211,7 +210,7 @@ function clearfixMixin(decl, i) {
211210
var count = 0;
212211

213212
//当存在这些属性的时候不生成伪元素
214-
decl.parent.eachDecl(function(decl) {
213+
decl.parent.walkDecls(function(decl) {
215214
if (
216215
(decl.prop == "overflow" && decl.value != 'visible') ||
217216
(decl.prop == "display" && decl.value == 'inline-block') ||
@@ -251,9 +250,9 @@ function clearfixMixin(decl, i) {
251250
});
252251
} else {
253252
if (decl.next() && decl.next().type == "comment") {
254-
decl.next().removeSelf();
253+
decl.next().remove();
255254
}
256-
decl.removeSelf();
255+
decl.remove();
257256
}
258257
}
259258
}
@@ -267,7 +266,7 @@ function ieOpacityHack(decl, i) {
267266
var amount = Math.round(decl.value * 100);
268267
if (decl.prop == 'opacity') {
269268

270-
var reBefore = decl.before.replace(reBLANK_LINE, '$1')
269+
var reBefore = decl.raws.before.replace(reBLANK_LINE, '$1');
271270

272271
insertDecl(decl, i, {
273272
before: reBefore,
@@ -296,7 +295,7 @@ function ieRgbaHack(decl, i) {
296295
var ARGB = "'" + "#" + colorA + colorR + colorG + colorB + "'";
297296

298297
// 插入IE半透明滤镜
299-
var reBefore = decl.before.replace(reBLANK_LINE, '$1')
298+
var reBefore = decl.raws.before.replace(reBLANK_LINE, '$1')
300299
insertDecl(decl, i, {
301300
before: reBefore,
302301
prop: 'filter',
@@ -321,7 +320,7 @@ function ieRgbaHack(decl, i) {
321320
function ieInlineBlockHack(decl, i) {
322321
if (decl.prop == 'display' && decl.value == 'inline-block') {
323322

324-
var reBefore = decl.before.replace(reBLANK_LINE, '$1')
323+
var reBefore = decl.raws.before.replace(reBLANK_LINE, '$1')
325324

326325
insertDecl(decl, i, {
327326
before: reBefore,
@@ -394,7 +393,7 @@ function imageSetMixin(decl, i) {
394393

395394
var nextrule = postcss.rule({
396395
selector: decl.parent.selector,
397-
after: decl.parent.after,
396+
after: decl.parent.raws.after,
398397
before: '\n '
399398
});
400399
//插入 @规则 中的选择器
@@ -413,7 +412,7 @@ function imageSetMixin(decl, i) {
413412
}
414413
} else if (decl.value.indexOf('url(') != -1) {
415414
//没有image-set,执行以下
416-
var retinaPaths = returnURL(decl.value, reNO_SETURL) //获取第一个url图片的路径
415+
var retinaPaths = returnURL(decl.value, reNO_SETURL); //获取第一个url图片的路径
417416

418417
// var retinaSizes = sizeOf(getAbsolutePath(retinaPaths[0][2]));
419418

@@ -448,7 +447,7 @@ function imageSetMixin(decl, i) {
448447
function insertDecl(decl, i, newDecl) {
449448
var next = decl.next(),
450449
declAfter;
451-
if (next && next.type == 'comment' && next.before.indexOf('\n') == -1) {
450+
if (next && next.type == 'comment' && next.raws.before.indexOf('\n') == -1) {
452451
declAfter = next;
453452
} else {
454453
declAfter = decl;
@@ -466,7 +465,7 @@ var cssgraceRule = function(rule, i) {
466465
removeColons(rule, i);
467466

468467
//遍历 decl
469-
rule.eachDecl(function(decl, i) {
468+
rule.walkDecls(function(decl, i) {
470469
removeDisplay(decl, i);
471470
ieInlineBlockHack(decl, i);
472471
ieOpacityHack(decl, i);
@@ -477,11 +476,11 @@ var cssgraceRule = function(rule, i) {
477476
imageSetMixin(decl, i);
478477
});
479478

480-
rule.eachDecl(function(decl, i) {
479+
rule.walkDecls(function(decl, i) {
481480
clearfixMixin(decl, i);
482481
});
483482

484-
rule.eachDecl(function(decl, i) {
483+
rule.walkDecls(function(decl, i) {
485484
positionCenterMixin(decl, i);
486485
removeFloat(decl, i);
487486
removeDisplay(decl, i);
@@ -490,7 +489,7 @@ var cssgraceRule = function(rule, i) {
490489

491490
//根据decl.value的值,返回paths数组
492491
function returnURL(val, reg) {
493-
var result, paths = []
492+
var result, paths = [];
494493
while ((result = reg.exec(val)) != null) {
495494
paths.push(result);
496495
}
@@ -505,17 +504,22 @@ function getAbsolutePath(sourcePath) {
505504
return path.resolve(currentFilePath, sourcePath.split("?")[0]);
506505
}
507506

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+
508513
// PostCSS Processor
509-
var cssprocess = function(css, opts) {
514+
var cssprocess = function(css) {
510515
//保存当前处理文件路径
511-
currentFilePath = path.dirname(opts.from);
512-
css.eachRule(cssgraceRule);
516+
currentFilePath = getCurrentFilePath(css) || currentFilePath;
517+
css.walkRules(cssgraceRule);
513518
}
514519

515520
var pack = function(css, opts) {
516521
//保存当前处理文件路径
517522
currentFilePath = path.dirname(opts.from);
518-
console.log(currentFilePath);
519523
return postcss(cssprocess).process(css, opts).css;
520524
}
521525

package.json

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,10 @@
2323
"postproccessor"
2424
],
2525
"dependencies": {
26+
"postcss": "^5.0.0",
2627
"image-size": "^0.3.5"
2728
},
28-
"peerDependencies": {
29-
"postcss": "^4.0.0"
30-
},
3129
"devDependencies": {
32-
"postcss": "^4.0.0",
3330
"tape": "^3.0.0"
3431
},
3532
"scripts": {

0 commit comments

Comments
 (0)