You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.3 KiB
76 lines
2.3 KiB
"use strict"; |
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
exports.parseBoxShadowValue = parseBoxShadowValue; |
|
exports.formatBoxShadowValue = formatBoxShadowValue; |
|
var _splitAtTopLevelOnly = require("./splitAtTopLevelOnly"); |
|
let KEYWORDS = new Set([ |
|
"inset", |
|
"inherit", |
|
"initial", |
|
"revert", |
|
"unset" |
|
]); |
|
let SPACE = /\ +(?![^(]*\))/g // Similar to the one above, but with spaces instead. |
|
; |
|
let LENGTH = /^-?(\d+|\.\d+)(.*?)$/g; |
|
function parseBoxShadowValue(input) { |
|
let shadows = Array.from((0, _splitAtTopLevelOnly).splitAtTopLevelOnly(input, ",")); |
|
return shadows.map((shadow)=>{ |
|
let value = shadow.trim(); |
|
let result = { |
|
raw: value |
|
}; |
|
let parts = value.split(SPACE); |
|
let seen = new Set(); |
|
for (let part of parts){ |
|
// Reset index, since the regex is stateful. |
|
LENGTH.lastIndex = 0; |
|
// Keyword |
|
if (!seen.has("KEYWORD") && KEYWORDS.has(part)) { |
|
result.keyword = part; |
|
seen.add("KEYWORD"); |
|
} else if (LENGTH.test(part)) { |
|
if (!seen.has("X")) { |
|
result.x = part; |
|
seen.add("X"); |
|
} else if (!seen.has("Y")) { |
|
result.y = part; |
|
seen.add("Y"); |
|
} else if (!seen.has("BLUR")) { |
|
result.blur = part; |
|
seen.add("BLUR"); |
|
} else if (!seen.has("SPREAD")) { |
|
result.spread = part; |
|
seen.add("SPREAD"); |
|
} |
|
} else { |
|
if (!result.color) { |
|
result.color = part; |
|
} else { |
|
if (!result.unknown) result.unknown = []; |
|
result.unknown.push(part); |
|
} |
|
} |
|
} |
|
// Check if valid |
|
result.valid = result.x !== undefined && result.y !== undefined; |
|
return result; |
|
}); |
|
} |
|
function formatBoxShadowValue(shadows) { |
|
return shadows.map((shadow)=>{ |
|
if (!shadow.valid) { |
|
return shadow.raw; |
|
} |
|
return [ |
|
shadow.keyword, |
|
shadow.x, |
|
shadow.y, |
|
shadow.blur, |
|
shadow.spread, |
|
shadow.color |
|
].filter(Boolean).join(" "); |
|
}).join(", "); |
|
}
|
|
|