Skip to content

Commit 44e1a3d

Browse files
committed
Add transition CSS properties and values
1 parent 2513f2e commit 44e1a3d

File tree

4 files changed

+111
-20
lines changed

4 files changed

+111
-20
lines changed

src/CSS.purs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,4 @@ import CSS.Text.Transform (TextTransform, textTransform) as X
2626
import CSS.Text.Overflow (TextOverflow, textOverflow) as X
2727
import CSS.Time (Time(..), ms, sec) as X
2828
import CSS.Transform (TransformOrigin(..), TransformOriginOffset(..), Transformation(..), offset, offsetBottom, offsetCenter, offsetLeft, offsetRight, offsetTop, rotate, transform, transformOrigin, transforms, translate) as X
29-
import CSS.Transition (TimingFunction(..), easeOut, linear) as X
29+
import CSS.Transition (TimingFunction(..), ease, easeIn, easeOut, easeInOut, linear, stepStart, stepEnd, steps, cubicBezier, transition, transitionProperty, transitionProperties, transitionDuration, transitionDurations, transitionTimingFunction, transitionTimingFunctions, transitionDelay, transitionDelays) as X

src/CSS/Transition.purs

Lines changed: 92 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,105 @@ module CSS.Transition where
22

33
import Prelude
44

5+
import CSS.Time (Time)
6+
import CSS.Common (browsers, none)
57
import CSS.String (fromString)
6-
import CSS.Property (class Val, Value)
8+
import CSS.Property (class Val, Value, value, (!))
9+
import CSS.Stylesheet (CSS, prefixed, key)
710

8-
newtype TimingFunction = TimingFunction Value
11+
data TimingStepsValue = Start | End
12+
13+
derive instance eqTimingStepsValue :: Eq TimingStepsValue
14+
derive instance ordTimingStepsValue :: Ord TimingStepsValue
15+
16+
instance valTimingStepsValue :: Val TimingStepsValue where
17+
value Start = fromString "start"
18+
value End = fromString "end"
19+
20+
data TimingFunction
21+
= Ease
22+
| EaseIn
23+
| EaseOut
24+
| EaseInOut
25+
| Linear
26+
| StepStart
27+
| StepEnd
28+
| Steps Int TimingStepsValue
29+
| CubicBezier Number Number Number Number
930

1031
derive instance eqTimingFunction :: Eq TimingFunction
1132
derive instance ordTimingFunction:: Ord TimingFunction
1233

1334
instance valTimingFunction :: Val TimingFunction where
14-
value (TimingFunction v) = v
35+
value Ease = fromString "ease"
36+
value EaseIn = fromString "ease-in"
37+
value EaseOut = fromString "ease-out"
38+
value EaseInOut = fromString "ease-in-out"
39+
value Linear = fromString "linear"
40+
value StepStart = fromString "step-start"
41+
value StepEnd = fromString "step-end"
42+
value (Steps n v) = fromString "steps(" <> value [fromString $ show n, value v] <> fromString ")"
43+
value (CubicBezier a b c d) = fromString "cubic-bezier(" <> value (a ! b ! c ! d) <> fromString ")"
1544

16-
linear :: TimingFunction
17-
linear = TimingFunction $ fromString "linear"
45+
ease :: TimingFunction
46+
ease = Ease
47+
48+
easeIn :: TimingFunction
49+
easeIn = EaseIn
1850

1951
easeOut :: TimingFunction
20-
easeOut = TimingFunction $ fromString "ease-out"
52+
easeOut = EaseOut
53+
54+
easeInOut :: TimingFunction
55+
easeInOut = EaseInOut
56+
57+
linear :: TimingFunction
58+
linear = Linear
59+
60+
stepStart :: TimingFunction
61+
stepStart = StepStart
62+
63+
stepEnd :: TimingFunction
64+
stepEnd = StepEnd
65+
66+
steps :: Int -> TimingStepsValue -> TimingFunction
67+
steps n = Steps n
68+
69+
cubicBezier :: Number -> Number -> Number -> Number -> TimingFunction
70+
cubicBezier a b c d = CubicBezier a b c d
71+
72+
start :: TimingStepsValue
73+
start = Start
74+
75+
end :: TimingStepsValue
76+
end = End
77+
78+
transition :: String -> Time -> TimingFunction -> Time -> CSS
79+
transition p d f e = prefixed (browsers <> fromString "transition") (p ! d ! f ! e)
80+
81+
transitionProperty :: String -> CSS
82+
transitionProperty = key $ fromString "transition-property"
83+
84+
transitionProperties :: Array String -> CSS
85+
transitionProperties [] = key (fromString "transition-property") (none :: Value)
86+
transitionProperties xs = key (fromString "transition-property") xs
87+
88+
transitionDuration :: String -> CSS
89+
transitionDuration = key $ fromString "transition-duration"
90+
91+
transitionDurations :: Array String -> CSS
92+
transitionDurations [] = key (fromString "transition-duration") (none :: Value)
93+
transitionDurations xs = key (fromString "transition-duration") xs
94+
95+
transitionTimingFunction :: TimingFunction -> CSS
96+
transitionTimingFunction = key $ fromString "transition-timing-function"
97+
98+
transitionTimingFunctions :: Array TimingFunction -> CSS
99+
transitionTimingFunctions [] = key (fromString "transition-timing-function") (none :: Value)
100+
transitionTimingFunctions xs = key (fromString "transition-timing-function") xs
101+
102+
transitionDelay :: Time -> CSS
103+
transitionDelay = key $ fromString "transition-delay"
104+
105+
transitionDelays :: Array Time -> CSS
106+
transitionDelays = key $ fromString "transition-delay"

src/CSS/VerticalAlign.purs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,18 @@ data VerticalAlign
1919
| Initial
2020
| Unset
2121

22-
instance valVerticalAlign :: Val (VerticalAlign) where
23-
value (Baseline) = fromString "baseline"
24-
value (Sub) = fromString "sub"
25-
value (Super) = fromString "super"
26-
value (TextTop) = fromString "text-top"
27-
value (TextBottom) = fromString "text-bottom"
28-
value (Middle) = fromString "middle"
29-
value (Top) = fromString "top"
30-
value (Bottom) = fromString "bottom"
31-
value (Inherit) = fromString "inherit"
32-
value (Initial) = fromString "initial"
33-
value (Unset) = fromString "unset"
22+
instance valVerticalAlign :: Val VerticalAlign where
23+
value Baseline = fromString "baseline"
24+
value Sub = fromString "sub"
25+
value Super = fromString "super"
26+
value TextTop = fromString "text-top"
27+
value TextBottom = fromString "text-bottom"
28+
value Middle = fromString "middle"
29+
value Top = fromString "top"
30+
value Bottom = fromString "bottom"
31+
value Inherit = fromString "inherit"
32+
value Initial = fromString "initial"
33+
value Unset = fromString "unset"
3434

3535
instance inheritVerticalAlign :: Inherit (VerticalAlign) where
3636
inherit = Inherit

test/Main.purs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import Prelude
44

55
import Effect (Effect)
66
import Effect.Exception (error, throwException)
7-
import CSS (Rendered, Path(..), Predicate(..), Refinement(..), Selector(..), FontFaceSrc(..), FontFaceFormat(..), renderedSheet, renderedInline, fromString, selector, block, display, render, borderBox, boxSizing, contentBox, blue, color, body, a, p, px, dashed, border, inlineBlock, red, (?), (&), (|>), (|*), (|+), byId, byClass, (@=), (^=), ($=), (*=), (~=), (|=), hover, fontFaceSrc, fontStyle, deg, zIndex, textOverflow, opacity, transform)
7+
import CSS (Rendered, Path(..), Predicate(..), Refinement(..), Selector(..), FontFaceSrc(..), FontFaceFormat(..), renderedSheet, renderedInline, fromString, selector, block, display, render, borderBox, boxSizing, contentBox, blue, color, body, a, p, px, dashed, border, inlineBlock, red, (?), (&), (|>), (|*), (|+), byId, byClass, (@=), (^=), ($=), (*=), (~=), (|=), hover, fontFaceSrc, fontStyle, deg, zIndex, textOverflow, opacity, transform, transition, easeInOut, ms)
88
import CSS.FontStyle as FontStyle
99
import CSS.Text.Overflow as TextOverflow
1010
import CSS.Transform as Transform
@@ -137,6 +137,10 @@ nestedNodesWithEmptyParent = render do
137137
fromString "#parent" ? do
138138
fromString "#child" ? display block
139139

140+
transition1 :: Rendered
141+
transition1 = render do
142+
transition "background-color" (ms 1.0) easeInOut (ms 0.0)
143+
140144
assertEqual :: forall a. Eq a => Show a => a -> a -> Effect Unit
141145
assertEqual x y = unless (x == y) <<< throwException <<< error $ "Assertion failed: " <> show x <> " /= " <> show y
142146

@@ -185,3 +189,4 @@ main = do
185189
renderedInline scaleTransform1 `assertEqual` Just "transform: scaleX(1.0); transform: scaleY(0.5); transform: scaleZ(0.5)"
186190
renderedInline scaleTransform2 `assertEqual` Just "transform: scale(0.2, 0.8)"
187191

192+
renderedInline transition1 `assertEqual` Just "-webkit-transition: background-color 1.0ms ease-in-out 0.0ms; -moz-transition: background-color 1.0ms ease-in-out 0.0ms; -ms-transition: background-color 1.0ms ease-in-out 0.0ms; -o-transition: background-color 1.0ms ease-in-out 0.0ms; transition: background-color 1.0ms ease-in-out 0.0ms"

0 commit comments

Comments
 (0)