66 lines
1.6 KiB
Swift
66 lines
1.6 KiB
Swift
// Copyright © 2023 Mastodon gGmbH. All rights reserved.
|
|
|
|
import MastodonAsset
|
|
import UIKit
|
|
|
|
public struct LabeledAction {
|
|
public init(
|
|
title: String,
|
|
image: UIImage? = nil,
|
|
attributes: UIMenuElement.Attributes = [],
|
|
state: UIMenuElement.State = .off,
|
|
handler: @escaping () -> Void
|
|
) {
|
|
self.title = title
|
|
self.image = image
|
|
self.attributes = attributes
|
|
self.state = state
|
|
self.handler = handler
|
|
}
|
|
|
|
private let title: String
|
|
private let image: UIImage?
|
|
private let attributes: UIMenuElement.Attributes
|
|
private let state: UIMenuElement.State
|
|
private let handler: () -> Void
|
|
|
|
public var menuElement: UIMenuElement {
|
|
UIAction(
|
|
title: title,
|
|
image: image,
|
|
identifier: nil,
|
|
discoverabilityTitle: nil,
|
|
attributes: attributes,
|
|
state: .off
|
|
) { _ in
|
|
handler()
|
|
}
|
|
}
|
|
|
|
public var accessibilityCustomAction: UIAccessibilityCustomAction {
|
|
UIAccessibilityCustomAction(name: title, image: image) { _ in
|
|
handler()
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
|
|
extension LabeledAction {
|
|
public init(
|
|
title: String,
|
|
asset: ImageAsset? = nil,
|
|
attributes: UIMenuElement.Attributes = [],
|
|
state: UIMenuElement.State = .off,
|
|
handler: @escaping () -> Void
|
|
) {
|
|
self.title = title
|
|
self.image = asset?.image.withRenderingMode(.alwaysTemplate)
|
|
self.attributes = attributes
|
|
self.state = state
|
|
self.handler = handler
|
|
}
|
|
|
|
}
|
|
|
|
|