40 lines
949 B
JavaScript
40 lines
949 B
JavaScript
import hueToDeg from '../util/hue.js';
|
|
import { hue, per, num_per, c } from '../util/regex.js';
|
|
|
|
/*
|
|
hsl() regular expressions for legacy format
|
|
Reference: https://drafts.csswg.org/css-color/#the-hsl-notation
|
|
*/
|
|
const hsl_old = new RegExp(
|
|
`^hsla?\\(\\s*${hue}${c}${per}${c}${per}\\s*(?:,\\s*${num_per}\\s*)?\\)$`
|
|
);
|
|
|
|
const parseHslLegacy = color => {
|
|
let match = color.match(hsl_old);
|
|
if (!match) return;
|
|
let res = { mode: 'hsl' };
|
|
|
|
if (match[3] !== undefined) {
|
|
res.h = +match[3];
|
|
} else if (match[1] !== undefined && match[2] !== undefined) {
|
|
res.h = hueToDeg(match[1], match[2]);
|
|
}
|
|
|
|
if (match[4] !== undefined) {
|
|
res.s = Math.min(Math.max(0, match[4] / 100), 1);
|
|
}
|
|
|
|
if (match[5] !== undefined) {
|
|
res.l = Math.min(Math.max(0, match[5] / 100), 1);
|
|
}
|
|
|
|
if (match[6] !== undefined) {
|
|
res.alpha = match[6] / 100;
|
|
} else if (match[7] !== undefined) {
|
|
res.alpha = +match[7];
|
|
}
|
|
return res;
|
|
};
|
|
|
|
export default parseHslLegacy;
|