Skip to content

Commit 1a84e77

Browse files
author
robot-divkit
committed
Release 31.7.0
commit_hash:2714e23d2950531d313774750f947e5812eae669
1 parent 0978d01 commit 1a84e77

31 files changed

+560
-326
lines changed

.mapping.json

+8
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,9 @@
9494
"DivKit/Extensions/DivAction/DivActionBase.swift":"divkit/public-ios/DivKit/Extensions/DivAction/DivActionBase.swift",
9595
"DivKit/Extensions/DivAction/DivActionExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivAction/DivActionExtensions.swift",
9696
"DivKit/Extensions/DivAction/DivActionsHolder.swift":"divkit/public-ios/DivKit/Extensions/DivAction/DivActionsHolder.swift",
97+
"DivKit/Extensions/DivAnimationActionExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivAnimationActionExtensions.swift",
9798
"DivKit/Extensions/DivAnimationExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivAnimationExtensions.swift",
99+
"DivKit/Extensions/DivAnimationTransitionExtension.swift":"divkit/public-ios/DivKit/Extensions/DivAnimationTransitionExtension.swift",
98100
"DivKit/Extensions/DivAnimator/DivAnimatorExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivAnimator/DivAnimatorExtensions.swift",
99101
"DivKit/Extensions/DivAppearanceTransitionExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivAppearanceTransitionExtensions.swift",
100102
"DivKit/Extensions/DivAspectExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivAspectExtensions.swift",
@@ -147,6 +149,7 @@
147149
"DivKit/Extensions/DivTransformExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivTransformExtensions.swift",
148150
"DivKit/Extensions/DivTypedValueExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivTypedValueExtensions.swift",
149151
"DivKit/Extensions/DivVideoExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivVideoExtensions.swift",
152+
"DivKit/Extensions/DivVisibilityActionBase.swift":"divkit/public-ios/DivKit/Extensions/DivVisibilityActionBase.swift",
150153
"DivKit/Extensions/DivVisibilityActionExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivVisibilityActionExtensions.swift",
151154
"DivKit/Extensions/FontFeatureSettingsParser.swift":"divkit/public-ios/DivKit/Extensions/FontFeatureSettingsParser.swift",
152155
"DivKit/Extensions/GradientExtentions.swift":"divkit/public-ios/DivKit/Extensions/GradientExtentions.swift",
@@ -1051,6 +1054,7 @@
10511054
"Specs/DivKit/31.5.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/31.5.0/DivKit.podspec",
10521055
"Specs/DivKit/31.5.1/DivKit.podspec":"divkit/public-ios/Specs/DivKit/31.5.1/DivKit.podspec",
10531056
"Specs/DivKit/31.6.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/31.6.0/DivKit.podspec",
1057+
"Specs/DivKit/31.7.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/31.7.0/DivKit.podspec",
10541058
"Specs/DivKitExtensions/24.3.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/24.3.0/DivKitExtensions.podspec",
10551059
"Specs/DivKitExtensions/25.0.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/25.0.0/DivKitExtensions.podspec",
10561060
"Specs/DivKitExtensions/25.1.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/25.1.0/DivKitExtensions.podspec",
@@ -1144,6 +1148,7 @@
11441148
"Specs/DivKitExtensions/31.5.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/31.5.0/DivKitExtensions.podspec",
11451149
"Specs/DivKitExtensions/31.5.1/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/31.5.1/DivKitExtensions.podspec",
11461150
"Specs/DivKitExtensions/31.6.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/31.6.0/DivKitExtensions.podspec",
1151+
"Specs/DivKitExtensions/31.7.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/31.7.0/DivKitExtensions.podspec",
11471152
"Specs/DivKit_LayoutKit/28.0.1/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/28.0.1/DivKit_LayoutKit.podspec",
11481153
"Specs/DivKit_LayoutKit/28.1.0/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/28.1.0/DivKit_LayoutKit.podspec",
11491154
"Specs/DivKit_LayoutKit/28.10.0/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/28.10.0/DivKit_LayoutKit.podspec",
@@ -1219,6 +1224,7 @@
12191224
"Specs/DivKit_LayoutKit/31.5.0/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/31.5.0/DivKit_LayoutKit.podspec",
12201225
"Specs/DivKit_LayoutKit/31.5.1/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/31.5.1/DivKit_LayoutKit.podspec",
12211226
"Specs/DivKit_LayoutKit/31.6.0/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/31.6.0/DivKit_LayoutKit.podspec",
1227+
"Specs/DivKit_LayoutKit/31.7.0/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/31.7.0/DivKit_LayoutKit.podspec",
12221228
"Specs/DivKit_LayoutKitInterface/28.0.1/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/28.0.1/DivKit_LayoutKitInterface.podspec",
12231229
"Specs/DivKit_LayoutKitInterface/28.1.0/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/28.1.0/DivKit_LayoutKitInterface.podspec",
12241230
"Specs/DivKit_LayoutKitInterface/28.10.0/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/28.10.0/DivKit_LayoutKitInterface.podspec",
@@ -1294,6 +1300,7 @@
12941300
"Specs/DivKit_LayoutKitInterface/31.5.0/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/31.5.0/DivKit_LayoutKitInterface.podspec",
12951301
"Specs/DivKit_LayoutKitInterface/31.5.1/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/31.5.1/DivKit_LayoutKitInterface.podspec",
12961302
"Specs/DivKit_LayoutKitInterface/31.6.0/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/31.6.0/DivKit_LayoutKitInterface.podspec",
1303+
"Specs/DivKit_LayoutKitInterface/31.7.0/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/31.7.0/DivKit_LayoutKitInterface.podspec",
12971304
"Specs/DivKit_Serialization/28.0.1/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/28.0.1/DivKit_Serialization.podspec",
12981305
"Specs/DivKit_Serialization/28.1.0/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/28.1.0/DivKit_Serialization.podspec",
12991306
"Specs/DivKit_Serialization/28.10.0/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/28.10.0/DivKit_Serialization.podspec",
@@ -1369,6 +1376,7 @@
13691376
"Specs/DivKit_Serialization/31.5.0/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/31.5.0/DivKit_Serialization.podspec",
13701377
"Specs/DivKit_Serialization/31.5.1/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/31.5.1/DivKit_Serialization.podspec",
13711378
"Specs/DivKit_Serialization/31.6.0/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/31.6.0/DivKit_Serialization.podspec",
1379+
"Specs/DivKit_Serialization/31.7.0/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/31.7.0/DivKit_Serialization.podspec",
13721380
"Specs/LayoutKit/24.3.0/LayoutKit.podspec":"divkit/public-ios/Specs/LayoutKit/24.3.0/LayoutKit.podspec",
13731381
"Specs/LayoutKit/25.0.0/LayoutKit.podspec":"divkit/public-ios/Specs/LayoutKit/25.0.0/LayoutKit.podspec",
13741382
"Specs/LayoutKit/25.1.0/LayoutKit.podspec":"divkit/public-ios/Specs/LayoutKit/25.1.0/LayoutKit.podspec",

DivKit/DivKitInfo.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
public enum DivKitInfo {
2-
public static let version = "31.6.0"
2+
public static let version = "31.7.0"
33
}

DivKit/Extensions/ArrayExtensions.swift

+8
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,11 @@ extension [Div] {
3030
makeBlocks(context: context, mappedBy: { _, block, _ in block })
3131
}
3232
}
33+
34+
extension Array where Element: Hashable {
35+
var nonUniqueElements: [Element] {
36+
countElements()
37+
.filter { $0.value > 1 }
38+
.map(\.key)
39+
}
40+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
import LayoutKit
2+
3+
extension DivAnimation {
4+
func resolveActionAnimation(_ expressionResolver: ExpressionResolver) -> ActionAnimation {
5+
ActionAnimation(
6+
touchDown: resolveActionAnimations(expressionResolver, type: .direct),
7+
touchUp: resolveActionAnimations(expressionResolver, type: .reverse)
8+
)
9+
}
10+
11+
private func resolveActionAnimations(
12+
_ expressionResolver: ExpressionResolver,
13+
type: TimeOrientation
14+
) -> [TransitioningAnimation] {
15+
resolveAnimations(
16+
expressionResolver: expressionResolver,
17+
animationNameToKind: { $0.kind },
18+
defaultStartValue: {
19+
$0.defaultStartValue(for: type)
20+
},
21+
defaultEndValue: {
22+
$0.defaultEndValue(for: type)
23+
},
24+
invertResolvedStartAndEnd: type == .reverse
25+
)
26+
}
27+
}
28+
29+
extension DivAnimationInterpolator {
30+
func asTimingFunction() -> TimingFunction {
31+
switch self {
32+
case .linear: .linear
33+
case .easeIn: .easeIn
34+
case .easeOut: .easeOut
35+
case .easeInOut, .ease, .spring: .easeInEaseOut
36+
}
37+
}
38+
}
39+
40+
private enum TimeOrientation {
41+
case direct
42+
case reverse
43+
}
44+
45+
extension DivAnimation.Name {
46+
fileprivate var kind: TransitioningAnimation.Kind? {
47+
switch self {
48+
case .fade: .fade
49+
case .scale: .scaleXY
50+
case .set, .translate, .noAnimation, .native: nil
51+
}
52+
}
53+
}
54+
55+
extension TransitioningAnimation.Kind {
56+
fileprivate func defaultStartValue(for type: TimeOrientation) -> Double {
57+
switch (self, type) {
58+
case (.fade, .direct):
59+
return 1
60+
case (.fade, .reverse):
61+
return 0.6
62+
case (.scaleXY, .direct):
63+
return 1
64+
case (.scaleXY, .reverse):
65+
return 0.95
66+
case (.translationX, _), (.translationY, _):
67+
assertionFailure()
68+
return 0
69+
}
70+
}
71+
72+
fileprivate func defaultEndValue(for type: TimeOrientation) -> Double {
73+
defaultStartValue(for: type.inverted())
74+
}
75+
}
76+
77+
extension TimeOrientation {
78+
fileprivate func inverted() -> Self {
79+
switch self {
80+
case .direct: .reverse
81+
case .reverse: .direct
82+
}
83+
}
84+
}

DivKit/Extensions/DivAnimationExtensions.swift

+21-76
Original file line numberDiff line numberDiff line change
@@ -3,45 +3,47 @@ import LayoutKit
33
import VGSL
44

55
extension DivAnimation {
6-
func resolveActionAnimation(_ expressionResolver: ExpressionResolver) -> ActionAnimation {
7-
ActionAnimation(
8-
touchDown: resolveAnimations(expressionResolver, type: .direct),
9-
touchUp: resolveAnimations(expressionResolver, type: .reverse)
10-
)
11-
}
12-
13-
private func resolveAnimations(
14-
_ expressionResolver: ExpressionResolver,
15-
type: TimeOrientation
6+
func resolveAnimations(
7+
expressionResolver: ExpressionResolver,
8+
animationNameToKind: (DivAnimation.Name) -> TransitioningAnimation.Kind?,
9+
defaultStartValue: (TransitioningAnimation.Kind) -> Double,
10+
defaultEndValue: (TransitioningAnimation.Kind) -> Double,
11+
invertResolvedStartAndEnd: Bool = false
1612
) -> [TransitioningAnimation] {
1713
let name = resolveName(expressionResolver) ?? .noAnimation
1814
if name == .set {
1915
return (items ?? []).flatMap {
20-
$0.resolveAnimations(expressionResolver, type: type)
16+
$0.resolveAnimations(
17+
expressionResolver: expressionResolver,
18+
animationNameToKind: animationNameToKind,
19+
defaultStartValue: defaultStartValue,
20+
defaultEndValue: defaultEndValue,
21+
invertResolvedStartAndEnd: invertResolvedStartAndEnd
22+
)
2123
}
2224
}
2325

24-
guard let kind = name.kind else {
26+
guard let kind = animationNameToKind(name) else {
2527
return []
2628
}
2729

2830
let originalStart = self.resolveStartValue(expressionResolver)
2931
let originalEnd = self.resolveEndValue(expressionResolver)
3032
let startValue: Double?
3133
let endValue: Double?
32-
switch type {
33-
case .direct:
34-
startValue = originalStart
35-
endValue = originalEnd
36-
case .reverse:
34+
35+
if invertResolvedStartAndEnd {
3736
startValue = originalEnd
3837
endValue = originalStart
38+
} else {
39+
startValue = originalStart
40+
endValue = originalEnd
3941
}
4042

4143
let animation = TransitioningAnimation(
4244
kind: kind,
43-
start: startValue ?? kind.defaultStartValue(for: type),
44-
end: endValue ?? kind.defaultEndValue(for: type),
45+
start: startValue ?? defaultStartValue(kind),
46+
end: endValue ?? defaultEndValue(kind),
4547
duration: TimeInterval(milliseconds: resolveDuration(expressionResolver)),
4648
delay: TimeInterval(milliseconds: resolveStartDelay(expressionResolver)),
4749
timingFunction: resolveInterpolator(expressionResolver).asTimingFunction()
@@ -50,60 +52,3 @@ extension DivAnimation {
5052
return [animation]
5153
}
5254
}
53-
54-
extension DivAnimationInterpolator {
55-
func asTimingFunction() -> TimingFunction {
56-
switch self {
57-
case .linear: .linear
58-
case .easeIn: .easeIn
59-
case .easeOut: .easeOut
60-
case .easeInOut, .ease, .spring: .easeInEaseOut
61-
}
62-
}
63-
}
64-
65-
private enum TimeOrientation {
66-
case direct
67-
case reverse
68-
}
69-
70-
extension DivAnimation.Name {
71-
fileprivate var kind: TransitioningAnimation.Kind? {
72-
switch self {
73-
case .fade: .fade
74-
case .scale: .scaleXY
75-
case .set, .translate, .noAnimation, .native: nil
76-
}
77-
}
78-
}
79-
80-
extension TransitioningAnimation.Kind {
81-
fileprivate func defaultStartValue(for type: TimeOrientation) -> Double {
82-
switch (self, type) {
83-
case (.fade, .direct):
84-
return 1
85-
case (.fade, .reverse):
86-
return 0.6
87-
case (.scaleXY, .direct):
88-
return 1
89-
case (.scaleXY, .reverse):
90-
return 0.95
91-
case (.translationX, _), (.translationY, _):
92-
assertionFailure()
93-
return 0
94-
}
95-
}
96-
97-
fileprivate func defaultEndValue(for type: TimeOrientation) -> Double {
98-
defaultStartValue(for: type.inverted())
99-
}
100-
}
101-
102-
extension TimeOrientation {
103-
fileprivate func inverted() -> Self {
104-
switch self {
105-
case .direct: .reverse
106-
case .reverse: .direct
107-
}
108-
}
109-
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import Foundation
2+
import LayoutKit
3+
4+
extension DivAnimation {
5+
func makeTransitioningAnimations(
6+
for type: TransitioningAnimationType,
7+
with expressionResolver: ExpressionResolver
8+
) -> [TransitioningAnimation] {
9+
resolveAnimations(
10+
expressionResolver: expressionResolver,
11+
animationNameToKind: { $0.kind },
12+
defaultStartValue: { kind in
13+
kind.defaultStartValue(for: type)
14+
},
15+
defaultEndValue: { kind in
16+
kind.defaultEndValue(for: type)
17+
}
18+
)
19+
}
20+
}
21+
22+
extension TransitioningAnimation.Kind {
23+
fileprivate func defaultStartValue(for type: TransitioningAnimationType) -> Double {
24+
switch (self, type) {
25+
case (.fade, .appearing), (.scaleXY, .appearing):
26+
return 0
27+
case (.fade, .disappearing), (.scaleXY, .disappearing):
28+
return 1
29+
case (.translationY, .appearing):
30+
return TransitioningAnimation.defaultTrailingSlideDistance
31+
case (.translationY, .disappearing):
32+
return 0
33+
case (.translationX, _):
34+
assertionFailure()
35+
return 0
36+
}
37+
}
38+
39+
fileprivate func defaultEndValue(for type: TransitioningAnimationType) -> Double {
40+
defaultStartValue(for: type.inverted())
41+
}
42+
}
43+
44+
extension DivAnimation.Name {
45+
fileprivate var kind: TransitioningAnimation.Kind? {
46+
switch self {
47+
case .fade: .fade
48+
case .scale: .scaleXY
49+
case .translate: .translationY
50+
case .set, .noAnimation, .native: nil
51+
}
52+
}
53+
}

0 commit comments

Comments
 (0)