aboutsummaryrefslogtreecommitdiff
path: root/node_modules/postcss-calc/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/postcss-calc/index.js')
-rwxr-xr-xnode_modules/postcss-calc/index.js62
1 files changed, 62 insertions, 0 deletions
diff --git a/node_modules/postcss-calc/index.js b/node_modules/postcss-calc/index.js
new file mode 100755
index 00000000..f0791b15
--- /dev/null
+++ b/node_modules/postcss-calc/index.js
@@ -0,0 +1,62 @@
+/**
+ * Module dependencies.
+ */
+var reduceCSSCalc = require("reduce-css-calc")
+var helpers = require("postcss-message-helpers")
+var postcss = require("postcss")
+
+var CONTAINS_CALC = /\bcalc\([\s\S]*?\)/
+
+/**
+ * PostCSS plugin to reduce calc() function calls.
+ */
+module.exports = postcss.plugin("postcss-calc", function(options) {
+ options = options || {}
+ var precision = options.precision
+ var preserve = options.preserve
+ var warnWhenCannotResolve = options.warnWhenCannotResolve
+ var mediaQueries = options.mediaQueries
+ var selectors = options.selectors
+
+ return function(style, result) {
+ function transformValue(node, property) {
+ var value = node[property]
+
+ if (!value || !CONTAINS_CALC.test(value)) {
+ return
+ }
+
+ helpers.try(function transformCSSCalc() {
+ var reducedValue = reduceCSSCalc(value, precision)
+
+ if (warnWhenCannotResolve && CONTAINS_CALC.test(reducedValue)) {
+ result.warn("Could not reduce expression: " + value,
+ {plugin: "postcss-calc", node: node})
+ }
+
+ if (!preserve) {
+ node[property] = reducedValue
+ return
+ }
+
+ if (reducedValue != value) {
+ var clone = node.clone()
+ clone[property] = reducedValue
+ node.parent.insertBefore(node, clone)
+ }
+ }, node.source)
+ }
+
+ style.walk(function(rule) {
+ if (mediaQueries && rule.type === "atrule") {
+ return transformValue(rule, "params")
+ }
+ else if (rule.type === "decl") {
+ return transformValue(rule, "value")
+ }
+ else if (selectors && rule.type === "rule") {
+ return transformValue(rule, "selector")
+ }
+ })
+ }
+})