Added conversion to a string of []AnimationProperty

This commit is contained in:
Mikalai Turankou 2025-07-01 14:58:52 +03:00
parent c06214f4ae
commit 7969124bcd
2 changed files with 90 additions and 1 deletions

View File

@ -231,6 +231,7 @@ type AnimationProperty interface {
Resume() Resume()
writeTransitionString(tag PropertyName, buffer *strings.Builder) writeTransitionString(tag PropertyName, buffer *strings.Builder)
writeAnimationString(tag PropertyName, buffer *strings.Builder, indent string)
animationCSS(session Session) string animationCSS(session Session) string
transitionCSS(buffer *strings.Builder, session Session) transitionCSS(buffer *strings.Builder, session Session)
hasAnimatedProperty() bool hasAnimatedProperty() bool
@ -521,6 +522,11 @@ func animationSet(properties Properties, tag PropertyName, value any) []Property
} }
} }
} }
if len(obj.Tag()) > 0 {
result.Tag = PropertyName(obj.Tag())
}
if result.From != nil && result.To != nil { if result.From != nil && result.To != nil {
return result, true return result, true
} }
@ -753,6 +759,72 @@ func (animation *animationData) writeTransitionString(tag PropertyName, buffer *
buffer.WriteString(" }") buffer.WriteString(" }")
} }
func (animation *animationData) writeAnimationString(tag PropertyName, buffer *strings.Builder, indent string) {
buffer.WriteString(indent)
writeAnimation := func(animation AnimationProperty, buffer *strings.Builder, indent string) {
buffer.WriteString("_{")
indent2 := indent + "\t"
for _, tag := range animation.AllTags() {
if tag != PropertyTag {
if value := animation.Get(tag); value != nil {
buffer.WriteString("\n" + indent2)
buffer.WriteString(string(tag))
buffer.WriteString(" = ")
writePropertyValue(buffer, tag, value, indent2)
buffer.WriteRune(',')
}
}
}
writeProperty := func(prop AnimatedProperty, indent string) {
buffer.WriteString(string(prop.Tag))
buffer.WriteString("{\n")
indent2 := indent + "\t"
buffer.WriteString(indent2)
buffer.WriteString("from = ")
writePropertyValue(buffer, "from", prop.From, indent2)
buffer.WriteString(",\n")
buffer.WriteString(indent2)
buffer.WriteString("to = ")
writePropertyValue(buffer, "to", prop.To, indent2)
for key, value := range prop.KeyFrames {
buffer.WriteString(",\n")
buffer.WriteString(indent2)
tag := strconv.Itoa(key) + "%"
buffer.WriteString(tag)
buffer.WriteString(" = ")
writePropertyValue(buffer, PropertyName(tag), value, indent2)
}
buffer.WriteString(",\n")
buffer.WriteString(indent)
buffer.WriteString("},")
}
if props, ok := animation.Get(PropertyTag).([]AnimatedProperty); ok && props != nil && len(props) > 0 {
buffer.WriteString("\n" + indent2)
buffer.WriteString(string(PropertyTag))
buffer.WriteString(" = ")
if len(props) > 1 {
buffer.WriteString("[\n")
for _, prop := range props {
buffer.WriteString(indent2)
writeProperty(prop, indent2+"\t")
buffer.WriteString("\n")
}
buffer.WriteString(indent2 + "],")
} else {
writeProperty(props[0], indent2)
}
}
buffer.WriteRune('\n')
buffer.WriteString(indent + "},\n")
}
writeAnimation(animation, buffer, indent)
}
func timingFunctionCSS(properties Properties, tag PropertyName, session Session) string { func timingFunctionCSS(properties Properties, tag PropertyName, session Session) string {
if timingFunction, ok := stringProperty(properties, tag, session); ok { if timingFunction, ok := stringProperty(properties, tag, session); ok {
if timingFunction, ok = session.resolveConstants(timingFunction); ok && isTimingFunctionValid(timingFunction) { if timingFunction, ok = session.resolveConstants(timingFunction); ok && isTimingFunctionValid(timingFunction) {

View File

@ -567,6 +567,7 @@ func supportedPropertyValue(value any) bool {
case []BackgroundGradientPoint: case []BackgroundGradientPoint:
case []BackgroundGradientAngle: case []BackgroundGradientAngle:
case map[PropertyName]AnimationProperty: case map[PropertyName]AnimationProperty:
case []AnimationProperty:
default: default:
return false return false
} }
@ -806,6 +807,22 @@ func writePropertyValue(buffer *strings.Builder, tag PropertyName, value any, in
buffer.WriteString(indent) buffer.WriteString(indent)
buffer.WriteRune(']') buffer.WriteRune(']')
} }
case []AnimationProperty:
switch count := len(value); count {
case 0:
buffer.WriteString("[]")
default:
buffer.WriteString("[\n")
indent2 := indent + "\t"
for _, anim := range value {
if anim != nil {
anim.writeAnimationString(Animation, buffer, indent2)
}
}
buffer.WriteString(indent)
buffer.WriteRune(']')
}
} }
} }
@ -871,7 +888,7 @@ func writeViewStyle(name string, view Properties, buffer *strings.Builder, inden
finalTags := []PropertyName{ finalTags := []PropertyName{
PerspectiveOriginX, PerspectiveOriginY, BackfaceVisible, PerspectiveOriginX, PerspectiveOriginY, BackfaceVisible,
TransformOriginX, TransformOriginY, TransformOriginZ, TransformOriginX, TransformOriginY, TransformOriginZ,
Transform, Clip, Filter, BackdropFilter, Summary, Content, Transition} Transform, Clip, Filter, BackdropFilter, Summary, Content, Transition, Animation}
for _, tag := range finalTags { for _, tag := range finalTags {
removeTag(tag) removeTag(tag)
} }