postcss-property-lookup
Advanced tools
Comparing version 1.0.0 to 1.1.0
@@ -13,23 +13,96 @@ 'use strict'; | ||
exports['default'] = _postcss2['default'].plugin('postcss-property-lookup', propertyLookup); | ||
var plugin = 'postcss-property-lookup'; | ||
var lookupPattern = /@([a-z-]+)(\s?)/g; | ||
var defaultOptions = { | ||
logLevel: 'warn' | ||
}; | ||
exports['default'] = _postcss2['default'].plugin(plugin, propertyLookup); | ||
function propertyLookup() { | ||
var _this = this; | ||
var options = arguments[0] === undefined ? defaultOptions : arguments[0]; | ||
var errorContext = { plugin: plugin }; | ||
var log = ({ | ||
warn: function warn(message, rule, result) { | ||
rule.warn(result, message); | ||
}, | ||
error: function error(message, rule) { | ||
throw rule.error(message, errorContext); | ||
} | ||
})[options.logLevel]; | ||
if (!log) { | ||
throw new Error('Invalid logLevel: ' + options.logLevel); | ||
} | ||
return function (root, result) { | ||
root.walkRules(function (rule) { | ||
rule.replaceValues(/@([a-z-]+)(\s?)/g, { fast: '@' }, function (orig, prop, space) { | ||
var replacementVal = undefined; | ||
rule.walkDecls(prop, function (decl) { | ||
return replacementVal = decl.value; | ||
}); | ||
eachDecl(rule, function (decl) { | ||
if (decl.value.indexOf('@') === -1) { | ||
return; | ||
} | ||
decl.value = decl.value.replace(lookupPattern, resolveLookup.bind(_this, rule)); | ||
}); | ||
}); | ||
if (replacementVal) { | ||
return replacementVal + space; | ||
} else { | ||
result.warn('Unable to find property ' + orig + ' in ' + rule.selector, { node: rule }); | ||
function resolveLookup(rule, orig, prop, space) { | ||
var resolvedValue = closest(rule, prop); | ||
if (!resolvedValue) { | ||
log('Unable to find property ' + orig + ' in ' + rule.selector, rule, result); | ||
} | ||
return resolvedValue + space; | ||
} | ||
function closest(_x2, _x3) { | ||
var _this2 = this; | ||
var _again = true; | ||
_function: while (_again) { | ||
var container = _x2, | ||
prop = _x3; | ||
resolvedValue = undefined; | ||
_again = false; | ||
if (!container) { | ||
return ''; | ||
} | ||
}); | ||
}); | ||
var resolvedValue = undefined; | ||
eachDecl(container, function (decl) { | ||
if (decl.prop === prop) { | ||
resolvedValue = decl.value; | ||
} | ||
}); | ||
if (!resolvedValue) { | ||
_x2 = container.parent; | ||
_x3 = prop; | ||
_again = true; | ||
continue _function; | ||
} | ||
if (resolvedValue.indexOf('@') === -1) { | ||
return resolvedValue; | ||
} | ||
return resolvedValue.replace(lookupPattern, resolveLookup.bind(_this2, container)); | ||
} | ||
} | ||
}; | ||
} | ||
function eachDecl(container, callback) { | ||
container.nodes.forEach(function (node) { | ||
if (node.type === 'decl') { | ||
callback(node); | ||
} | ||
}); | ||
} | ||
module.exports = exports['default']; |
{ | ||
"name": "postcss-property-lookup", | ||
"version": "1.0.0", | ||
"version": "1.1.0", | ||
"description": "PostCSS plugin that allows referencing property values without a variable", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
@@ -37,1 +37,11 @@ # postcss-property-lookup [![Build Status][ci-img]][ci] | ||
See [PostCSS] docs for examples for your environment. | ||
## Options | ||
### logLevel | ||
Type: `string: <error|warn>`<br> | ||
Required: `false`<br> | ||
Default: `warn` | ||
When a lookup cannot be resolved, this specifies whether to throw an error or log a warning. In the case of a warning, the invalid lookup value will be replaced with an empty string. |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
6312
82
47