mirror of
https://github.com/Sevichecc/Urara-Blog.git
synced 2025-05-07 14:29:13 +08:00
60 lines
1.5 KiB
Text
60 lines
1.5 KiB
Text
'use strict';
|
|
const { unit, stringify } = require('postcss-value-parser');
|
|
const mathFunctions = require('../lib/mathfunctions.js');
|
|
|
|
// border: <line-width> || <line-style> || <color>
|
|
// outline: <outline-color> || <outline-style> || <outline-width>
|
|
|
|
const borderWidths = new Set(['thin', 'medium', 'thick']);
|
|
|
|
const borderStyles = new Set([
|
|
'none',
|
|
'auto', // only in outline-style
|
|
'hidden',
|
|
'dotted',
|
|
'dashed',
|
|
'solid',
|
|
'double',
|
|
'groove',
|
|
'ridge',
|
|
'inset',
|
|
'outset',
|
|
]);
|
|
|
|
/**
|
|
* @param {import('postcss-value-parser').ParsedValue} border
|
|
* @return {string}
|
|
*/
|
|
module.exports = function normalizeBorder(border) {
|
|
const order = { width: '', style: '', color: '' };
|
|
|
|
border.walk((node) => {
|
|
const { type, value } = node;
|
|
if (type === 'word') {
|
|
if (borderStyles.has(value.toLowerCase())) {
|
|
order.style = value;
|
|
return false;
|
|
}
|
|
if (borderWidths.has(value.toLowerCase()) || unit(value.toLowerCase())) {
|
|
if (order.width !== '') {
|
|
order.width = `${order.width} ${value}`;
|
|
return false;
|
|
}
|
|
order.width = value;
|
|
return false;
|
|
}
|
|
order.color = value;
|
|
return false;
|
|
}
|
|
if (type === 'function') {
|
|
if (mathFunctions.has(value.toLowerCase())) {
|
|
order.width = stringify(node);
|
|
} else {
|
|
order.color = stringify(node);
|
|
}
|
|
return false;
|
|
}
|
|
});
|
|
|
|
return `${order.width} ${order.style} ${order.color}`.trim();
|
|
};
|