//
// Copyright (c) 2015, Brian Frank and Andy Frank
// Licensed under the Academic Free License version 3.0
//
// History:
// 4 Nov 2015 Andy Frank Creation
//
using concurrent
**************************************************************************
** KeyFrames
**************************************************************************
** KeyFrames defines a CSS animation from a list of KeyFrames.
@Js const class KeyFrames
{
** Construct new animation with given frames.
new make(KeyFrame[] frames)
{
this.name = "kf-${id.getAndIncrement}"
this.frames = frames
// build style rule
buf := StrBuf()
out := buf.out
["-webkit-", "-moz-", ""].each |prefix|
{
out.printLine("@${prefix}keyframes $name {")
frames.each |f|
{
out.print(" $f.step {")
f.props.each |val,name|
{
names := Style.toVendor(name)
names.each |n| { out.print(" $n:$val;") }
}
out.printLine(" }")
}
out.printLine("}")
}
// inject keyframe rules
Win.cur.addStyleRules(buf.toStr)
}
** Frames for this animation.
const KeyFrame[] frames
override Str toStr()
{
buf := StrBuf()
out := buf.out
out.printLine("@keyframes $name {")
frames.each |f| { out.printLine(" $f.step $f.props") }
out.printLine("}")
return buf.toStr
}
internal const Str name
private static const AtomicInt id := AtomicInt(0)
}
**************************************************************************
** KeyFrame
**************************************************************************
** KeyFrame defines a frame of a CSS animation.
@Js const class KeyFrame
{
** Construct new KeyFrame for given step and props.
new make(Str step, Str:Obj props)
{
this.step = step
this.props = props
}
** Position of this keyframe.
const Str step
** Properies for this keyframe.
const Str:Obj props
}