// // MetaText.swift // Mastodon // // Created by MainasuK Cirno on 2021-7-22. // import UIKit import Meta import MetaTextKit import MastodonAsset extension MetaLabel { public enum Style { case statusHeader case statusName case statusUsername case statusSpoiler case notificationTitle case profileFieldName case profileFieldValue case recommendAccountName case titleView case settingTableFooter case autoCompletion case accountListName case accountListUsername case sidebarHeadline(isSelected: Bool) case sidebarSubheadline(isSelected: Bool) } public convenience init(style: Style) { self.init() layer.masksToBounds = true lineBreakMode = .byTruncatingTail textContainer.lineBreakMode = .byTruncatingTail textContainer.lineFragmentPadding = 0 setup(style: style) } public func setup(style: Style) { let font: UIFont let textColor: UIColor switch style { case .statusHeader: font = UIFontMetrics(forTextStyle: .footnote).scaledFont(for: .systemFont(ofSize: 13, weight: .bold)) textColor = Asset.Colors.Label.secondary.color case .statusName: font = UIFontMetrics(forTextStyle: .headline).scaledFont(for: .systemFont(ofSize: 15, weight: .bold)) textColor = Asset.Colors.Label.primary.color case .statusUsername: font = UIFontMetrics(forTextStyle: .headline).scaledFont(for: .systemFont(ofSize: 15, weight: .regular)) textColor = Asset.Colors.Label.secondary.color case .statusSpoiler: font = UIFontMetrics(forTextStyle: .headline).scaledFont(for: .systemFont(ofSize: 17, weight: .regular)) textColor = Asset.Colors.Label.secondary.color textAlignment = .center paragraphStyle.alignment = .center case .notificationTitle: font = UIFontMetrics(forTextStyle: .headline).scaledFont(for: .systemFont(ofSize: 14, weight: .regular)) textColor = Asset.Colors.Label.secondary.color case .profileFieldName: font = UIFontMetrics(forTextStyle: .headline).scaledFont(for: .systemFont(ofSize: 13, weight: .semibold)) textColor = Asset.Colors.Label.secondary.color case .profileFieldValue: font = UIFontMetrics(forTextStyle: .headline).scaledFont(for: .systemFont(ofSize: 17, weight: .regular)) textColor = Asset.Colors.Label.primary.color case .titleView: font = .systemFont(ofSize: 17, weight: .semibold) textColor = Asset.Colors.Label.primary.color textAlignment = .center paragraphStyle.alignment = .center case .recommendAccountName: font = .systemFont(ofSize: 18, weight: .semibold) textColor = .white case .settingTableFooter: font = .preferredFont(forTextStyle: .footnote) textColor = Asset.Colors.Label.secondary.color numberOfLines = 0 textContainer.maximumNumberOfLines = 0 paragraphStyle.alignment = .center case .autoCompletion: font = UIFontMetrics(forTextStyle: .headline).scaledFont(for: .systemFont(ofSize: 17, weight: .semibold), maximumPointSize: 22) textColor = Asset.Colors.brandBlue.color case .accountListName: font = UIFontMetrics(forTextStyle: .headline).scaledFont(for: .systemFont(ofSize: 17, weight: .regular), maximumPointSize: 22) textColor = Asset.Colors.Label.primary.color case .accountListUsername: font = UIFontMetrics(forTextStyle: .headline).scaledFont(for: .systemFont(ofSize: 15, weight: .regular), maximumPointSize: 20) textColor = Asset.Colors.Label.secondary.color case .sidebarHeadline(let isSelected): font = UIFontMetrics(forTextStyle: .headline).scaledFont(for: .systemFont(ofSize: 22, weight: .regular), maximumPointSize: 20) textColor = isSelected ? .white : Asset.Colors.Label.primary.color case .sidebarSubheadline(let isSelected): font = UIFontMetrics(forTextStyle: .headline).scaledFont(for: .systemFont(ofSize: 13, weight: .regular), maximumPointSize: 18) textColor = isSelected ? .white : Asset.Colors.Label.secondary.color } self.font = font self.textColor = textColor textAttributes = [ .font: font, .foregroundColor: textColor ] linkAttributes = [ .font: font, .foregroundColor: Asset.Colors.brandBlue.color ] } }