From 2ef34939b7e0c1dd59390843f2bde08441d7fe33 Mon Sep 17 00:00:00 2001 From: Kevin G Christiano Date: Mon, 5 Oct 2020 15:21:52 -0400 Subject: [PATCH 1/5] underline enhancement --- .../Atomic/Atoms/Views/Label/Label.swift | 5 +- .../Label/LabelAttributeUnderlineModel.swift | 96 +++++++++++++++++++ 2 files changed, 99 insertions(+), 2 deletions(-) diff --git a/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift b/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift index 73de7760..ef3fe04f 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift @@ -297,8 +297,9 @@ public typealias ActionBlock = () -> () for attribute in attributes { let range = NSRange(location: attribute.location, length: attribute.length) switch attribute { - case _ as LabelAttributeUnderlineModel: - attributedString.addAttribute(.underlineStyle, value: NSUnderlineStyle.single.rawValue, range: range) + case let underlineAtt as LabelAttributeUnderlineModel: + attributedString.addAttribute(.underlineStyle, value: underlineAtt.underlineValue.rawValue, range: range) + attributedString.addAttribute(.underlineColor, value: underlineAtt.color.uiColor, range: range) case _ as LabelAttributeStrikeThroughModel: attributedString.addAttribute(.strikethroughStyle, value: NSUnderlineStyle.thick.rawValue, range: range) diff --git a/MVMCoreUI/Atomic/Atoms/Views/Label/LabelAttributeUnderlineModel.swift b/MVMCoreUI/Atomic/Atoms/Views/Label/LabelAttributeUnderlineModel.swift index d052686d..4dbdab9b 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/Label/LabelAttributeUnderlineModel.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/Label/LabelAttributeUnderlineModel.swift @@ -8,16 +8,112 @@ import UIKit + @objcMembers public class LabelAttributeUnderlineModel: LabelAttributeModel { + //-------------------------------------------------- + // MARK: - Properties + //-------------------------------------------------- + override public class var identifier: String { return "underline" } + var underlineValue: NSUnderlineStyle { + + if let pattern = pattern?.value() { + return NSUnderlineStyle(rawValue: style.value() | pattern) + } else { + return NSUnderlineStyle(rawValue: style.value()) + } + } + + var color: Color = Color(uiColor: .mvmBlack) + var style: UnderlineStyle = .single + var pattern: UnderlineStyle.Pattern? + + //-------------------------------------------------- + // MARK: - Keys + //-------------------------------------------------- + + private enum CodingKeys: String, CodingKey { + case color + case style + case pattern + } + required public init(from decoder: Decoder) throws { + let typeContainer = try decoder.container(keyedBy: CodingKeys.self) + + if let color = try typeContainer.decodeIfPresent(Color.self, forKey: .color) { + self.color = color + } + + if let style = try typeContainer.decodeIfPresent(UnderlineStyle.self, forKey: .style) { + self.style = style + } + + if let pattern = try typeContainer.decodeIfPresent(UnderlineStyle.Pattern.self, forKey: .pattern) { + self.pattern = pattern + } + try super.init(from: decoder) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(color, forKey: .color) + try container.encode(style, forKey: .style) + try container.encodeIfPresent(pattern, forKey: .pattern) + } +} + +public enum UnderlineStyle: String, Codable { + case none + case single + case thick + case double + + func value() -> Int { + switch self { + case .none: + return 0 + + case .single: + return NSUnderlineStyle.single.rawValue + + case .thick: + return NSUnderlineStyle.thick.rawValue + + case .double: + return NSUnderlineStyle.double.rawValue + } + } + + public enum Pattern: String, Codable { + case dot + case dash + case dashDot + case dashDotDot + case byWord + + func value() -> Int { + switch self { + case .dot: + return NSUnderlineStyle.patternDot.rawValue + + case .dash: + return NSUnderlineStyle.patternDash.rawValue + + case .dashDot: + return NSUnderlineStyle.patternDashDot.rawValue + + case .dashDotDot: + return NSUnderlineStyle.patternDashDotDot.rawValue + + case .byWord: + return NSUnderlineStyle.byWord.rawValue + } + } } } From 229bc94568cc35d66fe0455a2183a189035371d3 Mon Sep 17 00:00:00 2001 From: Kevin G Christiano Date: Mon, 5 Oct 2020 15:37:19 -0400 Subject: [PATCH 2/5] comment --- .../Atomic/Atoms/Views/Label/LabelAttributeUnderlineModel.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/MVMCoreUI/Atomic/Atoms/Views/Label/LabelAttributeUnderlineModel.swift b/MVMCoreUI/Atomic/Atoms/Views/Label/LabelAttributeUnderlineModel.swift index 4dbdab9b..381f4eff 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/Label/LabelAttributeUnderlineModel.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/Label/LabelAttributeUnderlineModel.swift @@ -18,6 +18,8 @@ import UIKit return "underline" } + /// This returns the NSUnderlineStyle used in NSAttributedValue. If there is a pattern, it will return + /// a new NSUnderlineStyle derived from the bitmask of style | pattern. var underlineValue: NSUnderlineStyle { if let pattern = pattern?.value() { From 7643b86b51cbd3f030e815c8f6a25a62de7e94e8 Mon Sep 17 00:00:00 2001 From: Kevin G Christiano Date: Mon, 5 Oct 2020 18:03:35 -0400 Subject: [PATCH 3/5] allow for textColor first. --- MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift | 4 +++- .../Atoms/Views/Label/LabelAttributeUnderlineModel.swift | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift b/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift index eab432b2..c03d9a84 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift @@ -324,7 +324,9 @@ public typealias ActionBlock = () -> () switch attribute { case let underlineAtt as LabelAttributeUnderlineModel: attributedString.addAttribute(.underlineStyle, value: underlineAtt.underlineValue.rawValue, range: range) - attributedString.addAttribute(.underlineColor, value: underlineAtt.color.uiColor, range: range) + if let underlineColor = underlineAtt.color?.uiColor { + attributedString.addAttribute(.underlineColor, value: underlineColor, range: range) + } case _ as LabelAttributeStrikeThroughModel: attributedString.addAttribute(.strikethroughStyle, value: NSUnderlineStyle.thick.rawValue, range: range) diff --git a/MVMCoreUI/Atomic/Atoms/Views/Label/LabelAttributeUnderlineModel.swift b/MVMCoreUI/Atomic/Atoms/Views/Label/LabelAttributeUnderlineModel.swift index 381f4eff..a3adbe00 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/Label/LabelAttributeUnderlineModel.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/Label/LabelAttributeUnderlineModel.swift @@ -29,7 +29,7 @@ import UIKit } } - var color: Color = Color(uiColor: .mvmBlack) + var color: Color? var style: UnderlineStyle = .single var pattern: UnderlineStyle.Pattern? @@ -64,7 +64,7 @@ import UIKit public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(color, forKey: .color) + try container.encodeIfPresent(color, forKey: .color) try container.encode(style, forKey: .style) try container.encodeIfPresent(pattern, forKey: .pattern) } From a51a0e458bee5598a7cea73f10b9f26d3fc0d056 Mon Sep 17 00:00:00 2001 From: "Suresh, Kamlesh" Date: Sun, 11 Oct 2020 16:04:28 -0400 Subject: [PATCH 4/5] fix --- MVMCoreUI/BaseControllers/ViewController.swift | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/MVMCoreUI/BaseControllers/ViewController.swift b/MVMCoreUI/BaseControllers/ViewController.swift index e7563faa..528c63cb 100644 --- a/MVMCoreUI/BaseControllers/ViewController.swift +++ b/MVMCoreUI/BaseControllers/ViewController.swift @@ -439,13 +439,17 @@ import UIKit MVMCoreUISession.sharedGlobal()?.splitViewController?.showRightPanel(animated: true) } } - + + // Override this method to avoid adding form params. + open func addFormParams(_ requestParameters: MVMCoreRequestParameters) { + formValidator?.addFormParams(requestParameters: requestParameters) + } //-------------------------------------------------- // MARK: - MVMCoreActionDelegateProtocol //-------------------------------------------------- open func handleOpenPage(for requestParameters: MVMCoreRequestParameters, actionInformation: [AnyHashable: Any]?, additionalData: [AnyHashable: Any]?) { - formValidator?.addFormParams(requestParameters: requestParameters) + addFormParams(requestParameters) requestParameters.parentPageType = loadObject?.pageJSON?.optionalStringForKey("parentPageType") MVMCoreActionHandler.defaultHandleOpenPage(for: requestParameters, additionalData: additionalData, delegateObject: delegateObject()) } From bdc5084ad5325cf432fb2cb7c567b416625193fd Mon Sep 17 00:00:00 2001 From: "Suresh, Kamlesh" Date: Mon, 12 Oct 2020 17:44:59 -0400 Subject: [PATCH 5/5] comment --- MVMCoreUI/BaseControllers/ViewController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MVMCoreUI/BaseControllers/ViewController.swift b/MVMCoreUI/BaseControllers/ViewController.swift index 528c63cb..ebcf9f6b 100644 --- a/MVMCoreUI/BaseControllers/ViewController.swift +++ b/MVMCoreUI/BaseControllers/ViewController.swift @@ -440,7 +440,7 @@ import UIKit } } - // Override this method to avoid adding form params. + /// Override this method to avoid adding form params. open func addFormParams(_ requestParameters: MVMCoreRequestParameters) { formValidator?.addFormParams(requestParameters: requestParameters) }