Skip to content

Commit

Permalink
Release 31.1.0
Browse files Browse the repository at this point in the history
commit_hash:4f420b84516ccd998b30b388011d3a6c46a8f62c
  • Loading branch information
robot-divkit committed Feb 3, 2025
1 parent c807db3 commit 6dbdba1
Show file tree
Hide file tree
Showing 47 changed files with 953 additions and 346 deletions.
13 changes: 13 additions & 0 deletions .mapping.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
"DivKit/Actions/DivActionURLHandler.swift":"divkit/public-ios/DivKit/Actions/DivActionURLHandler.swift",
"DivKit/Actions/DivUrlHandler.swift":"divkit/public-ios/DivKit/Actions/DivUrlHandler.swift",
"DivKit/Actions/DivVideoAction.swift":"divkit/public-ios/DivKit/Actions/DivVideoAction.swift",
"DivKit/Actions/DownloadActionHandler.swift":"divkit/public-ios/DivKit/Actions/DownloadActionHandler.swift",
"DivKit/Actions/FocusElementActionHandler.swift":"divkit/public-ios/DivKit/Actions/FocusElementActionHandler.swift",
"DivKit/Actions/ScrollActionHandler.swift":"divkit/public-ios/DivKit/Actions/ScrollActionHandler.swift",
"DivKit/Actions/ScrollMode.swift":"divkit/public-ios/DivKit/Actions/ScrollMode.swift",
Expand Down Expand Up @@ -132,6 +133,7 @@
"DivKit/Extensions/DivPointExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivPointExtensions.swift",
"DivKit/Extensions/DivSelectExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivSelectExtensions.swift",
"DivKit/Extensions/DivSeparatorExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivSeparatorExtensions.swift",
"DivKit/Extensions/DivShadowExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivShadowExtensions.swift",
"DivKit/Extensions/DivSizeExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivSizeExtensions.swift",
"DivKit/Extensions/DivSizeUnitExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivSizeUnitExtensions.swift",
"DivKit/Extensions/DivSliderExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivSliderExtensions.swift",
Expand Down Expand Up @@ -497,6 +499,12 @@
"DivKit/generated_sources/DivTimer.swift":"divkit/public-ios/DivKit/generated_sources/DivTimer.swift",
"DivKit/generated_sources/DivTimerTemplate.swift":"divkit/public-ios/DivKit/generated_sources/DivTimerTemplate.swift",
"DivKit/generated_sources/DivTooltip.swift":"divkit/public-ios/DivKit/generated_sources/DivTooltip.swift",
"DivKit/generated_sources/DivTooltipMode.swift":"divkit/public-ios/DivKit/generated_sources/DivTooltipMode.swift",
"DivKit/generated_sources/DivTooltipModeModal.swift":"divkit/public-ios/DivKit/generated_sources/DivTooltipModeModal.swift",
"DivKit/generated_sources/DivTooltipModeModalTemplate.swift":"divkit/public-ios/DivKit/generated_sources/DivTooltipModeModalTemplate.swift",
"DivKit/generated_sources/DivTooltipModeNonModal.swift":"divkit/public-ios/DivKit/generated_sources/DivTooltipModeNonModal.swift",
"DivKit/generated_sources/DivTooltipModeNonModalTemplate.swift":"divkit/public-ios/DivKit/generated_sources/DivTooltipModeNonModalTemplate.swift",
"DivKit/generated_sources/DivTooltipModeTemplate.swift":"divkit/public-ios/DivKit/generated_sources/DivTooltipModeTemplate.swift",
"DivKit/generated_sources/DivTooltipTemplate.swift":"divkit/public-ios/DivKit/generated_sources/DivTooltipTemplate.swift",
"DivKit/generated_sources/DivTransform.swift":"divkit/public-ios/DivKit/generated_sources/DivTransform.swift",
"DivKit/generated_sources/DivTransformTemplate.swift":"divkit/public-ios/DivKit/generated_sources/DivTransformTemplate.swift",
Expand Down Expand Up @@ -1027,6 +1035,7 @@
"Specs/DivKit/30.8.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/30.8.0/DivKit.podspec",
"Specs/DivKit/30.9.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/30.9.0/DivKit.podspec",
"Specs/DivKit/31.0.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/31.0.0/DivKit.podspec",
"Specs/DivKit/31.1.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/31.1.0/DivKit.podspec",
"Specs/DivKitExtensions/24.3.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/24.3.0/DivKitExtensions.podspec",
"Specs/DivKitExtensions/25.0.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/25.0.0/DivKitExtensions.podspec",
"Specs/DivKitExtensions/25.1.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/25.1.0/DivKitExtensions.podspec",
Expand Down Expand Up @@ -1113,6 +1122,7 @@
"Specs/DivKitExtensions/30.8.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/30.8.0/DivKitExtensions.podspec",
"Specs/DivKitExtensions/30.9.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/30.9.0/DivKitExtensions.podspec",
"Specs/DivKitExtensions/31.0.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/31.0.0/DivKitExtensions.podspec",
"Specs/DivKitExtensions/31.1.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/31.1.0/DivKitExtensions.podspec",
"Specs/DivKit_LayoutKit/28.0.1/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/28.0.1/DivKit_LayoutKit.podspec",
"Specs/DivKit_LayoutKit/28.1.0/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/28.1.0/DivKit_LayoutKit.podspec",
"Specs/DivKit_LayoutKit/28.10.0/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/28.10.0/DivKit_LayoutKit.podspec",
Expand Down Expand Up @@ -1181,6 +1191,7 @@
"Specs/DivKit_LayoutKit/30.8.0/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/30.8.0/DivKit_LayoutKit.podspec",
"Specs/DivKit_LayoutKit/30.9.0/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/30.9.0/DivKit_LayoutKit.podspec",
"Specs/DivKit_LayoutKit/31.0.0/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/31.0.0/DivKit_LayoutKit.podspec",
"Specs/DivKit_LayoutKit/31.1.0/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/31.1.0/DivKit_LayoutKit.podspec",
"Specs/DivKit_LayoutKitInterface/28.0.1/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/28.0.1/DivKit_LayoutKitInterface.podspec",
"Specs/DivKit_LayoutKitInterface/28.1.0/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/28.1.0/DivKit_LayoutKitInterface.podspec",
"Specs/DivKit_LayoutKitInterface/28.10.0/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/28.10.0/DivKit_LayoutKitInterface.podspec",
Expand Down Expand Up @@ -1249,6 +1260,7 @@
"Specs/DivKit_LayoutKitInterface/30.8.0/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/30.8.0/DivKit_LayoutKitInterface.podspec",
"Specs/DivKit_LayoutKitInterface/30.9.0/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/30.9.0/DivKit_LayoutKitInterface.podspec",
"Specs/DivKit_LayoutKitInterface/31.0.0/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/31.0.0/DivKit_LayoutKitInterface.podspec",
"Specs/DivKit_LayoutKitInterface/31.1.0/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/31.1.0/DivKit_LayoutKitInterface.podspec",
"Specs/DivKit_Serialization/28.0.1/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/28.0.1/DivKit_Serialization.podspec",
"Specs/DivKit_Serialization/28.1.0/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/28.1.0/DivKit_Serialization.podspec",
"Specs/DivKit_Serialization/28.10.0/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/28.10.0/DivKit_Serialization.podspec",
Expand Down Expand Up @@ -1317,6 +1329,7 @@
"Specs/DivKit_Serialization/30.8.0/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/30.8.0/DivKit_Serialization.podspec",
"Specs/DivKit_Serialization/30.9.0/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/30.9.0/DivKit_Serialization.podspec",
"Specs/DivKit_Serialization/31.0.0/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/31.0.0/DivKit_Serialization.podspec",
"Specs/DivKit_Serialization/31.1.0/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/31.1.0/DivKit_Serialization.podspec",
"Specs/LayoutKit/24.3.0/LayoutKit.podspec":"divkit/public-ios/Specs/LayoutKit/24.3.0/LayoutKit.podspec",
"Specs/LayoutKit/25.0.0/LayoutKit.podspec":"divkit/public-ios/Specs/LayoutKit/25.0.0/LayoutKit.podspec",
"Specs/LayoutKit/25.1.0/LayoutKit.podspec":"divkit/public-ios/Specs/LayoutKit/25.1.0/LayoutKit.podspec",
Expand Down
2 changes: 1 addition & 1 deletion DivKit/Actions/ClearFocusActionHandler.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ import Foundation
final class ClearFocusActionHandler {
func handle(context: DivActionHandlingContext) {
context.blockStateStorage.clearFocus()
context.updateCard(.state(context.path.cardId))
context.updateCard(.state(context.cardId))
}
}
191 changes: 103 additions & 88 deletions DivKit/Actions/DivActionHandler.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ public final class DivActionHandler {

typealias UpdateCardAction = (DivActionURLHandler.UpdateReason) -> Void

private let divActionURLHandler: DivActionURLHandler
private let urlHandler: DivUrlHandler
private let trackVisibility: TrackVisibility
private let trackDisappear: TrackVisibility
Expand All @@ -33,6 +32,7 @@ public final class DivActionHandler {
private let clearFocusActionHandler = ClearFocusActionHandler()
private let copyToClipboardActionHandler = CopyToClipboardActionHandler()
private let dictSetValueActionHandler = DictSetValueActionHandler()
private let downloadActionHandler: DownloadActionHandler
private let focusElementActionHandler = FocusElementActionHandler()
private let scrollActionHandler: ScrollActionHandler
private let setStateActionHandler: SetStateActionHandler
Expand Down Expand Up @@ -103,33 +103,6 @@ public final class DivActionHandler {
animatorController: DivAnimatorController,
flags: DivFlagsInfo
) {
let scrollActionHandler = ScrollActionHandler(
blockStateStorage: blockStateStorage,
updateCard: updateCard
)
self.scrollActionHandler = scrollActionHandler

let setStateActionHandler = SetStateActionHandler(stateUpdater: stateUpdater)
self.setStateActionHandler = setStateActionHandler

let timerActionHandler = TimerActionHandler(performer: performTimerAction)
self.timerActionHandler = timerActionHandler

let tooltipActionHandler = TooltipActionHandler(
performer: tooltipActionPerformer,
showTooltip: showTooltip
)
self.tooltipActionHandler = tooltipActionHandler

self.divActionURLHandler = DivActionURLHandler(
patchProvider: patchProvider,
updateCard: updateCard,
persistentValuesStorage: persistentValuesStorage,
scrollActionHandler: scrollActionHandler,
setStateActionHandler: setStateActionHandler,
timerActionHandler: timerActionHandler,
tooltipActionHandler: tooltipActionHandler
)
self.urlHandler = urlHandler
self.trackVisibility = trackVisibility
self.trackDisappear = trackDisappear
Expand All @@ -143,10 +116,24 @@ public final class DivActionHandler {
self.flags = flags

animatorActionHandler = AnimatorActionHandler(animatorController: animatorController)
downloadActionHandler = DownloadActionHandler(
patchProvider: patchProvider,
updateCard: updateCard
)
scrollActionHandler = ScrollActionHandler(
blockStateStorage: blockStateStorage,
updateCard: updateCard
)
setStateActionHandler = SetStateActionHandler(stateUpdater: stateUpdater)
setStoredValueActionHandler = SetStoredValueActionHandler(
persistentValuesStorage: persistentValuesStorage
)
submitActionHandler = SubmitActionHandler(submitter: submitter)
timerActionHandler = TimerActionHandler(performer: performTimerAction)
tooltipActionHandler = TooltipActionHandler(
performer: tooltipActionPerformer,
showTooltip: showTooltip
)
}

public func handle(
Expand Down Expand Up @@ -204,16 +191,16 @@ public final class DivActionHandler {
} else {
path
}
let info = action.resolveInfo(expressionResolver, path: path, source: source)
let context = DivActionHandlingContext(
path: path,
info: info,
expressionResolver: expressionResolver,
variablesStorage: variablesStorage,
blockStateStorage: blockStateStorage,
actionHandler: self,
updateCard: updateCard
)

var isHandled = true
switch action.typed {
case let .divActionAnimatorStart(action):
animatorActionHandler.handle(action, context: context)
Expand All @@ -231,6 +218,8 @@ public final class DivActionHandler {
copyToClipboardActionHandler.handle(action, context: context)
case let .divActionDictSetValue(action):
dictSetValueActionHandler.handle(action, context: context)
case let .divActionDownload(action):
downloadActionHandler.handle(action, context: context)
case let .divActionFocusElement(action):
focusElementActionHandler.handle(action, context: context)
case let .divActionHideTooltip(action):
Expand All @@ -253,88 +242,114 @@ public final class DivActionHandler {
timerActionHandler.handle(action, context: context)
case let .divActionVideo(action):
videoActionHandler.handle(action, context: context)
case .divActionDownload:
break
case .none:
isHandled = false
}

let logId = action.resolveLogId(expressionResolver) ?? ""
let logUrl = action.resolveLogUrl(expressionResolver)
let referer = action.resolveReferer(expressionResolver)

let divActionInfo = DivActionInfo(
path: path,
logId: logId,
url: action.resolveUrl(expressionResolver),
logUrl: logUrl,
referer: referer,
source: source,
payload: action.payload
)

if !isHandled {
handleUrl(
action,
info: divActionInfo,
context: context,
sender: sender
)
handleUrl(action, context: context, sender: sender)
}

reporter.reportAction(
cardId: cardId,
info: divActionInfo
)
reporter.reportAction(cardId: cardId, info: info)

if source == .visibility {
trackVisibility(logId, cardId)
trackVisibility(info.logId, cardId)
} else if source == .disappear {
trackDisappear(logId, cardId)
trackDisappear(info.logId, cardId)
}
}

private func handleUrl(
_ action: DivActionBase,
info: DivActionInfo,
context: DivActionHandlingContext,
sender: AnyObject?
) {
guard let url = info.url else {
guard let url = context.info.url else {
return
}

let isDivActionURLHandled = divActionURLHandler.handleURL(
url,
info: info,
context: context,
completion: { [weak self] result in
guard let self else {
return
}
let callbackActions: [DivAction] = switch result {
case .success:
action.downloadCallbacks?.onSuccessActions ?? []
case .failure:
action.downloadCallbacks?.onFailActions ?? []
}
for action in callbackActions {
self.handle(
action,
path: info.path,
source: info.source,
sender: sender
if let intent = DivActionIntent(url: url) {
let cardId = context.cardId
switch intent {
case let .showTooltip(id, multiple):
let tooltipInfo = TooltipInfo(id: id, showsOnStart: false, multiple: multiple)
tooltipActionHandler.showTooltip(tooltipInfo)
case let .hideTooltip(id):
tooltipActionHandler.hideTooltip(id: id)
case let .download(patchUrl):
downloadActionHandler.handle(
url: patchUrl,
context: context,
onSuccessActions: action.downloadCallbacks?.onSuccessActions,
onFailActions: action.downloadCallbacks?.onFailActions
)
case let .setState(divStatePath, lifetime):
setStateActionHandler.handle(
divStatePath: divStatePath,
lifetime: lifetime,
context: context
)
case let .setVariable(name, value):
context.variablesStorage.update(
path: context.path,
name: DivVariableName(rawValue: name),
value: value
)
case let .setCurrentItem(id, index):
scrollActionHandler.scrollToItem(cardId: cardId, id: id, index: index)
case let .setNextItem(id, step, overflow):
scrollActionHandler.scrollToNextItem(
cardId: cardId,
id: id,
step: step,
overflow: overflow
)
case let .setPreviousItem(id, step, overflow):
scrollActionHandler.scrollToNextItem(
cardId: cardId,
id: id,
step: -step,
overflow: overflow
)
case let .scroll(id, mode):
switch mode {
case .start:
scrollActionHandler.scrollToStart(cardId: cardId, id: id)
case .end:
scrollActionHandler.scrollToEnd(cardId: cardId, id: id)
case let .forward(offset, overflow):
scrollActionHandler.scrollToOffset(
cardId: cardId,
id: id,
offset: offset,
isRelative: true,
overflow: overflow
)
case let .backward(offset, overflow):
scrollActionHandler.scrollToOffset(
cardId: cardId,
id: id,
offset: -offset,
isRelative: true,
overflow: overflow
)
case let .position(position):
scrollActionHandler.scrollToOffset(cardId: cardId, id: id, offset: position)
}
case let .video(id: id, action: action):
context.blockStateStorage.setState(
id: id,
cardId: cardId,
state: VideoBlockViewState(state: action == .play ? .playing : .paused)
)
context.updateCard(.state(cardId))
case let .timer(timerId, action):
timerActionHandler.handle(cardId: cardId, timerId: timerId, action: action)
case let .setStoredValue(storedValue):
persistentValuesStorage.set(value: storedValue)
}
)

if isDivActionURLHandled {
return
}

let info = context.info
if !flags.useUrlHandlerForVisibilityActions,
(info.source == .visibility || info.source == .disappear) {
info.source == .visibility || info.source == .disappear {
return
}

Expand Down
10 changes: 9 additions & 1 deletion DivKit/Actions/DivActionHandlingContext.swift
Original file line number Diff line number Diff line change
@@ -1,10 +1,18 @@
import LayoutKit

struct DivActionHandlingContext {
let path: UIElementPath
let info: DivActionInfo
let expressionResolver: ExpressionResolver
let variablesStorage: DivVariablesStorage
let blockStateStorage: DivBlockStateStorage
let actionHandler: DivActionHandler
let updateCard: DivActionHandler.UpdateCardAction

var cardId: DivCardID {
info.cardId
}

var path: UIElementPath {
info.path
}
}
Loading

0 comments on commit 6dbdba1

Please sign in to comment.