UNPKG

postcss-color-hsl

Version:

PostCSS plugin to transform W3C CSS Color Module Level 4 hsl() new syntax to more compatible CSS (comma-separated hsl() or hsla())

55 lines (44 loc) 1.64 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _unitsCss = require('units-css'); var _unitsCss2 = _interopRequireDefault(_unitsCss); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function legacyAlpha(alpha) { if (alpha.indexOf('%') > -1) { alpha = '' + alpha.slice(0, -1) / 100; } return alpha.replace(/^0\./, '.'); } function legacyHue(hue) { if (/.*(?:deg|grad|rad|turn)/.test(hue)) { return Math.round(_unitsCss2.default.convert('deg', hue) * 1000) / 1000; } return hue; } function getColorData(colorFn) { var hslSyntaxPlusAltRegex = /(hsl)a?\s*\(\s*(\d*\.?\d+(?:deg|grad|rad|turn)?)(?:\s+|(?:\s*,\s*))(\d*\.?\d+\%)(?:\s+|(?:\s*,\s*))(\d*\.?\d+\%)(?:\s*(?:\/|,)\s*(\d*\.?\d+\%?))?\s*\)/g; // eslint-disable-line max-len var match = hslSyntaxPlusAltRegex.exec(colorFn); if (match === null) return false; return { fn: match[1], h: legacyHue(match[2]), s: match[3], l: match[4], alpha: match[5] ? legacyAlpha(match[5]) : false }; } function legacy(colorFn) { var colorData = getColorData(colorFn); if (!colorData) return colorFn; var result = null; if (colorData.alpha === false) { result = colorData.fn + '(' + colorData.h + ', ' + colorData.s + ', ' + colorData.l + ')'; } else { result = colorData.fn + 'a(' + colorData.h + ', ' + colorData.s + ', ' + colorData.l + ', ' + colorData.alpha + ')'; } return result; } exports.default = { legacy: legacy }; module.exports = exports['default'];