Skip to content

Commit 5421f08

Browse files
committed
New preserve option
Close #6
1 parent 28dd4d8 commit 5421f08

9 files changed

+37
-18
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
node_modules
2+
test/fixtures/*.actual.css

CHANGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
# HEAD
1+
# 3.0.0 - 2014-11-24
22

33
- New gnu like exceptions ([ref](https://github.com/postcss/postcss-calc/issues/4))
44
- New `precision` option ([ref](https://github.com/postcss/postcss-calc/issues/5))
5+
- New `preserve` option ([ref](https://github.com/postcss/postcss-calc/issues/6))
6+
57
# 2.1.0 - 2014-10-15
68

79
- Add source of the error (gnu like message) (fix [#3](https://github.com/postcss/postcss-calc/issues/3))

README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,17 @@ var out = postcss()
9696
.css
9797
```
9898

99+
#### `preserve` (default: `false`)
100+
101+
Allow you to preserve calc() usage in output so browsers will handle decimal precision themselves.
102+
103+
```js
104+
var out = postcss()
105+
.use(calc({preserve: true}))
106+
.process(css)
107+
.css
108+
```
109+
99110
---
100111

101112
## Contributing

index.js

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,27 @@ var helpers = require("postcss-message-helpers")
99
*/
1010
module.exports = function plugin(options) {
1111
options = options || {}
12+
var precision = options.precision
13+
var preserve = options.preserve
1214

1315
return function(style) {
1416
style.eachDecl(function transformDecl(decl) {
15-
if (!decl.value) {
17+
if (!decl.value || decl.value.indexOf("calc(") === -1) {
1618
return
1719
}
1820

19-
decl.value = helpers.try(function transformCSSCalc() {
20-
if (decl.value.indexOf("calc(") === -1) {
21-
return decl.value
21+
helpers.try(function transformCSSCalc() {
22+
var value = reduceCSSCalc(decl.value, precision)
23+
24+
if (!preserve) {
25+
decl.value = value
26+
return
2227
}
2328

24-
return reduceCSSCalc(decl.value, options.precision)
25-
})
29+
var clone = decl.clone()
30+
clone.value = value
31+
decl.parent.insertBefore(decl, clone)
32+
}, decl.source)
2633
})
2734
}
2835
}

test/fixtures/calc.actual.css

Lines changed: 0 additions & 8 deletions
This file was deleted.

test/fixtures/precision.actual.css

Lines changed: 0 additions & 3 deletions
This file was deleted.

test/fixtures/preserve.css

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
calc {
2+
value: calc(1/3);
3+
}

test/fixtures/preserve.expected.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
calc {
2+
value: 0.33333;
3+
value: calc(1/3);
4+
}

test/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,7 @@ test("calc", function(t) {
3131

3232
compareFixtures(t, "precision", {precision: 3}, "should have a precision option that allow to control decimal precision of calcuations")
3333

34+
compareFixtures(t, "preserve", {preserve: true}, "should have a preserve option that allow to keep original calc() usage")
35+
3436
t.end()
3537
})

0 commit comments

Comments
 (0)