aboutsummaryrefslogtreecommitdiff
path: root/src/services
diff options
context:
space:
mode:
authorHenry Jameson <me@hjkos.com>2024-09-20 12:50:05 +0300
committerHenry Jameson <me@hjkos.com>2024-09-20 12:50:05 +0300
commit48f0a95a3bf53321d950f23e480607cf94349751 (patch)
tree413a7ad6b1debe274d5da273e7f19f1d6dc3182f /src/services
parentbd514ab6d0cbd6e3736cc6302d17d17130c57b33 (diff)
more tests, fixed some issues
Diffstat (limited to 'src/services')
-rw-r--r--src/services/theme_data/iss_deserializer.js23
-rw-r--r--src/services/theme_data/iss_serializer.js2
2 files changed, 18 insertions, 7 deletions
diff --git a/src/services/theme_data/iss_deserializer.js b/src/services/theme_data/iss_deserializer.js
index 8d4c987e..5d71f35f 100644
--- a/src/services/theme_data/iss_deserializer.js
+++ b/src/services/theme_data/iss_deserializer.js
@@ -6,13 +6,13 @@ const parseShadow = string => {
// inset keyword (optional)
'^(?:(inset)\\s+)?',
// x
- '(?:([0-9]+(?:\\.[0-9]+)?)\\s+)',
+ '(?:(-?[0-9]+(?:\\.[0-9]+)?)\\s+)',
// y
- '(?:([0-9]+(?:\\.[0-9]+)?)\\s+)',
+ '(?:(-?[0-9]+(?:\\.[0-9]+)?)\\s+)',
// blur (optional)
- '(?:([0-9]+(?:\\.[0-9]+)?)\\s+)?',
+ '(?:(-?[0-9]+(?:\\.[0-9]+)?)\\s+)?',
// spread (optional)
- '(?:([0-9]+(?:\\.[0-9]+)?)\\s+)?',
+ '(?:(-?[0-9]+(?:\\.[0-9]+)?)\\s+)?',
// either hex, variable or function
'(#[0-9a-f]{6}|--[a-z\\-_]+|\\$[a-z\\-()_]+)',
// opacity (optional)
@@ -23,7 +23,18 @@ const parseShadow = string => {
if (result == null) {
return string
} else {
- return Object.fromEntries(modes.map((mode, i) => [mode, result[i]]))
+ const numeric = new Set(['x', 'y', 'blur', 'spread', 'alpha'])
+ const { x, y, blur, spread, alpha, inset, color } = Object.fromEntries(modes.map((mode, i) => {
+ if (numeric.has(mode)) {
+ return [mode, Number(result[i])]
+ } else if (mode === 'inset') {
+ return [mode, !!result[i]]
+ } else {
+ return [mode, result[i]]
+ }
+ }).filter(([k, v]) => v !== false).slice(1))
+
+ return { x, y, blur, spread, color, alpha, inset }
}
}
// this works nearly the same as HTML tree converter
@@ -127,7 +138,7 @@ export const deserialize = (input) => {
const [property, value] = d.split(':')
let realValue = value.trim()
if (property === 'shadow') {
- realValue = parseShadow(value.split(',').map(v => v.trim()))
+ realValue = value.split(',').map(v => parseShadow(v.trim()))
} if (!Number.isNaN(Number(value))) {
realValue = Number(value)
}
diff --git a/src/services/theme_data/iss_serializer.js b/src/services/theme_data/iss_serializer.js
index 6bba85e4..959852b7 100644
--- a/src/services/theme_data/iss_serializer.js
+++ b/src/services/theme_data/iss_serializer.js
@@ -2,7 +2,7 @@ import { unroll } from './iss_utils.js'
const serializeShadow = s => {
if (typeof s === 'object') {
- return `{${s.inset ? 'inset ' : ''}${s.x} ${s.y} ${s.blur} ${s.spread} ${s.color} / ${s.alpha}}`
+ return `${s.inset ? 'inset ' : ''}${s.x} ${s.y} ${s.blur} ${s.spread} ${s.color} / ${s.alpha}`
} else {
return s
}