From 71f1f499e07df833c28fbc951b1bb25b43745ffa Mon Sep 17 00:00:00 2001 From: "Christiano, Kevin" Date: Fri, 12 Apr 2019 12:23:55 -0400 Subject: [PATCH] optional check improvements. --- MVMCoreUI/Atoms/Views/Label.swift | 134 +++++++++++++++--------------- 1 file changed, 66 insertions(+), 68 deletions(-) diff --git a/MVMCoreUI/Atoms/Views/Label.swift b/MVMCoreUI/Atoms/Views/Label.swift index fb9fee06..75f21ce3 100644 --- a/MVMCoreUI/Atoms/Views/Label.swift +++ b/MVMCoreUI/Atoms/Views/Label.swift @@ -139,83 +139,81 @@ class Label: UILabel, MVMCoreViewProtocol, MVMCoreUIMoleculeViewProtocol { static func setLabel(_ label: UILabel?, withHTML html: String?) { - let data: Data? = html?.data(using: .utf8) + guard let data = html?.data(using: .utf8) else { return } - if let data = data { - do { - label?.attributedText = try NSAttributedString(data: data, - options: [NSAttributedString.DocumentReadingOptionKey.documentType:NSAttributedString.DocumentType.html, NSAttributedString.DocumentReadingOptionKey.characterEncoding: String.Encoding.utf8.rawValue], - documentAttributes: nil) - } catch { - MVMCoreUILoggingHandler.shared()?.addError(toLog: MVMCoreErrorObject.createErrorObject(for: error, location: "LabelHTMLParse")!) + do { + label?.attributedText = try NSAttributedString(data: data, + options: [NSAttributedString.DocumentReadingOptionKey.documentType:NSAttributedString.DocumentType.html, NSAttributedString.DocumentReadingOptionKey.characterEncoding: String.Encoding.utf8.rawValue], + documentAttributes: nil) + } catch { + if let coreErrorObject = MVMCoreErrorObject.createErrorObject(for: error, location: "LabelHTMLParse") { + MVMCoreUILoggingHandler.shared()?.addError(toLog: coreErrorObject) } } } static func setUILabel(_ label: UILabel?, withJSON json: [AnyHashable: Any]?, delegate: NSObject?, additionalData: [AnyHashable: Any]?) { - if let label = label { - label.text = json?.optionalStringForKey(KeyText) - setLabel(label, withHTML: json?.stringForkey("html")) - - if let textColorHex = json?.optionalStringForKey(KeyTextColor) { - label.textColor = UIColor.mfGet(forHex: textColorHex) - } - - if let backgroundColorHex = json?.optionalStringForKey(KeyBackgroundColor) { - label.backgroundColor = UIColor.mfGet(forHex: backgroundColorHex) - } - - if let accessibilityText = json?.optionalStringForKey("accessibilityText") { - label.accessibilityLabel = accessibilityText - } - - let fontSize = json?.floatForKey("fontSize") ?? 0.0 - - if let fontName = json?.optionalStringForKey("fontName") { - label.font = MFFonts.mfFont(withName: fontName, size: fontSize == 0.0 ? label.font.pointSize : CGFloat(fontSize)) - } else { - label.font = label.font.withSize(CGFloat(fontSize)) - } - - if let attributes = json?.arrayForKey("attributes"), let labelText = label.text { - let attributedString = NSMutableAttributedString(string: labelText, attributes: [NSAttributedString.Key.font: label.font as Any, - NSAttributedString.Key.foregroundColor: label.textColor as Any]) - for case let attribute as [String: Any] in attributes { - let range = NSRange(location: Int(attribute.floatForKey("location")), - length: Int(attribute.floatForKey("length"))) + guard let label = label else { return } + + label.text = json?.optionalStringForKey(KeyText) + setLabel(label, withHTML: json?.stringForkey("html")) + + if let textColorHex = json?.optionalStringForKey(KeyTextColor), !textColorHex.isEmpty { + label.textColor = UIColor.mfGet(forHex: textColorHex) + } + + if let backgroundColorHex = json?.optionalStringForKey(KeyBackgroundColor), !backgroundColorHex.isEmpty { + label.backgroundColor = UIColor.mfGet(forHex: backgroundColorHex) + } + + label.accessibilityLabel = json?.optionalStringForKey("accessibilityText") + + let fontSize = json?.floatForKey("fontSize") ?? 0.0 + + if let fontName = json?.optionalStringForKey("fontName") { + label.font = MFFonts.mfFont(withName: fontName, size: fontSize == 0.0 ? label.font.pointSize : CGFloat(fontSize)) + } else { + label.font = label.font.withSize(CGFloat(fontSize)) + } + + if let attributes = json?.arrayForKey("attributes"), let labelText = label.text { + let attributedString = NSMutableAttributedString(string: labelText, attributes: [NSAttributedString.Key.font: label.font as Any, + NSAttributedString.Key.foregroundColor: label.textColor as Any]) + for case let attribute as [String: Any] in attributes { + let range = NSRange(location: Int(attribute.floatForKey("location")), + length: Int(attribute.floatForKey("length"))) + + guard let attributeType = attribute.optionalStringForKey(KeyType) else { continue } + + switch attributeType { + case "underline": + attributedString.addAttribute(.underlineStyle, value: NSUnderlineStyle.single, range: range) - guard let attributeType = attribute.optionalStringForKey(KeyType) else { continue } + case "strikethrough": + attributedString.addAttribute(.strikethroughStyle, value: NSUnderlineStyle.thick, range: range) - switch attributeType { - case "underline": - attributedString.addAttribute(.underlineStyle, value: NSUnderlineStyle.single, range: range) - - case "strikethrough": - attributedString.addAttribute(.strikethroughStyle, value: NSUnderlineStyle.thick, range: range) - - case "color": - if let colorHex = attribute.optionalStringForKey(KeyTextColor), !colorHex.isEmpty { - attributedString.addAttribute(.foregroundColor, value: UIColor.mfGet(forHex: colorHex), range: range) - } - case "font": - let fontSize = attribute.floatForKey("size") - let font: UIFont? - - if let fontName = attribute.optionalStringForKey("name"), !fontName.isEmpty { - font = MFFonts.mfFont(withName: fontName, size: fontSize != 0.0 ? CGFloat(fontSize) : CGFloat(label.font.pointSize)) - } else { - font = label.font.withSize(CGFloat(fontSize)) - } - - attributedString.addAttribute(.font, value: font as Any, range: range) - - default: - continue + case "color": + if let colorHex = attribute.optionalStringForKey(KeyTextColor), !colorHex.isEmpty { + attributedString.addAttribute(.foregroundColor, value: UIColor.mfGet(forHex: colorHex), range: range) } + case "font": + let fontSize = attribute.floatForKey("size") + let font: UIFont? + + if let fontName = attribute.optionalStringForKey("name"), !fontName.isEmpty { + font = MFFonts.mfFont(withName: fontName, size: fontSize != 0.0 ? CGFloat(fontSize) : CGFloat(label.font.pointSize)) + } else { + font = label.font.withSize(CGFloat(fontSize)) + } + + attributedString.addAttribute(.font, value: font as Any, range: range) + + default: + continue } - label.attributedText = attributedString } + label.attributedText = attributedString } } @@ -310,8 +308,8 @@ class Label: UILabel, MVMCoreViewProtocol, MVMCoreUIMoleculeViewProtocol { originalAttributedString = attributedText - if let actionText = dictionary["actionText"] as? String { - self.actionText = actionText - } +// if let actionText = dictionary["actionText"] as? String { +// self.actionText = actionText +// } } }