build-plugin-fusion
Version:
plugin for build scripts while use fusion component
40 lines • 1.4 kB
JavaScript
var postcss = require('postcss');
var pxRegex = /"[^"]+"|'[^']+'|url\([^)]+\)|(\d*\.?\d+)px/g;
var defaults = {
viewportWidth: 750,
viewportUnit: 'vw',
fontViewportUnit: 'vw',
unitPrecision: 5,
};
module.exports = postcss.plugin('postcss-px2vw', function (options) {
var opts = Object.assign({}, defaults, options);
return function (root) {
root.walkDecls(function (decl) {
if (decl.value.indexOf('px') === -1)
return;
var unit = getUnit(decl.prop, opts);
decl.value = decl.value.replace(pxRegex, createPxReplace(opts, unit, opts.viewportWidth));
});
};
});
function toFixed(number, precision) {
// eslint-disable-next-line no-restricted-properties
var multiplier = Math.pow(10, precision + 1);
var wholeNumber = Math.floor(number * multiplier);
return (Math.round(wholeNumber / 10) * 10) / multiplier;
}
function createPxReplace(opts, viewportUnit, viewportSize) {
return function (m, $1) {
if (!$1)
return m;
var pixels = parseFloat($1);
var parsedVal = toFixed((pixels / viewportSize) * 100, opts.unitPrecision);
return parsedVal + viewportUnit;
};
}
function getUnit(prop, opts) {
return prop.indexOf('font') === -1
? opts.viewportUnit
: opts.fontViewportUnit;
}
//# sourceMappingURL=postcssPluginPx2vw.js.map