Skip to content

Commit de56f59

Browse files
committed
translate: support percentage values
1 parent a043a4f commit de56f59

File tree

2 files changed

+29
-15
lines changed

2 files changed

+29
-15
lines changed

src/__tests__/transform.js

+14
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,20 @@ it('transforms a single transform value with string', () => {
1212
})
1313
})
1414

15+
it('transforms a single transform value with percentage', () => {
16+
expect(transformCss([['transform', 'translate(100%, 100%)']])).toEqual({
17+
transform: [{ translateY: '100%' }, { translateX: '100%' }],
18+
})
19+
})
20+
21+
it('transforms multiple transform values with percentage', () => {
22+
expect(
23+
transformCss([['transform', 'translateY(100%) translateX(100%)']])
24+
).toEqual({
25+
transform: [{ translateX: '100%' }, { translateY: '100%' }],
26+
})
27+
})
28+
1529
it('transforms multiple transform values', () => {
1630
expect(transformCss([['transform', 'scaleX(5) skewX(1deg)']])).toEqual({
1731
transform: [{ skewX: '1deg' }, { scaleX: 5 }],

src/transforms/transform.js

+15-15
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
1-
import { SPACE, COMMA, LENGTH, NUMBER, ANGLE } from '../tokenTypes'
1+
import { SPACE, COMMA, LENGTH, NUMBER, ANGLE, PERCENT } from '../tokenTypes'
22

3-
const oneOfType = tokenType => functionStream => {
4-
const value = functionStream.expect(tokenType)
3+
const oneOfTypes = tokenTypes => functionStream => {
4+
const value = functionStream.expect(...tokenTypes)
55
functionStream.expectEmpty()
66
return value
77
}
88

9-
const singleNumber = oneOfType(NUMBER)
10-
const singleLength = oneOfType(LENGTH)
11-
const singleAngle = oneOfType(ANGLE)
12-
const xyTransformFactory = tokenType => (
9+
const singleNumber = oneOfTypes([NUMBER])
10+
const singleLengthOrPercent = oneOfTypes([LENGTH, PERCENT])
11+
const singleAngle = oneOfTypes([ANGLE])
12+
const xyTransformFactory = tokenTypes => (
1313
key,
1414
valueIfOmitted
1515
) => functionStream => {
16-
const x = functionStream.expect(tokenType)
16+
const x = functionStream.expect(...tokenTypes)
1717

1818
let y
1919
if (functionStream.hasTokens()) {
2020
functionStream.expect(COMMA)
21-
y = functionStream.expect(tokenType)
21+
y = functionStream.expect(...tokenTypes)
2222
} else if (valueIfOmitted !== undefined) {
2323
y = valueIfOmitted
2424
} else {
@@ -31,18 +31,18 @@ const xyTransformFactory = tokenType => (
3131

3232
return [{ [`${key}Y`]: y }, { [`${key}X`]: x }]
3333
}
34-
const xyNumber = xyTransformFactory(NUMBER)
35-
const xyLength = xyTransformFactory(LENGTH)
36-
const xyAngle = xyTransformFactory(ANGLE)
34+
const xyNumber = xyTransformFactory([NUMBER])
35+
const xyLengthOrPercent = xyTransformFactory([LENGTH, PERCENT])
36+
const xyAngle = xyTransformFactory([ANGLE])
3737

3838
const partTransforms = {
3939
perspective: singleNumber,
4040
scale: xyNumber('scale'),
4141
scaleX: singleNumber,
4242
scaleY: singleNumber,
43-
translate: xyLength('translate', 0),
44-
translateX: singleLength,
45-
translateY: singleLength,
43+
translate: xyLengthOrPercent('translate', 0),
44+
translateX: singleLengthOrPercent,
45+
translateY: singleLengthOrPercent,
4646
rotate: singleAngle,
4747
rotateX: singleAngle,
4848
rotateY: singleAngle,

0 commit comments

Comments
 (0)