Merge branch 'feature/vds_header_mapping' into 'develop'
Digital PCT265 story ONEAPP-6389 - Button group size updates, title lockup... ### Summary Sizing fixes for templates when using button group and font updates. ### JIRA Ticket https://onejira.verizon.com/browse/ONEAPP-6389 Co-authored-by: Scott Pfeil <Scott.Pfeil3@verizonwireless.com> See merge request https://gitlab.verizon.com/BPHV_MIPS/mvm_core_ui/-/merge_requests/1073
This commit is contained in:
commit
2505559444
@ -9,17 +9,23 @@
|
||||
import Foundation
|
||||
import UIKit
|
||||
import VDS
|
||||
import Combine
|
||||
|
||||
@objcMembers open class ButtonGroup: VDS.ButtonGroup, VDSMoleculeViewProtocol {
|
||||
open class ButtonGroup: VDS.ButtonGroup, VDSMoleculeViewProtocol {
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Properties
|
||||
//--------------------------------------------------
|
||||
public var model: MoleculeModelProtocol?
|
||||
open var viewModel: ButtonGroupModel!
|
||||
open var delegateObject: MVMCoreUIDelegateObject?
|
||||
open var additionalData: [AnyHashable : Any]?
|
||||
open var previousModel: ButtonGroupModel?
|
||||
|
||||
/// For notifying the delegate of layout updates.
|
||||
private var contentSizeObservation: Cancellable?
|
||||
private var previousSize: CGSize?
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - MoleculeViewProtocol
|
||||
//--------------------------------------------------
|
||||
@ -74,6 +80,15 @@ import VDS
|
||||
// force redraw
|
||||
setNeedsUpdate()
|
||||
}
|
||||
|
||||
// Notify the delegate of a size change.
|
||||
previousSize = bounds.size
|
||||
contentSizeObservation = contentSizePublisher.sink { [weak self] size in
|
||||
guard let self = self,
|
||||
!MVMCoreGetterUtility.fequal(a: Float(size.height), b: Float(self.previousSize?.height ?? Self.estimatedHeight(with: self.viewModel, self.delegateObject) ?? VDS.Button.Size.large.height)) else { return }
|
||||
self.previousSize = size
|
||||
self.delegateObject?.moleculeDelegate?.moleculeLayoutUpdated(self)
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
|
||||
@ -21,10 +21,10 @@ extension Styler.Font {
|
||||
case .TitleXLarge: actualFont = .RegularTitleXLarge
|
||||
case .H1: actualFont = .RegularTitle2XLarge
|
||||
case .H32: actualFont = .RegularTitleXLarge
|
||||
case .H2: actualFont = .RegularTitleLarge
|
||||
case .H2: actualFont = .RegularTitleXLarge
|
||||
case .B20: actualFont = .RegularBodyLarge
|
||||
case .H3: actualFont = .BoldTitleMedium
|
||||
case .B1: actualFont = .BoldBodySmall
|
||||
case .B1: actualFont = .RegularTitleSmall
|
||||
case .B2: actualFont = .RegularBodySmall
|
||||
case .B3: actualFont = .RegularMicro
|
||||
default: break
|
||||
|
||||
@ -8,14 +8,14 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
@objcMembers open class HeadersH1Button: HeaderView {
|
||||
open class HeadersH1Button: HeaderView {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Outlets
|
||||
//--------------------------------------------------
|
||||
public let headlineBody = HeadlineBody()
|
||||
public let titleLockup = TitleLockup()
|
||||
public let buttons = TwoButtonView()
|
||||
public lazy var stack: Stack<StackModel> = {
|
||||
Stack<StackModel>.createStack(with: [headlineBody, buttons], spacing: Padding.Eighteen)
|
||||
Stack<StackModel>.createStack(with: [titleLockup, buttons], spacing: Padding.Eighteen)
|
||||
}()
|
||||
|
||||
//-------------------------------------------------------
|
||||
@ -23,7 +23,6 @@ import Foundation
|
||||
//-------------------------------------------------------
|
||||
open override func setupView() {
|
||||
super.setupView()
|
||||
headlineBody.styleLandingPageHeader()
|
||||
addMolecule(stack)
|
||||
stack.restack()
|
||||
}
|
||||
@ -35,14 +34,9 @@ import Foundation
|
||||
super.set(with: model, delegateObject, additionalData)
|
||||
guard let model = model as? HeadersH1ButtonModel else { return }
|
||||
|
||||
headlineBody.set(with: model.headlineBody, delegateObject, additionalData)
|
||||
titleLockup.set(with: model.titleLockup, delegateObject, additionalData)
|
||||
buttons.set(with: model.buttons, delegateObject, additionalData)
|
||||
}
|
||||
|
||||
open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { 121 }
|
||||
|
||||
open override func reset() {
|
||||
super.reset()
|
||||
headlineBody.styleLandingPageHeader()
|
||||
}
|
||||
}
|
||||
|
||||
@ -13,15 +13,16 @@ public class HeadersH1ButtonModel: HeaderModel, MoleculeModelProtocol, ParentMol
|
||||
// MARK: - Properties
|
||||
//--------------------------------------------------
|
||||
public static var identifier: String = "headerH1Btn"
|
||||
public var headlineBody: HeadlineBodyModel
|
||||
public var titleLockup: TitleLockupModel
|
||||
public var buttons: TwoButtonViewModel
|
||||
|
||||
private var helper = DeprecatedHeadlineBodyHelper()
|
||||
|
||||
public var children: [MoleculeModelProtocol] {
|
||||
[headlineBody, buttons]
|
||||
[titleLockup, buttons]
|
||||
}
|
||||
|
||||
public func replaceChildMolecule(with molecule: MoleculeModelProtocol) throws -> Bool {
|
||||
return try replaceChildMolecule(at: &headlineBody, with: molecule)
|
||||
return try replaceChildMolecule(at: &titleLockup, with: molecule)
|
||||
|| replaceChildMolecule(at: &buttons, with: molecule)
|
||||
}
|
||||
|
||||
@ -29,8 +30,8 @@ public class HeadersH1ButtonModel: HeaderModel, MoleculeModelProtocol, ParentMol
|
||||
// MARK: - Initializer
|
||||
//--------------------------------------------------
|
||||
|
||||
public init(headlineBody: HeadlineBodyModel, buttons: TwoButtonViewModel) {
|
||||
self.headlineBody = headlineBody
|
||||
public init(titleLockup: TitleLockupModel, buttons: TwoButtonViewModel) {
|
||||
self.titleLockup = titleLockup
|
||||
self.buttons = buttons
|
||||
super.init()
|
||||
}
|
||||
@ -40,10 +41,13 @@ public class HeadersH1ButtonModel: HeaderModel, MoleculeModelProtocol, ParentMol
|
||||
//--------------------------------------------------
|
||||
|
||||
public override func setDefaults() {
|
||||
if headlineBody.headline?.accessibilityTraits == nil {
|
||||
headlineBody.headline?.accessibilityTraits = .header
|
||||
}
|
||||
super.setDefaults()
|
||||
if titleLockup.title.fontStyle == nil {
|
||||
titleLockup.title.fontStyle = Styler.Font.RegularTitle2XLarge
|
||||
}
|
||||
if titleLockup.subTitle?.fontStyle == nil {
|
||||
titleLockup.subTitle?.fontStyle = Styler.Font.RegularTitleMedium
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
@ -52,7 +56,7 @@ public class HeadersH1ButtonModel: HeaderModel, MoleculeModelProtocol, ParentMol
|
||||
|
||||
private enum CodingKeys: String, CodingKey {
|
||||
case moleculeName
|
||||
case headlineBody
|
||||
case titleLockup
|
||||
case buttons
|
||||
}
|
||||
|
||||
@ -61,7 +65,7 @@ public class HeadersH1ButtonModel: HeaderModel, MoleculeModelProtocol, ParentMol
|
||||
//--------------------------------------------------
|
||||
required public init(from decoder: Decoder) throws {
|
||||
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
|
||||
headlineBody = try typeContainer.decode(HeadlineBodyModel.self, forKey: .headlineBody)
|
||||
titleLockup = try helper.deprecatedCreate(from: decoder) ?? typeContainer.decodeMolecule(codingKey: .titleLockup)
|
||||
buttons = try typeContainer.decode(TwoButtonViewModel.self, forKey: .buttons)
|
||||
try super.init(from: decoder)
|
||||
}
|
||||
@ -70,7 +74,8 @@ public class HeadersH1ButtonModel: HeaderModel, MoleculeModelProtocol, ParentMol
|
||||
try super.encode(to: encoder)
|
||||
var container = encoder.container(keyedBy: CodingKeys.self)
|
||||
try container.encode(moleculeName, forKey: .moleculeName)
|
||||
try container.encode(headlineBody, forKey: .headlineBody)
|
||||
try container.encode(buttons, forKey: .buttons)
|
||||
guard try !helper.deprecatedEncode(to: encoder) else { return }
|
||||
try container.encode(titleLockup, forKey: .titleLockup)
|
||||
}
|
||||
}
|
||||
|
||||
@ -8,20 +8,19 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
@objcMembers open class HeadersH1NoButtonsBodyText: HeaderView {
|
||||
open class HeadersH1NoButtonsBodyText: HeaderView {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Outlets
|
||||
//--------------------------------------------------
|
||||
|
||||
public let headlineBody = HeadlineBody()
|
||||
public let titleLockup = TitleLockup()
|
||||
|
||||
//-------------------------------------------------------
|
||||
// MARK: - View Lifecycle
|
||||
//-------------------------------------------------------
|
||||
open override func setupView() {
|
||||
super.setupView()
|
||||
headlineBody.styleLandingPageHeader()
|
||||
addMolecule(headlineBody)
|
||||
addMolecule(titleLockup)
|
||||
}
|
||||
|
||||
//----------------------------------------------------
|
||||
@ -31,13 +30,8 @@ import Foundation
|
||||
open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
|
||||
super.set(with: model, delegateObject, additionalData)
|
||||
guard let model = model as? HeadersH1NoButtonsBodyTextModel else { return }
|
||||
headlineBody.set(with: model.headlineBody, delegateObject, additionalData)
|
||||
titleLockup.set(with: model.titleLockup, delegateObject, additionalData)
|
||||
}
|
||||
|
||||
open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { 121 }
|
||||
|
||||
open override func reset() {
|
||||
super.reset()
|
||||
headlineBody.styleLandingPageHeader()
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,50 +6,48 @@
|
||||
// Copyright © 2020 Verizon Wireless. All rights reserved.
|
||||
//
|
||||
|
||||
|
||||
|
||||
public class HeadersH1NoButtonsBodyTextModel: HeaderModel, MoleculeModelProtocol, ParentMoleculeModelProtocol {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Properties
|
||||
//--------------------------------------------------
|
||||
|
||||
public static var identifier: String = "headerH1"
|
||||
public var headlineBody: HeadlineBodyModel
|
||||
public var titleLockup: TitleLockupModel
|
||||
private var helper = DeprecatedHeadlineBodyHelper()
|
||||
|
||||
public var children: [MoleculeModelProtocol] {
|
||||
[headlineBody]
|
||||
[titleLockup]
|
||||
}
|
||||
|
||||
public func replaceChildMolecule(with molecule: MoleculeModelProtocol) throws -> Bool {
|
||||
return try replaceChildMolecule(at: &headlineBody, with: molecule)
|
||||
return try replaceChildMolecule(at: &titleLockup, with: molecule)
|
||||
}
|
||||
|
||||
public override func setDefaults() {
|
||||
super.setDefaults()
|
||||
if titleLockup.title.fontStyle == nil {
|
||||
titleLockup.title.fontStyle = Styler.Font.RegularTitle2XLarge
|
||||
}
|
||||
if titleLockup.subTitle?.fontStyle == nil {
|
||||
titleLockup.subTitle?.fontStyle = Styler.Font.RegularTitleMedium
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Initializer
|
||||
//--------------------------------------------------
|
||||
|
||||
public init(headlineBody: HeadlineBodyModel) {
|
||||
self.headlineBody = headlineBody
|
||||
public init(titleLockup: TitleLockupModel) {
|
||||
self.titleLockup = titleLockup
|
||||
super.init()
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Subclass
|
||||
//--------------------------------------------------
|
||||
|
||||
public override func setDefaults() {
|
||||
if headlineBody.headline?.accessibilityTraits == nil {
|
||||
headlineBody.headline?.accessibilityTraits = .header
|
||||
}
|
||||
super.setDefaults()
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Keys
|
||||
//--------------------------------------------------
|
||||
private enum CodingKeys: String, CodingKey {
|
||||
case moleculeName
|
||||
case headlineBody
|
||||
case titleLockup
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
@ -57,7 +55,7 @@ public class HeadersH1NoButtonsBodyTextModel: HeaderModel, MoleculeModelProtocol
|
||||
//--------------------------------------------------
|
||||
required public init(from decoder: Decoder) throws {
|
||||
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
|
||||
headlineBody = try typeContainer.decode(HeadlineBodyModel.self, forKey: .headlineBody)
|
||||
titleLockup = try helper.deprecatedCreate(from: decoder) ?? typeContainer.decodeMolecule(codingKey: .titleLockup)
|
||||
try super.init(from: decoder)
|
||||
}
|
||||
|
||||
@ -65,6 +63,55 @@ public class HeadersH1NoButtonsBodyTextModel: HeaderModel, MoleculeModelProtocol
|
||||
try super.encode(to: encoder)
|
||||
var container = encoder.container(keyedBy: CodingKeys.self)
|
||||
try container.encode(moleculeName, forKey: .moleculeName)
|
||||
try container.encode(headlineBody, forKey: .headlineBody)
|
||||
guard try !helper.deprecatedEncode(to: encoder) else { return }
|
||||
try container.encode(titleLockup, forKey: .titleLockup)
|
||||
}
|
||||
}
|
||||
|
||||
public struct DeprecatedHeadlineBodyHelper {
|
||||
var headlineBody: HeadlineBodyModel?
|
||||
|
||||
private enum DeprecatedCodingKeys: String, CodingKey {
|
||||
case headlineBody
|
||||
}
|
||||
|
||||
public mutating func deprecatedCreate(from decoder: Decoder) throws -> TitleLockupModel? {
|
||||
let typeContainer = try decoder.container(keyedBy: DeprecatedCodingKeys.self)
|
||||
headlineBody = try typeContainer.decodeIfPresent(HeadlineBodyModel.self, forKey: .headlineBody)
|
||||
guard let headlineBody = headlineBody else { return nil }
|
||||
return try createTitleLockupModel(headlineBody: headlineBody)
|
||||
}
|
||||
|
||||
public func deprecatedEncode(to encoder: Encoder) throws -> Bool {
|
||||
guard let headlineBody = headlineBody else { return false }
|
||||
var container = encoder.container(keyedBy: DeprecatedCodingKeys.self)
|
||||
try container.encode(headlineBody, forKey: DeprecatedCodingKeys.headlineBody)
|
||||
return true
|
||||
}
|
||||
|
||||
public func createTitleLockupModel(defaultStyle: HeadlineBodyModel.Style = .header, headlineBody: HeadlineBodyModel) throws -> TitleLockupModel {
|
||||
guard let headline = headlineBody.headline else { throw ModelRegistry.Error.decoderOther(message: "headline is required for this use case.") }
|
||||
var body = headlineBody.body
|
||||
switch headlineBody.style ?? defaultStyle {
|
||||
case .landingHeader:
|
||||
headline.fontStyle = Styler.Font.RegularTitle2XLarge
|
||||
body?.fontStyle = Styler.Font.RegularTitleMedium
|
||||
case .itemHeader:
|
||||
headline.fontStyle = Styler.Font.BoldTitleLarge
|
||||
body?.fontStyle = Styler.Font.RegularBodyLarge
|
||||
default:
|
||||
headline.fontStyle = Styler.Font.RegularTitleXLarge
|
||||
body?.fontStyle = Styler.Font.RegularTitleMedium
|
||||
}
|
||||
let model = try TitleLockupModel(title: headline, subTitle: body)
|
||||
model.id = headlineBody.id
|
||||
return model
|
||||
}
|
||||
|
||||
public func createHeadlineBodyModel(titleLockup: TitleLockupModel) -> HeadlineBodyModel {
|
||||
var headlineBody = HeadlineBodyModel(headline: titleLockup.title)
|
||||
headlineBody.body = titleLockup.subTitle
|
||||
headlineBody.id = titleLockup.id
|
||||
return headlineBody
|
||||
}
|
||||
}
|
||||
|
||||
@ -9,15 +9,15 @@
|
||||
import Foundation
|
||||
|
||||
|
||||
@objcMembers open class HeadersH2Buttons: HeaderView {
|
||||
open class HeadersH2Buttons: HeaderView {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Outlets
|
||||
//--------------------------------------------------
|
||||
|
||||
public let headlineBody = HeadlineBody()
|
||||
public let titleLockup = TitleLockup()
|
||||
public let buttons = TwoButtonView()
|
||||
public lazy var stack: Stack<StackModel> = {
|
||||
return Stack<StackModel>.createStack(with: [headlineBody, buttons], spacing: PaddingDefaultVerticalSpacing3)
|
||||
return Stack<StackModel>.createStack(with: [titleLockup, buttons], spacing: PaddingDefaultVerticalSpacing3)
|
||||
}()
|
||||
|
||||
//-------------------------------------------------------
|
||||
@ -26,7 +26,6 @@ import Foundation
|
||||
|
||||
open override func setupView() {
|
||||
super.setupView()
|
||||
headlineBody.stylePageHeader()
|
||||
addMolecule(stack)
|
||||
stack.restack()
|
||||
}
|
||||
@ -40,16 +39,11 @@ import Foundation
|
||||
|
||||
guard let model = model as? HeadersH2ButtonsModel else { return }
|
||||
|
||||
headlineBody.set(with: model.headlineBody, delegateObject, additionalData)
|
||||
titleLockup.set(with: model.titleLockup, delegateObject, additionalData)
|
||||
buttons.set(with: model.buttons, delegateObject, additionalData)
|
||||
}
|
||||
|
||||
open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
|
||||
return 121
|
||||
}
|
||||
|
||||
open override func reset() {
|
||||
super.reset()
|
||||
headlineBody.stylePageHeader()
|
||||
}
|
||||
}
|
||||
|
||||
@ -15,15 +15,16 @@ public class HeadersH2ButtonsModel: HeaderModel, MoleculeModelProtocol, ParentMo
|
||||
//--------------------------------------------------
|
||||
|
||||
public static var identifier: String = "headerH2Btns"
|
||||
public var headlineBody: HeadlineBodyModel
|
||||
public var titleLockup: TitleLockupModel
|
||||
public var buttons: TwoButtonViewModel
|
||||
private var helper = DeprecatedHeadlineBodyHelper()
|
||||
|
||||
public var children: [MoleculeModelProtocol] {
|
||||
[headlineBody, buttons]
|
||||
[titleLockup, buttons]
|
||||
}
|
||||
|
||||
public func replaceChildMolecule(with molecule: MoleculeModelProtocol) throws -> Bool {
|
||||
return try replaceChildMolecule(at: &headlineBody, with: molecule)
|
||||
return try replaceChildMolecule(at: &titleLockup, with: molecule)
|
||||
|| replaceChildMolecule(at: &buttons, with: molecule)
|
||||
}
|
||||
|
||||
@ -31,8 +32,8 @@ public class HeadersH2ButtonsModel: HeaderModel, MoleculeModelProtocol, ParentMo
|
||||
// MARK: - Initializer
|
||||
//--------------------------------------------------
|
||||
|
||||
public init(headlineBody: HeadlineBodyModel, buttons: TwoButtonViewModel) {
|
||||
self.headlineBody = headlineBody
|
||||
public init(titleLockup: TitleLockupModel, buttons: TwoButtonViewModel) {
|
||||
self.titleLockup = titleLockup
|
||||
self.buttons = buttons
|
||||
super.init()
|
||||
}
|
||||
@ -48,8 +49,11 @@ public class HeadersH2ButtonsModel: HeaderModel, MoleculeModelProtocol, ParentMo
|
||||
if bottomPadding == nil {
|
||||
bottomPadding = Padding.Component.VerticalMarginSpacing
|
||||
}
|
||||
if headlineBody.headline?.accessibilityTraits == nil {
|
||||
headlineBody.headline?.accessibilityTraits = .header
|
||||
if titleLockup.title.fontStyle == nil {
|
||||
titleLockup.title.fontStyle = Styler.Font.RegularTitleXLarge
|
||||
}
|
||||
if titleLockup.subTitle?.fontStyle == nil {
|
||||
titleLockup.subTitle?.fontStyle = Styler.Font.RegularTitleMedium
|
||||
}
|
||||
super.setDefaults()
|
||||
}
|
||||
@ -60,7 +64,7 @@ public class HeadersH2ButtonsModel: HeaderModel, MoleculeModelProtocol, ParentMo
|
||||
|
||||
private enum CodingKeys: String, CodingKey {
|
||||
case moleculeName
|
||||
case headlineBody
|
||||
case titleLockup
|
||||
case buttons
|
||||
}
|
||||
|
||||
@ -70,7 +74,7 @@ public class HeadersH2ButtonsModel: HeaderModel, MoleculeModelProtocol, ParentMo
|
||||
|
||||
required public init(from decoder: Decoder) throws {
|
||||
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
|
||||
headlineBody = try typeContainer.decode(HeadlineBodyModel.self, forKey: .headlineBody)
|
||||
titleLockup = try typeContainer.decodeMolecule(codingKey: .titleLockup)
|
||||
buttons = try typeContainer.decode(TwoButtonViewModel.self, forKey: .buttons)
|
||||
try super.init(from: decoder)
|
||||
}
|
||||
@ -79,7 +83,8 @@ public class HeadersH2ButtonsModel: HeaderModel, MoleculeModelProtocol, ParentMo
|
||||
try super.encode(to: encoder)
|
||||
var container = encoder.container(keyedBy: CodingKeys.self)
|
||||
try container.encode(moleculeName, forKey: .moleculeName)
|
||||
try container.encode(headlineBody, forKey: .headlineBody)
|
||||
try container.encode(buttons, forKey: .buttons)
|
||||
guard try !helper.deprecatedEncode(to: encoder) else { return }
|
||||
try container.encode(titleLockup, forKey: .titleLockup)
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,14 +7,14 @@
|
||||
//
|
||||
|
||||
import Foundation
|
||||
@objcMembers open class HeadersH2CaretLink: HeaderView {
|
||||
open class HeadersH2CaretLink: HeaderView {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Outlets
|
||||
//--------------------------------------------------
|
||||
public let headlineBody = HeadlineBody()
|
||||
public let titleLockup = TitleLockup()
|
||||
public let caretLink = CaretLink()
|
||||
public lazy var stack: Stack<StackModel> = {
|
||||
return Stack<StackModel>.createStack(with: [headlineBody, caretLink])
|
||||
return Stack<StackModel>.createStack(with: [titleLockup, caretLink])
|
||||
}()
|
||||
|
||||
//-------------------------------------------------------
|
||||
@ -22,7 +22,6 @@ import Foundation
|
||||
//-------------------------------------------------------
|
||||
open override func setupView() {
|
||||
super.setupView()
|
||||
headlineBody.stylePageHeader()
|
||||
addMolecule(stack)
|
||||
stack.restack()
|
||||
}
|
||||
@ -33,16 +32,11 @@ import Foundation
|
||||
open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
|
||||
super.set(with: model, delegateObject, additionalData)
|
||||
guard let model = model as? HeadersH2CaretLinkModel else { return }
|
||||
headlineBody.set(with: model.headlineBody, delegateObject, additionalData)
|
||||
titleLockup.set(with: model.titleLockup, delegateObject, additionalData)
|
||||
caretLink.set(with: model.caretLink, delegateObject, additionalData)
|
||||
}
|
||||
|
||||
open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
|
||||
return 121
|
||||
}
|
||||
|
||||
open override func reset() {
|
||||
super.reset()
|
||||
headlineBody.stylePageHeader()
|
||||
}
|
||||
}
|
||||
|
||||
@ -12,23 +12,24 @@ public class HeadersH2CaretLinkModel: HeaderModel, MoleculeModelProtocol, Parent
|
||||
// MARK: - Properties
|
||||
//--------------------------------------------------
|
||||
public static var identifier: String = "headerH2CrtBtn"
|
||||
public var headlineBody: HeadlineBodyModel
|
||||
public var titleLockup: TitleLockupModel
|
||||
public var caretLink: CaretLinkModel
|
||||
private var helper = DeprecatedHeadlineBodyHelper()
|
||||
|
||||
public var children: [MoleculeModelProtocol] {
|
||||
[headlineBody, caretLink]
|
||||
[titleLockup, caretLink]
|
||||
}
|
||||
|
||||
public func replaceChildMolecule(with molecule: MoleculeModelProtocol) throws -> Bool {
|
||||
return try replaceChildMolecule(at: &headlineBody, with: molecule)
|
||||
return try replaceChildMolecule(at: &titleLockup, with: molecule)
|
||||
|| replaceChildMolecule(at: &caretLink, with: molecule)
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Initializer
|
||||
//--------------------------------------------------
|
||||
public init(headlineBody: HeadlineBodyModel, caretLink: CaretLinkModel) {
|
||||
self.headlineBody = headlineBody
|
||||
public init(titleLockup: TitleLockupModel, caretLink: CaretLinkModel) {
|
||||
self.titleLockup = titleLockup
|
||||
self.caretLink = caretLink
|
||||
super.init()
|
||||
}
|
||||
@ -43,8 +44,11 @@ public class HeadersH2CaretLinkModel: HeaderModel, MoleculeModelProtocol, Parent
|
||||
if bottomPadding == nil {
|
||||
bottomPadding = Padding.Component.VerticalMarginSpacing
|
||||
}
|
||||
if headlineBody.headline?.accessibilityTraits == nil {
|
||||
headlineBody.headline?.accessibilityTraits = .header
|
||||
if titleLockup.title.fontStyle == nil {
|
||||
titleLockup.title.fontStyle = Styler.Font.RegularTitleXLarge
|
||||
}
|
||||
if titleLockup.subTitle?.fontStyle == nil {
|
||||
titleLockup.subTitle?.fontStyle = Styler.Font.RegularTitleMedium
|
||||
}
|
||||
super.setDefaults()
|
||||
}
|
||||
@ -54,7 +58,7 @@ public class HeadersH2CaretLinkModel: HeaderModel, MoleculeModelProtocol, Parent
|
||||
//--------------------------------------------------
|
||||
private enum CodingKeys: String, CodingKey {
|
||||
case moleculeName
|
||||
case headlineBody
|
||||
case titleLockup
|
||||
case caretLink
|
||||
}
|
||||
|
||||
@ -63,7 +67,7 @@ public class HeadersH2CaretLinkModel: HeaderModel, MoleculeModelProtocol, Parent
|
||||
//--------------------------------------------------
|
||||
required public init(from decoder: Decoder) throws {
|
||||
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
|
||||
headlineBody = try typeContainer.decode(HeadlineBodyModel.self, forKey: .headlineBody)
|
||||
titleLockup = try typeContainer.decodeMolecule(codingKey: .titleLockup)
|
||||
caretLink = try typeContainer.decode(CaretLinkModel.self, forKey: .caretLink)
|
||||
try super.init(from: decoder)
|
||||
}
|
||||
@ -72,7 +76,8 @@ public class HeadersH2CaretLinkModel: HeaderModel, MoleculeModelProtocol, Parent
|
||||
try super.encode(to: encoder)
|
||||
var container = encoder.container(keyedBy: CodingKeys.self)
|
||||
try container.encode(moleculeName, forKey: .moleculeName)
|
||||
try container.encode(headlineBody, forKey: .headlineBody)
|
||||
try container.encode(caretLink, forKey: .caretLink)
|
||||
guard try !helper.deprecatedEncode(to: encoder) else { return }
|
||||
try container.encode(titleLockup, forKey: .titleLockup)
|
||||
}
|
||||
}
|
||||
|
||||
@ -8,14 +8,14 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
@objcMembers open class HeadersH2Link: HeaderView {
|
||||
open class HeadersH2Link: HeaderView {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Outlets
|
||||
//--------------------------------------------------
|
||||
public let headlineBody = HeadlineBody()
|
||||
public let titleLockup = TitleLockup()
|
||||
public let link = Link()
|
||||
public lazy var stack: Stack<StackModel> = {
|
||||
return Stack<StackModel>.createStack(with: [headlineBody, link])
|
||||
return Stack<StackModel>.createStack(with: [titleLockup, link])
|
||||
}()
|
||||
|
||||
//-------------------------------------------------------
|
||||
@ -23,7 +23,6 @@ import Foundation
|
||||
//-------------------------------------------------------
|
||||
open override func setupView() {
|
||||
super.setupView()
|
||||
headlineBody.stylePageHeader()
|
||||
addMolecule(stack)
|
||||
stack.restack()
|
||||
}
|
||||
@ -34,16 +33,11 @@ import Foundation
|
||||
open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
|
||||
super.set(with: model, delegateObject, additionalData)
|
||||
guard let model = model as? HeadersH2LinkModel else { return }
|
||||
headlineBody.set(with: model.headlineBody, delegateObject, additionalData)
|
||||
titleLockup.set(with: model.titleLockup, delegateObject, additionalData)
|
||||
link.set(with: model.link, delegateObject, additionalData)
|
||||
}
|
||||
|
||||
open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
|
||||
return 121
|
||||
}
|
||||
|
||||
open override func reset() {
|
||||
super.reset()
|
||||
headlineBody.stylePageHeader()
|
||||
}
|
||||
}
|
||||
|
||||
@ -14,15 +14,16 @@ public class HeadersH2LinkModel: HeaderModel, MoleculeModelProtocol, ParentMolec
|
||||
//--------------------------------------------------
|
||||
|
||||
public static var identifier: String = "headerH2Link"
|
||||
public var headlineBody: HeadlineBodyModel
|
||||
public var titleLockup: TitleLockupModel
|
||||
public var link: LinkModel
|
||||
private var helper = DeprecatedHeadlineBodyHelper()
|
||||
|
||||
public var children: [MoleculeModelProtocol] {
|
||||
[headlineBody, link]
|
||||
[titleLockup, link]
|
||||
}
|
||||
|
||||
public func replaceChildMolecule(with molecule: MoleculeModelProtocol) throws -> Bool {
|
||||
return try replaceChildMolecule(at: &headlineBody, with: molecule)
|
||||
return try replaceChildMolecule(at: &titleLockup, with: molecule)
|
||||
|| replaceChildMolecule(at: &link, with: molecule)
|
||||
}
|
||||
|
||||
@ -30,8 +31,8 @@ public class HeadersH2LinkModel: HeaderModel, MoleculeModelProtocol, ParentMolec
|
||||
// MARK: - Initializer
|
||||
//--------------------------------------------------
|
||||
|
||||
public init(headlineBody: HeadlineBodyModel, link: LinkModel) {
|
||||
self.headlineBody = headlineBody
|
||||
public init(titleLockup: TitleLockupModel, link: LinkModel) {
|
||||
self.titleLockup = titleLockup
|
||||
self.link = link
|
||||
super.init()
|
||||
}
|
||||
@ -47,8 +48,11 @@ public class HeadersH2LinkModel: HeaderModel, MoleculeModelProtocol, ParentMolec
|
||||
if bottomPadding == nil {
|
||||
bottomPadding = Padding.Component.VerticalMarginSpacing
|
||||
}
|
||||
if headlineBody.headline?.accessibilityTraits == nil {
|
||||
headlineBody.headline?.accessibilityTraits = .header
|
||||
if titleLockup.title.fontStyle == nil {
|
||||
titleLockup.title.fontStyle = Styler.Font.RegularTitleXLarge
|
||||
}
|
||||
if titleLockup.subTitle?.fontStyle == nil {
|
||||
titleLockup.subTitle?.fontStyle = Styler.Font.RegularTitleMedium
|
||||
}
|
||||
super.setDefaults()
|
||||
}
|
||||
@ -59,7 +63,7 @@ public class HeadersH2LinkModel: HeaderModel, MoleculeModelProtocol, ParentMolec
|
||||
|
||||
private enum CodingKeys: String, CodingKey {
|
||||
case moleculeName
|
||||
case headlineBody
|
||||
case titleLockup
|
||||
case link
|
||||
}
|
||||
|
||||
@ -69,7 +73,7 @@ public class HeadersH2LinkModel: HeaderModel, MoleculeModelProtocol, ParentMolec
|
||||
|
||||
required public init(from decoder: Decoder) throws {
|
||||
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
|
||||
headlineBody = try typeContainer.decode(HeadlineBodyModel.self, forKey: .headlineBody)
|
||||
titleLockup = try typeContainer.decodeMolecule(codingKey: .titleLockup)
|
||||
link = try typeContainer.decode(LinkModel.self, forKey: .link)
|
||||
try super.init(from: decoder)
|
||||
}
|
||||
@ -78,7 +82,8 @@ public class HeadersH2LinkModel: HeaderModel, MoleculeModelProtocol, ParentMolec
|
||||
try super.encode(to: encoder)
|
||||
var container = encoder.container(keyedBy: CodingKeys.self)
|
||||
try container.encode(moleculeName, forKey: .moleculeName)
|
||||
try container.encode(headlineBody, forKey: .headlineBody)
|
||||
try container.encode(link, forKey: .link)
|
||||
guard try !helper.deprecatedEncode(to: encoder) else { return }
|
||||
try container.encode(titleLockup, forKey: .titleLockup)
|
||||
}
|
||||
}
|
||||
|
||||
@ -9,12 +9,12 @@
|
||||
import Foundation
|
||||
|
||||
|
||||
@objcMembers open class HeadersH2NoButtonsBodyText: HeaderView {
|
||||
open class HeadersH2NoButtonsBodyText: HeaderView {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Outlets
|
||||
//--------------------------------------------------
|
||||
|
||||
public let headlineBody = HeadlineBody()
|
||||
public let titleLockup = TitleLockup()
|
||||
|
||||
//-------------------------------------------------------
|
||||
// MARK: - View Lifecycle
|
||||
@ -22,8 +22,7 @@ import Foundation
|
||||
|
||||
open override func setupView() {
|
||||
super.setupView()
|
||||
headlineBody.stylePageHeader()
|
||||
addMolecule(headlineBody)
|
||||
addMolecule(titleLockup)
|
||||
}
|
||||
|
||||
//----------------------------------------------------
|
||||
@ -34,15 +33,10 @@ import Foundation
|
||||
|
||||
guard let model = model as? HeadersH2NoButtonsBodyTextModel else { return }
|
||||
|
||||
headlineBody.set(with: model.headlineBody, delegateObject, additionalData)
|
||||
titleLockup.set(with: model.titleLockup, delegateObject, additionalData)
|
||||
}
|
||||
|
||||
open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
|
||||
return 121
|
||||
}
|
||||
|
||||
open override func reset() {
|
||||
super.reset()
|
||||
headlineBody.stylePageHeader()
|
||||
}
|
||||
}
|
||||
|
||||
@ -15,22 +15,23 @@ public class HeadersH2NoButtonsBodyTextModel: HeaderModel, MoleculeModelProtocol
|
||||
//--------------------------------------------------
|
||||
|
||||
public static var identifier: String = "headerH2"
|
||||
public var headlineBody: HeadlineBodyModel
|
||||
public var titleLockup: TitleLockupModel
|
||||
private var helper = DeprecatedHeadlineBodyHelper()
|
||||
|
||||
public var children: [MoleculeModelProtocol] {
|
||||
[headlineBody]
|
||||
[titleLockup]
|
||||
}
|
||||
|
||||
public func replaceChildMolecule(with molecule: MoleculeModelProtocol) throws -> Bool {
|
||||
return try replaceChildMolecule(at: &headlineBody, with: molecule)
|
||||
return try replaceChildMolecule(at: &titleLockup, with: molecule)
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Initializer
|
||||
//--------------------------------------------------
|
||||
|
||||
public init(headlineBody: HeadlineBodyModel) {
|
||||
self.headlineBody = headlineBody
|
||||
public init(titleLockup: TitleLockupModel) {
|
||||
self.titleLockup = titleLockup
|
||||
super.init()
|
||||
}
|
||||
|
||||
@ -41,8 +42,11 @@ public class HeadersH2NoButtonsBodyTextModel: HeaderModel, MoleculeModelProtocol
|
||||
if bottomPadding == nil {
|
||||
bottomPadding = Padding.Component.VerticalMarginSpacing
|
||||
}
|
||||
if headlineBody.headline?.accessibilityTraits == nil {
|
||||
headlineBody.headline?.accessibilityTraits = .header
|
||||
if titleLockup.title.fontStyle == nil {
|
||||
titleLockup.title.fontStyle = Styler.Font.RegularTitleXLarge
|
||||
}
|
||||
if titleLockup.subTitle?.fontStyle == nil {
|
||||
titleLockup.subTitle?.fontStyle = Styler.Font.RegularTitleMedium
|
||||
}
|
||||
super.setDefaults()
|
||||
}
|
||||
@ -53,7 +57,7 @@ public class HeadersH2NoButtonsBodyTextModel: HeaderModel, MoleculeModelProtocol
|
||||
|
||||
private enum CodingKeys: String, CodingKey {
|
||||
case moleculeName
|
||||
case headlineBody
|
||||
case titleLockup
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
@ -62,7 +66,7 @@ public class HeadersH2NoButtonsBodyTextModel: HeaderModel, MoleculeModelProtocol
|
||||
|
||||
required public init(from decoder: Decoder) throws {
|
||||
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
|
||||
headlineBody = try typeContainer.decode(HeadlineBodyModel.self, forKey: .headlineBody)
|
||||
titleLockup = try helper.deprecatedCreate(from: decoder) ?? typeContainer.decodeMolecule(codingKey: .titleLockup)
|
||||
try super.init(from: decoder)
|
||||
}
|
||||
|
||||
@ -70,6 +74,7 @@ public class HeadersH2NoButtonsBodyTextModel: HeaderModel, MoleculeModelProtocol
|
||||
try super.encode(to: encoder)
|
||||
var container = encoder.container(keyedBy: CodingKeys.self)
|
||||
try container.encode(moleculeName, forKey: .moleculeName)
|
||||
try container.encode(headlineBody, forKey: .headlineBody)
|
||||
guard try !helper.deprecatedEncode(to: encoder) else { return }
|
||||
try container.encode(titleLockup, forKey: .titleLockup)
|
||||
}
|
||||
}
|
||||
|
||||
@ -9,15 +9,15 @@
|
||||
import Foundation
|
||||
|
||||
|
||||
@objcMembers open class HeadersH2TinyButton: HeaderView {
|
||||
open class HeadersH2TinyButton: HeaderView {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Outlets
|
||||
//--------------------------------------------------
|
||||
|
||||
public let headlineBody = HeadlineBody()
|
||||
public let titleLockup = TitleLockup()
|
||||
public let button = PillButton()
|
||||
public lazy var stack: Stack<StackModel> = {
|
||||
return Stack<StackModel>.createStack(with: [(view: headlineBody, model: StackItemModel(horizontalAlignment: .fill)),
|
||||
return Stack<StackModel>.createStack(with: [(view: titleLockup, model: StackItemModel(horizontalAlignment: .fill)),
|
||||
(view: button, model: StackItemModel(spacing: spacingBetwenHeadlineBodyAndButton, horizontalAlignment: .leading))],
|
||||
axis: .vertical)
|
||||
}()
|
||||
@ -34,7 +34,6 @@ import Foundation
|
||||
|
||||
open override func setupView() {
|
||||
super.setupView()
|
||||
headlineBody.stylePageHeader()
|
||||
addMolecule(stack)
|
||||
stack.restack()
|
||||
}
|
||||
@ -48,16 +47,11 @@ import Foundation
|
||||
|
||||
guard let model = model as? HeadersH2TinyButtonModel else { return }
|
||||
|
||||
headlineBody.set(with: model.headlineBody, delegateObject, additionalData)
|
||||
titleLockup.set(with: model.titleLockup, delegateObject, additionalData)
|
||||
button.set(with: model.button, delegateObject, additionalData)
|
||||
}
|
||||
|
||||
open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
|
||||
return 121
|
||||
}
|
||||
|
||||
open override func reset() {
|
||||
super.reset()
|
||||
headlineBody.stylePageHeader()
|
||||
}
|
||||
}
|
||||
|
||||
@ -15,15 +15,16 @@ public class HeadersH2TinyButtonModel: HeaderModel, MoleculeModelProtocol, Paren
|
||||
//--------------------------------------------------
|
||||
|
||||
public static var identifier: String = "headerH2BtnTny"
|
||||
public var headlineBody: HeadlineBodyModel
|
||||
public var titleLockup: TitleLockupModel
|
||||
public var button: ButtonModel
|
||||
private var helper = DeprecatedHeadlineBodyHelper()
|
||||
|
||||
public var children: [MoleculeModelProtocol] {
|
||||
[headlineBody, button]
|
||||
[titleLockup, button]
|
||||
}
|
||||
|
||||
public func replaceChildMolecule(with molecule: MoleculeModelProtocol) throws -> Bool {
|
||||
return try replaceChildMolecule(at: &headlineBody, with: molecule)
|
||||
return try replaceChildMolecule(at: &titleLockup, with: molecule)
|
||||
|| replaceChildMolecule(at: &button, with: molecule)
|
||||
}
|
||||
|
||||
@ -31,8 +32,8 @@ public class HeadersH2TinyButtonModel: HeaderModel, MoleculeModelProtocol, Paren
|
||||
// MARK: - Initializer
|
||||
//--------------------------------------------------
|
||||
|
||||
public init(headlineBody: HeadlineBodyModel, button: ButtonModel) {
|
||||
self.headlineBody = headlineBody
|
||||
public init(titleLockup: TitleLockupModel, button: ButtonModel) {
|
||||
self.titleLockup = titleLockup
|
||||
self.button = button
|
||||
super.init()
|
||||
}
|
||||
@ -48,8 +49,11 @@ public class HeadersH2TinyButtonModel: HeaderModel, MoleculeModelProtocol, Paren
|
||||
if bottomPadding == nil {
|
||||
bottomPadding = Padding.Component.VerticalMarginSpacing
|
||||
}
|
||||
if headlineBody.headline?.accessibilityTraits == nil {
|
||||
headlineBody.headline?.accessibilityTraits = .header
|
||||
if titleLockup.title.fontStyle == nil {
|
||||
titleLockup.title.fontStyle = Styler.Font.RegularTitleXLarge
|
||||
}
|
||||
if titleLockup.subTitle?.fontStyle == nil {
|
||||
titleLockup.subTitle?.fontStyle = Styler.Font.RegularTitleMedium
|
||||
}
|
||||
super.setDefaults()
|
||||
button.style = .secondary
|
||||
@ -62,7 +66,7 @@ public class HeadersH2TinyButtonModel: HeaderModel, MoleculeModelProtocol, Paren
|
||||
|
||||
private enum CodingKeys: String, CodingKey {
|
||||
case moleculeName
|
||||
case headlineBody
|
||||
case titleLockup
|
||||
case button
|
||||
}
|
||||
|
||||
@ -72,7 +76,7 @@ public class HeadersH2TinyButtonModel: HeaderModel, MoleculeModelProtocol, Paren
|
||||
|
||||
required public init(from decoder: Decoder) throws {
|
||||
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
|
||||
headlineBody = try typeContainer.decode(HeadlineBodyModel.self, forKey: .headlineBody)
|
||||
titleLockup = try typeContainer.decodeMolecule(codingKey: .titleLockup)
|
||||
button = try typeContainer.decode(ButtonModel.self, forKey: .button)
|
||||
try super.init(from: decoder)
|
||||
}
|
||||
@ -81,7 +85,8 @@ public class HeadersH2TinyButtonModel: HeaderModel, MoleculeModelProtocol, Paren
|
||||
try super.encode(to: encoder)
|
||||
var container = encoder.container(keyedBy: CodingKeys.self)
|
||||
try container.encode(moleculeName, forKey: .moleculeName)
|
||||
try container.encode(headlineBody, forKey: .headlineBody)
|
||||
try container.encode(button, forKey: .button)
|
||||
guard try !helper.deprecatedEncode(to: encoder) else { return }
|
||||
try container.encode(titleLockup, forKey: .titleLockup)
|
||||
}
|
||||
}
|
||||
|
||||
@ -31,7 +31,7 @@ open class HeaderView: Container {
|
||||
(molecule as? MVMCoreViewProtocol)?.updateView(size)
|
||||
}
|
||||
|
||||
public override func setupView() {
|
||||
open override func setupView() {
|
||||
super.setupView()
|
||||
line.setStyle(.none)
|
||||
addSubview(line)
|
||||
|
||||
@ -7,9 +7,9 @@
|
||||
//
|
||||
|
||||
|
||||
@objcMembers public class HeaderModel: ContainerModel {
|
||||
public var backgroundColor: Color?
|
||||
public var line: LineModel?
|
||||
open class HeaderModel: ContainerModel {
|
||||
open var backgroundColor: Color?
|
||||
open var line: LineModel?
|
||||
|
||||
private enum CodingKeys: String, CodingKey {
|
||||
case line
|
||||
@ -17,7 +17,7 @@
|
||||
}
|
||||
|
||||
/// Defaults to set
|
||||
public override func setDefaults() {
|
||||
open override func setDefaults() {
|
||||
if useHorizontalMargins == nil {
|
||||
useHorizontalMargins = true
|
||||
}
|
||||
@ -43,7 +43,7 @@
|
||||
backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor)
|
||||
}
|
||||
|
||||
public override func encode(to encoder: Encoder) throws {
|
||||
open override func encode(to encoder: Encoder) throws {
|
||||
try super.encode(to: encoder)
|
||||
var container = encoder.container(keyedBy: CodingKeys.self)
|
||||
try container.encode(line, forKey: .line)
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
|
||||
public let stack = Stack<StackModel>(frame: .zero)
|
||||
public let eyebrow = Label(fontStyle: .RegularMicro)
|
||||
public let headline = Label(fontStyle: .BoldBodySmall)
|
||||
public let headline = Label(fontStyle: .RegularTitleSmall)
|
||||
public let body = Label(fontStyle: .RegularBodySmall, true)
|
||||
public let link = Link()
|
||||
|
||||
@ -58,7 +58,7 @@
|
||||
super.reset()
|
||||
stack.reset()
|
||||
eyebrow.setFontStyle(.RegularMicro)
|
||||
headline.setFontStyle(.BoldBodySmall)
|
||||
headline.setFontStyle(.RegularTitleSmall)
|
||||
body.setFontStyle(.RegularBodySmall)
|
||||
}
|
||||
|
||||
|
||||
@ -60,9 +60,9 @@ open class HeadlineBody: View {
|
||||
}
|
||||
|
||||
public func stylePageHeader() {
|
||||
headlineLabel.setFontStyle(.RegularTitleLarge)
|
||||
messageLabel.setFontStyle(.RegularBodyLarge)
|
||||
spaceBetweenLabelsConstant = Padding.Two
|
||||
headlineLabel.setFontStyle(.RegularTitleXLarge)
|
||||
messageLabel.setFontStyle(.RegularTitleMedium)
|
||||
spaceBetweenLabelsConstant = Padding.Four
|
||||
}
|
||||
|
||||
public func styleListItem() {
|
||||
@ -72,8 +72,8 @@ open class HeadlineBody: View {
|
||||
}
|
||||
|
||||
public func styleListItemDivider() {
|
||||
headlineLabel.setFontStyle(.BoldTitleSmall)
|
||||
messageLabel.setFontStyle(.RegularBodySmall)
|
||||
headlineLabel.setFontStyle(.BoldTitleLarge)
|
||||
messageLabel.setFontStyle(.RegularBodyLarge)
|
||||
spaceBetweenLabelsConstant = Padding.Two
|
||||
}
|
||||
|
||||
|
||||
@ -6,8 +6,8 @@
|
||||
// Copyright © 2019 Suresh, Kamlesh. All rights reserved.
|
||||
//
|
||||
|
||||
|
||||
@objcMembers open class HeadlineBodyModel: ParentMoleculeModelProtocol {
|
||||
import MVMCore
|
||||
open class HeadlineBodyModel: ParentMoleculeModelProtocol {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Properties
|
||||
//--------------------------------------------------
|
||||
@ -90,3 +90,24 @@
|
||||
try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor)
|
||||
}
|
||||
}
|
||||
|
||||
public extension HeadlineBodyModel {
|
||||
func createHeaderTitleLockupModel(defaultStyle: Style = .header) throws -> TitleLockupModel {
|
||||
guard let headline = headline else { throw ModelRegistry.Error.decoderOther(message: "headline is required for this use case.") }
|
||||
var body = self.body
|
||||
switch style ?? defaultStyle {
|
||||
case .landingHeader:
|
||||
headline.fontStyle = Styler.Font.RegularTitle2XLarge
|
||||
body?.fontStyle = Styler.Font.RegularTitleMedium
|
||||
case .itemHeader:
|
||||
headline.fontStyle = Styler.Font.BoldTitleLarge
|
||||
body?.fontStyle = Styler.Font.RegularBodyLarge
|
||||
default:
|
||||
headline.fontStyle = Styler.Font.RegularTitleXLarge
|
||||
body?.fontStyle = Styler.Font.RegularTitleMedium
|
||||
}
|
||||
let model = try TitleLockupModel(title: headline, subTitle: body)
|
||||
model.id = id
|
||||
return model
|
||||
}
|
||||
}
|
||||
|
||||
@ -21,7 +21,9 @@ public protocol VDSMoleculeViewProtocol: MoleculeViewProtocol, MVMCoreViewProtoc
|
||||
}
|
||||
|
||||
extension VDSMoleculeViewProtocol {
|
||||
|
||||
public func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
|
||||
self.model = model
|
||||
guard let castedModel = model as? ViewModel else { return }
|
||||
self.delegateObject = delegateObject
|
||||
self.additionalData = additionalData
|
||||
|
||||
@ -203,7 +203,29 @@ open class MoleculeListTemplate: ThreeLayerTableViewController, TemplateProtocol
|
||||
|
||||
open override func moleculeLayoutUpdated(_ molecule: MoleculeViewProtocol) {
|
||||
guard let tableView = tableView else { return }
|
||||
let id = molecule.model?.id
|
||||
|
||||
// Check for header
|
||||
var inHeaderOrFooter = false
|
||||
if let _ = templateModel?.header?.findFirstMolecule(by: { compareModel in id == compareModel.id }) {
|
||||
showHeader(nil)
|
||||
inHeaderOrFooter = true
|
||||
}
|
||||
|
||||
// Check for footer
|
||||
if let _ = templateModel?.footer?.findFirstMolecule(by: { compareModel in id == compareModel.id }) {
|
||||
showFooter(nil)
|
||||
inHeaderOrFooter = true
|
||||
}
|
||||
|
||||
// If the view is in a header or footer, need to update the constraints.
|
||||
if inHeaderOrFooter {
|
||||
view.setNeedsUpdateConstraints()
|
||||
view.updateConstraintsIfNeeded()
|
||||
return
|
||||
}
|
||||
|
||||
// If the view is in a cell, refresh the table ui.
|
||||
let point = molecule.convert(molecule.bounds.origin, to: tableView)
|
||||
if let indexPath = tableView.indexPathForRow(at: point), tableView.indexPathsForVisibleRows?.contains(indexPath) ?? false {
|
||||
refreshTable()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user