From 8ed250658080e70b376cd37863f95efb34498f42 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Mon, 8 May 2023 10:45:52 -0500 Subject: [PATCH] udpated tooltip attribute Signed-off-by: Matt Bruce --- .../Attributes/TooltipLabelAttribute.swift | 56 ++++++++++--------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/VDS/Components/Label/Attributes/TooltipLabelAttribute.swift b/VDS/Components/Label/Attributes/TooltipLabelAttribute.swift index aed3556a..5c395970 100644 --- a/VDS/Components/Label/Attributes/TooltipLabelAttribute.swift +++ b/VDS/Components/Label/Attributes/TooltipLabelAttribute.swift @@ -14,19 +14,20 @@ public class TooltipLabelAttribute: ActionLabelAttributeModel, TooltipLaunchable public var id = UUID() public var action = PassthroughSubject() private var subscriber: AnyCancellable? + private var size: Tooltip.Size = .small public var location: Int = 0 public var length: Int = 3 public var surface: Surface = .light public var accessibleText: String? = "Tool Tip" public var closeButtonText: String = "Close" - public var size: Tooltip.Size = .medium public var title: String public var content: String public func setAttribute(on attributedString: NSMutableAttributedString) { - //update the location - location = attributedString.string.count - + //update the location + location = attributedString.string.count - 1 + + //set the default color off surface for text var imageTintColor: UIColor = surface == .light ? VDSColor.elementsPrimaryOnlight : VDSColor.elementsPrimaryOndark //see if you can get the current textColor @@ -34,45 +35,50 @@ public class TooltipLabelAttribute: ActionLabelAttributeModel, TooltipLaunchable if let textColor = attributedString.attribute(.foregroundColor, at: 0, effectiveRange: &originalRange) as? UIColor { imageTintColor = textColor } - - //create the space in the attirbuted String for the tooltip image and click action - let spaceForTooltip = String(repeating: " ", count: length) - - //find the middle of the space - let middle = (length/2) - //add the space to the attributed string - attributedString.insert(NSAttributedString(string: spaceForTooltip), at: location) + var frame = CGRect.zero + if let font = attributedString.attribute(.font, at: 0, effectiveRange: &originalRange) as? UIFont { + switch font.pointSize { + case 15..<25: + size = .medium + frame = CGRect(x: 0, y: -1, width: size.value.dimensions.width * 0.80, height: size.value.dimensions.height * 0.80) + case 0..<14: + size = .small + frame = CGRect(x: 0, y: -1, width: size.value.dimensions.width * 0.80 , height: size.value.dimensions.height * 0.80) + default: + size = .medium + frame = CGRect(x: 0, y: -1, width: size.value.dimensions.width, height: size.value.dimensions.height) + } + } //create the frame in which to hold the icon - let frame = CGRect(x: 0, y: 0, width: size.value.dimensions.width, height: size.value.dimensions.width) + let spacerframe = CGRect(x: 0, y: 0, width: VDSLayout.Spacing.space1X.value, height: size.value.dimensions.height) //create the image icon and match the color of the text - let tooltipAttribute = ImageLabelAttribute(location: location + middle, - length: 1, + let tooltipAttribute = ImageLabelAttribute(location: location, imageName: "info", frame: frame, tintColor: imageTintColor) - //create the action for the tooltip click - let tooltipAction = ActionLabelAttribute(location: location - middle, - length: length + middle, - shouldUnderline: false, - action: action) + let spacerAttribute = ImageLabelAttribute(location: location, + imageName: "info", + frame: spacerframe, + tintColor: .clear) - //apply the attribtes to the current attributedString - tooltipAttribute.setAttribute(on: attributedString) - tooltipAction.setAttribute(on: attributedString) + guard let tooltip = try? tooltipAttribute.getAttachment(), + let spacer = try? spacerAttribute.getAttachment() else { return } + attributedString.append(NSAttributedString(attachment: spacer)) + attributedString.append(NSAttributedString(attachment: tooltip)) + addHandler(on: attributedString) } - public init(id: UUID = UUID(), action: PassthroughSubject = PassthroughSubject(), subscriber: AnyCancellable? = nil, surface: Surface, accessibleText: String? = nil, closeButtonText: String, size: Tooltip.Size, title: String, content: String) { + public init(id: UUID = UUID(), action: PassthroughSubject = PassthroughSubject(), subscriber: AnyCancellable? = nil, surface: Surface, accessibleText: String? = nil, closeButtonText: String, title: String, content: String) { self.id = id self.action = action self.subscriber = subscriber self.surface = surface self.accessibleText = accessibleText self.closeButtonText = closeButtonText - self.size = size self.title = title self.content = content