logo

pleroma-fe

My custom branche(s) on git.pleroma.social/pleroma/pleroma-fe git clone https://anongit.hacktivis.me/git/pleroma-fe.git/

iss_serializer.js (1914B)


  1. import { unroll } from './iss_utils.js'
  2. import { deserializeShadow } from './iss_deserializer.js'
  3. export const serializeShadow = (s) => {
  4. if (typeof s === 'object') {
  5. const inset = s.inset ? 'inset ' : ''
  6. const name = s.name ? ` #${s.name} ` : ''
  7. const result = `${inset}${s.x} ${s.y} ${s.blur} ${s.spread} ${s.color} / ${s.alpha}${name}`
  8. deserializeShadow(result) // Verify that output is valid and parseable
  9. return result
  10. } else {
  11. return s
  12. }
  13. }
  14. export const serialize = (ruleset) => {
  15. return ruleset.map((rule) => {
  16. if (Object.keys(rule.directives || {}).length === 0) return false
  17. const header = unroll(rule).reverse().map(rule => {
  18. const { component } = rule
  19. const newVariant = (rule.variant == null || rule.variant === 'normal') ? '' : ('.' + rule.variant)
  20. const newState = (rule.state || []).filter(st => st !== 'normal')
  21. return `${component}${newVariant}${newState.map(st => ':' + st).join('')}`
  22. }).join(' ')
  23. const content = Object.entries(rule.directives).map(([directive, value]) => {
  24. if (directive.startsWith('--')) {
  25. const [valType, newValue] = value.split('|') // only first one! intentional!
  26. switch (valType) {
  27. case 'shadow':
  28. return ` ${directive}: ${valType.trim()} | ${newValue.map(serializeShadow).map(s => s.trim()).join(', ')}`
  29. default:
  30. return ` ${directive}: ${valType.trim()} | ${newValue.trim()}`
  31. }
  32. } else {
  33. switch (directive) {
  34. case 'shadow':
  35. if (value.length > 0) {
  36. return ` ${directive}: ${value.map(serializeShadow).join(', ')}`
  37. } else {
  38. return ` ${directive}: none`
  39. }
  40. default:
  41. return ` ${directive}: ${value}`
  42. }
  43. }
  44. })
  45. return `${header} {\n${content.join(';\n')}\n}`
  46. }).filter(x => x).join('\n\n')
  47. }