This commit is contained in:
Pfeil, Scott Robert 2020-02-28 12:11:51 -05:00
commit 4c25b8a160
106 changed files with 1865 additions and 503 deletions

View File

@ -12,9 +12,10 @@
0105618D224BBE7700E1557D /* FormValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0105618A224BBE7700E1557D /* FormValidator.swift */; }; 0105618D224BBE7700E1557D /* FormValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0105618A224BBE7700E1557D /* FormValidator.swift */; };
0105618E224BBE7700E1557D /* FormValidator+TextFields.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0105618B224BBE7700E1557D /* FormValidator+TextFields.swift */; }; 0105618E224BBE7700E1557D /* FormValidator+TextFields.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0105618B224BBE7700E1557D /* FormValidator+TextFields.swift */; };
0105618F224BBE7700E1557D /* FormValidator+FormParams.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0105618C224BBE7700E1557D /* FormValidator+FormParams.swift */; }; 0105618F224BBE7700E1557D /* FormValidator+FormParams.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0105618C224BBE7700E1557D /* FormValidator+FormParams.swift */; };
0116A4E5228B19640094F3ED /* RadioButtonModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0116A4E4228B19640094F3ED /* RadioButtonModel.swift */; }; 0116A4E5228B19640094F3ED /* RadioButtonSelectionHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0116A4E4228B19640094F3ED /* RadioButtonSelectionHelper.swift */; };
011B58F023A2AA980085F53C /* ListItemModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011B58EF23A2AA980085F53C /* ListItemModelProtocol.swift */; }; 011B58F023A2AA980085F53C /* ListItemModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011B58EF23A2AA980085F53C /* ListItemModelProtocol.swift */; };
011B58F223A2AE2C0085F53C /* DropDownListItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011B58F123A2AE2C0085F53C /* DropDownListItemModel.swift */; }; 011B58F223A2AE2C0085F53C /* DropDownListItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011B58F123A2AE2C0085F53C /* DropDownListItemModel.swift */; };
011D95AF2407266E000E3791 /* RadioButtonModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011D95AE2407266E000E3791 /* RadioButtonModel.swift */; };
012A889C23889E8400FE3DA1 /* TemplateModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 012A889B23889E8400FE3DA1 /* TemplateModelProtocol.swift */; }; 012A889C23889E8400FE3DA1 /* TemplateModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 012A889B23889E8400FE3DA1 /* TemplateModelProtocol.swift */; };
012A88AD238C418100FE3DA1 /* TemplateProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 012A88AC238C418100FE3DA1 /* TemplateProtocol.swift */; }; 012A88AD238C418100FE3DA1 /* TemplateProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 012A88AC238C418100FE3DA1 /* TemplateProtocol.swift */; };
012A88B1238C880100FE3DA1 /* CarouselPagingModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 012A88B0238C880100FE3DA1 /* CarouselPagingModelProtocol.swift */; }; 012A88B1238C880100FE3DA1 /* CarouselPagingModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 012A88B0238C880100FE3DA1 /* CarouselPagingModelProtocol.swift */; };
@ -94,6 +95,10 @@
0ABD136D237CAD1E0081388D /* DateDropdownEntryField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ABD136C237CAD1E0081388D /* DateDropdownEntryField.swift */; }; 0ABD136D237CAD1E0081388D /* DateDropdownEntryField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ABD136C237CAD1E0081388D /* DateDropdownEntryField.swift */; };
0ABD1371237DB0450081388D /* ItemDropdownEntryField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ABD1370237DB0450081388D /* ItemDropdownEntryField.swift */; }; 0ABD1371237DB0450081388D /* ItemDropdownEntryField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ABD1370237DB0450081388D /* ItemDropdownEntryField.swift */; };
0AE14F64238315D2005417F8 /* TextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AE14F63238315D2005417F8 /* TextField.swift */; }; 0AE14F64238315D2005417F8 /* TextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AE14F63238315D2005417F8 /* TextField.swift */; };
0AE98BAF23FEF956004C5109 /* ExternalLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AE98BAE23FEF956004C5109 /* ExternalLink.swift */; };
0AE98BB323FF0934004C5109 /* ExternalLinkModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AE98BB223FF0934004C5109 /* ExternalLinkModel.swift */; };
0AE98BB523FF18D2004C5109 /* Arrow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AE98BB423FF18D2004C5109 /* Arrow.swift */; };
0AE98BB723FF18E9004C5109 /* ArrowModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AE98BB623FF18E9004C5109 /* ArrowModel.swift */; };
31BE15CB23D8924D00452370 /* CheckboxLabelModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31BE15C923D8924C00452370 /* CheckboxLabelModel.swift */; }; 31BE15CB23D8924D00452370 /* CheckboxLabelModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31BE15C923D8924C00452370 /* CheckboxLabelModel.swift */; };
31BE15CC23D8924D00452370 /* CheckboxModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31BE15CA23D8924C00452370 /* CheckboxModel.swift */; }; 31BE15CC23D8924D00452370 /* CheckboxModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31BE15CA23D8924C00452370 /* CheckboxModel.swift */; };
522679C123FE886900906CBA /* ListLeftVariableCheckboxAllTextAndLinks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522679BF23FE886900906CBA /* ListLeftVariableCheckboxAllTextAndLinks.swift */; }; 522679C123FE886900906CBA /* ListLeftVariableCheckboxAllTextAndLinks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522679BF23FE886900906CBA /* ListLeftVariableCheckboxAllTextAndLinks.swift */; };
@ -103,6 +108,8 @@
5248BFED23F12E350059236A /* ListThreeColumnPlanDataDividerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5248BFEB23F12E350059236A /* ListThreeColumnPlanDataDividerModel.swift */; }; 5248BFED23F12E350059236A /* ListThreeColumnPlanDataDividerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5248BFEB23F12E350059236A /* ListThreeColumnPlanDataDividerModel.swift */; };
525019E52406852100EED91C /* ListFourColumnDataUsageDividerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 525019E42406852100EED91C /* ListFourColumnDataUsageDividerModel.swift */; }; 525019E52406852100EED91C /* ListFourColumnDataUsageDividerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 525019E42406852100EED91C /* ListFourColumnDataUsageDividerModel.swift */; };
525019E72406853600EED91C /* ListFourColumnDataUsageDivider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 525019E62406853600EED91C /* ListFourColumnDataUsageDivider.swift */; }; 525019E72406853600EED91C /* ListFourColumnDataUsageDivider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 525019E62406853600EED91C /* ListFourColumnDataUsageDivider.swift */; };
52B201D224081CFB00D2011E /* ListLeftVariableRadioButtonAndPaymentMethod.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52B201D024081CFB00D2011E /* ListLeftVariableRadioButtonAndPaymentMethod.swift */; };
52B201D324081CFB00D2011E /* ListLeftVariableRadioButtonAndPaymentMethodModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52B201D124081CFB00D2011E /* ListLeftVariableRadioButtonAndPaymentMethodModel.swift */; };
8D24041123E7FB9E009E23BE /* ListLeftVariableIconWithRightCaret.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D24041023E7FB9E009E23BE /* ListLeftVariableIconWithRightCaret.swift */; }; 8D24041123E7FB9E009E23BE /* ListLeftVariableIconWithRightCaret.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D24041023E7FB9E009E23BE /* ListLeftVariableIconWithRightCaret.swift */; };
8D24041523E7FC0B009E23BE /* ListLeftVariableIconWithRightCaretModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D24041423E7FC0B009E23BE /* ListLeftVariableIconWithRightCaretModel.swift */; }; 8D24041523E7FC0B009E23BE /* ListLeftVariableIconWithRightCaretModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D24041423E7FC0B009E23BE /* ListLeftVariableIconWithRightCaretModel.swift */; };
8D448E5524050A46006211BB /* ListOneColumnFullWidthTextAllTextAndLinksModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D448E5424050A46006211BB /* ListOneColumnFullWidthTextAllTextAndLinksModel.swift */; }; 8D448E5524050A46006211BB /* ListOneColumnFullWidthTextAllTextAndLinksModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D448E5424050A46006211BB /* ListOneColumnFullWidthTextAllTextAndLinksModel.swift */; };
@ -115,6 +122,8 @@
944589212385D6E900DE9FD4 /* DashLineModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 944589202385D6E900DE9FD4 /* DashLineModel.swift */; }; 944589212385D6E900DE9FD4 /* DashLineModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 944589202385D6E900DE9FD4 /* DashLineModel.swift */; };
944589232385DA9600DE9FD4 /* ImageViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 944589222385DA9500DE9FD4 /* ImageViewModel.swift */; }; 944589232385DA9600DE9FD4 /* ImageViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 944589222385DA9500DE9FD4 /* ImageViewModel.swift */; };
9455B19C234F8A0400A574DB /* MVMAnimationFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9455B19B234F8A0400A574DB /* MVMAnimationFramework.framework */; }; 9455B19C234F8A0400A574DB /* MVMAnimationFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9455B19B234F8A0400A574DB /* MVMAnimationFramework.framework */; };
9458C3172406C8FD00930963 /* UIFont+FontWrapping.h in Headers */ = {isa = PBXBuildFile; fileRef = 9458C3152406C8FD00930963 /* UIFont+FontWrapping.h */; settings = {ATTRIBUTES = (Public, ); }; };
9458C3182406C8FD00930963 /* UIFont+FontWrapping.m in Sources */ = {isa = PBXBuildFile; fileRef = 9458C3162406C8FD00930963 /* UIFont+FontWrapping.m */; };
946EE1BA237B66D80036751F /* MoleculeModelHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 946EE1B9237B66D80036751F /* MoleculeModelHelper.swift */; }; 946EE1BA237B66D80036751F /* MoleculeModelHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 946EE1B9237B66D80036751F /* MoleculeModelHelper.swift */; };
948DB67E2326DCD90011F916 /* MultiProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 948DB67D2326DCD90011F916 /* MultiProgress.swift */; }; 948DB67E2326DCD90011F916 /* MultiProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 948DB67D2326DCD90011F916 /* MultiProgress.swift */; };
94AF4A3E23E9D13900676048 /* MFCaretButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 94AF4A3C23E9D13900676048 /* MFCaretButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; 94AF4A3E23E9D13900676048 /* MFCaretButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 94AF4A3C23E9D13900676048 /* MFCaretButton.h */; settings = {ATTRIBUTES = (Public, ); }; };
@ -130,6 +139,10 @@
94C2D9AB23872EB50006CF46 /* LabelAttributeActionModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94C2D9AA23872EB50006CF46 /* LabelAttributeActionModel.swift */; }; 94C2D9AB23872EB50006CF46 /* LabelAttributeActionModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94C2D9AA23872EB50006CF46 /* LabelAttributeActionModel.swift */; };
94C661D923CCF4B400D9FE5B /* LeftRightLabelModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9402C34F23A2CEA3004B974C /* LeftRightLabelModel.swift */; }; 94C661D923CCF4B400D9FE5B /* LeftRightLabelModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9402C34F23A2CEA3004B974C /* LeftRightLabelModel.swift */; };
94C661DA23CCF4FB00D9FE5B /* UIColor+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AA33B33239813C50067DD0F /* UIColor+Extension.swift */; }; 94C661DA23CCF4FB00D9FE5B /* UIColor+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AA33B33239813C50067DD0F /* UIColor+Extension.swift */; };
94CA227C24058534002D6750 /* VerizonNHGeTX-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 94CA227824058533002D6750 /* VerizonNHGeTX-Bold.otf */; };
94CA227D24058534002D6750 /* VerizonNHGeDS-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 94CA227924058533002D6750 /* VerizonNHGeDS-Regular.otf */; };
94CA227E24058534002D6750 /* VerizonNHGeDS-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 94CA227A24058533002D6750 /* VerizonNHGeDS-Bold.otf */; };
94CA227F24058534002D6750 /* VerizonNHGeTX-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 94CA227B24058533002D6750 /* VerizonNHGeTX-Regular.otf */; };
94F217B623E0BF6100A47C06 /* PrimaryButtonView.h in Headers */ = {isa = PBXBuildFile; fileRef = 94F217B423E0BF6100A47C06 /* PrimaryButtonView.h */; settings = {ATTRIBUTES = (Public, ); }; }; 94F217B623E0BF6100A47C06 /* PrimaryButtonView.h in Headers */ = {isa = PBXBuildFile; fileRef = 94F217B423E0BF6100A47C06 /* PrimaryButtonView.h */; settings = {ATTRIBUTES = (Public, ); }; };
94F217B723E0BF6100A47C06 /* PrimaryButtonView.m in Sources */ = {isa = PBXBuildFile; fileRef = 94F217B523E0BF6100A47C06 /* PrimaryButtonView.m */; }; 94F217B723E0BF6100A47C06 /* PrimaryButtonView.m in Sources */ = {isa = PBXBuildFile; fileRef = 94F217B523E0BF6100A47C06 /* PrimaryButtonView.m */; };
94FB966223D797DA003D482B /* MFTextButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 94FB966023D797DA003D482B /* MFTextButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; 94FB966223D797DA003D482B /* MFTextButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 94FB966023D797DA003D482B /* MFTextButton.h */; settings = {ATTRIBUTES = (Public, ); }; };
@ -292,10 +305,7 @@
D29DF2E121E9240B003B2FB9 /* MVMCoreUIPanelProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF2E021E9240B003B2FB9 /* MVMCoreUIPanelProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; D29DF2E121E9240B003B2FB9 /* MVMCoreUIPanelProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF2E021E9240B003B2FB9 /* MVMCoreUIPanelProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
D29DF2EE21ECEADF003B2FB9 /* MFFonts.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF14D21E693AD003B2FB9 /* MFFonts.h */; settings = {ATTRIBUTES = (Public, ); }; }; D29DF2EE21ECEADF003B2FB9 /* MFFonts.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF14D21E693AD003B2FB9 /* MFFonts.h */; settings = {ATTRIBUTES = (Public, ); }; };
D29DF2EF21ECEAE1003B2FB9 /* MFFonts.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF14C21E693AD003B2FB9 /* MFFonts.m */; }; D29DF2EF21ECEAE1003B2FB9 /* MFFonts.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF14C21E693AD003B2FB9 /* MFFonts.m */; };
D29DF31A21ECECC0003B2FB9 /* NHaasGroteskDSStd-45Lt.otf in Resources */ = {isa = PBXBuildFile; fileRef = D29DF31621ECECC0003B2FB9 /* NHaasGroteskDSStd-45Lt.otf */; };
D29DF31B21ECECC0003B2FB9 /* OCRAExtended.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D29DF31721ECECC0003B2FB9 /* OCRAExtended.ttf */; }; D29DF31B21ECECC0003B2FB9 /* OCRAExtended.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D29DF31721ECECC0003B2FB9 /* OCRAExtended.ttf */; };
D29DF31C21ECECC0003B2FB9 /* NHaasGroteskDSStd-75Bd.otf in Resources */ = {isa = PBXBuildFile; fileRef = D29DF31821ECECC0003B2FB9 /* NHaasGroteskDSStd-75Bd.otf */; };
D29DF31D21ECECC0003B2FB9 /* NHaasGroteskDSStd-55Rg.otf in Resources */ = {isa = PBXBuildFile; fileRef = D29DF31921ECECC0003B2FB9 /* NHaasGroteskDSStd-55Rg.otf */; };
D29DF32021ED0CBA003B2FB9 /* LabelView.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF31E21ED0CBA003B2FB9 /* LabelView.h */; settings = {ATTRIBUTES = (Public, ); }; }; D29DF32021ED0CBA003B2FB9 /* LabelView.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF31E21ED0CBA003B2FB9 /* LabelView.h */; settings = {ATTRIBUTES = (Public, ); }; };
D29DF32121ED0CBA003B2FB9 /* LabelView.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF31F21ED0CBA003B2FB9 /* LabelView.m */; }; D29DF32121ED0CBA003B2FB9 /* LabelView.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF31F21ED0CBA003B2FB9 /* LabelView.m */; };
D29DF32421ED0DA2003B2FB9 /* TextButtonView.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF32221ED0DA2003B2FB9 /* TextButtonView.m */; }; D29DF32421ED0DA2003B2FB9 /* TextButtonView.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF32221ED0DA2003B2FB9 /* TextButtonView.m */; };
@ -357,9 +367,10 @@
0105618A224BBE7700E1557D /* FormValidator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormValidator.swift; sourceTree = "<group>"; }; 0105618A224BBE7700E1557D /* FormValidator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormValidator.swift; sourceTree = "<group>"; };
0105618B224BBE7700E1557D /* FormValidator+TextFields.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "FormValidator+TextFields.swift"; sourceTree = "<group>"; }; 0105618B224BBE7700E1557D /* FormValidator+TextFields.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "FormValidator+TextFields.swift"; sourceTree = "<group>"; };
0105618C224BBE7700E1557D /* FormValidator+FormParams.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "FormValidator+FormParams.swift"; sourceTree = "<group>"; }; 0105618C224BBE7700E1557D /* FormValidator+FormParams.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "FormValidator+FormParams.swift"; sourceTree = "<group>"; };
0116A4E4228B19640094F3ED /* RadioButtonModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioButtonModel.swift; sourceTree = "<group>"; }; 0116A4E4228B19640094F3ED /* RadioButtonSelectionHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioButtonSelectionHelper.swift; sourceTree = "<group>"; };
011B58EF23A2AA980085F53C /* ListItemModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListItemModelProtocol.swift; sourceTree = "<group>"; }; 011B58EF23A2AA980085F53C /* ListItemModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListItemModelProtocol.swift; sourceTree = "<group>"; };
011B58F123A2AE2C0085F53C /* DropDownListItemModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DropDownListItemModel.swift; sourceTree = "<group>"; }; 011B58F123A2AE2C0085F53C /* DropDownListItemModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DropDownListItemModel.swift; sourceTree = "<group>"; };
011D95AE2407266E000E3791 /* RadioButtonModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioButtonModel.swift; sourceTree = "<group>"; };
012A889B23889E8400FE3DA1 /* TemplateModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TemplateModelProtocol.swift; sourceTree = "<group>"; }; 012A889B23889E8400FE3DA1 /* TemplateModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TemplateModelProtocol.swift; sourceTree = "<group>"; };
012A88AC238C418100FE3DA1 /* TemplateProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TemplateProtocol.swift; sourceTree = "<group>"; }; 012A88AC238C418100FE3DA1 /* TemplateProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TemplateProtocol.swift; sourceTree = "<group>"; };
012A88AE238C626E00FE3DA1 /* CarouselModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CarouselModel.swift; sourceTree = "<group>"; }; 012A88AE238C626E00FE3DA1 /* CarouselModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CarouselModel.swift; sourceTree = "<group>"; };
@ -430,6 +441,10 @@
0ABD136C237CAD1E0081388D /* DateDropdownEntryField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateDropdownEntryField.swift; sourceTree = "<group>"; }; 0ABD136C237CAD1E0081388D /* DateDropdownEntryField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateDropdownEntryField.swift; sourceTree = "<group>"; };
0ABD1370237DB0450081388D /* ItemDropdownEntryField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemDropdownEntryField.swift; sourceTree = "<group>"; }; 0ABD1370237DB0450081388D /* ItemDropdownEntryField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemDropdownEntryField.swift; sourceTree = "<group>"; };
0AE14F63238315D2005417F8 /* TextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextField.swift; sourceTree = "<group>"; }; 0AE14F63238315D2005417F8 /* TextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextField.swift; sourceTree = "<group>"; };
0AE98BAE23FEF956004C5109 /* ExternalLink.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExternalLink.swift; sourceTree = "<group>"; };
0AE98BB223FF0934004C5109 /* ExternalLinkModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExternalLinkModel.swift; sourceTree = "<group>"; };
0AE98BB423FF18D2004C5109 /* Arrow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Arrow.swift; sourceTree = "<group>"; };
0AE98BB623FF18E9004C5109 /* ArrowModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArrowModel.swift; sourceTree = "<group>"; };
31BE15C923D8924C00452370 /* CheckboxLabelModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheckboxLabelModel.swift; sourceTree = "<group>"; }; 31BE15C923D8924C00452370 /* CheckboxLabelModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheckboxLabelModel.swift; sourceTree = "<group>"; };
31BE15CA23D8924C00452370 /* CheckboxModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheckboxModel.swift; sourceTree = "<group>"; }; 31BE15CA23D8924C00452370 /* CheckboxModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheckboxModel.swift; sourceTree = "<group>"; };
522679BF23FE886900906CBA /* ListLeftVariableCheckboxAllTextAndLinks.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListLeftVariableCheckboxAllTextAndLinks.swift; sourceTree = "<group>"; }; 522679BF23FE886900906CBA /* ListLeftVariableCheckboxAllTextAndLinks.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListLeftVariableCheckboxAllTextAndLinks.swift; sourceTree = "<group>"; };
@ -439,6 +454,8 @@
5248BFEB23F12E350059236A /* ListThreeColumnPlanDataDividerModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListThreeColumnPlanDataDividerModel.swift; sourceTree = "<group>"; }; 5248BFEB23F12E350059236A /* ListThreeColumnPlanDataDividerModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListThreeColumnPlanDataDividerModel.swift; sourceTree = "<group>"; };
525019E42406852100EED91C /* ListFourColumnDataUsageDividerModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListFourColumnDataUsageDividerModel.swift; sourceTree = "<group>"; }; 525019E42406852100EED91C /* ListFourColumnDataUsageDividerModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListFourColumnDataUsageDividerModel.swift; sourceTree = "<group>"; };
525019E62406853600EED91C /* ListFourColumnDataUsageDivider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListFourColumnDataUsageDivider.swift; sourceTree = "<group>"; }; 525019E62406853600EED91C /* ListFourColumnDataUsageDivider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListFourColumnDataUsageDivider.swift; sourceTree = "<group>"; };
52B201D024081CFB00D2011E /* ListLeftVariableRadioButtonAndPaymentMethod.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListLeftVariableRadioButtonAndPaymentMethod.swift; sourceTree = "<group>"; };
52B201D124081CFB00D2011E /* ListLeftVariableRadioButtonAndPaymentMethodModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListLeftVariableRadioButtonAndPaymentMethodModel.swift; sourceTree = "<group>"; };
8D24041023E7FB9E009E23BE /* ListLeftVariableIconWithRightCaret.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListLeftVariableIconWithRightCaret.swift; sourceTree = "<group>"; }; 8D24041023E7FB9E009E23BE /* ListLeftVariableIconWithRightCaret.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListLeftVariableIconWithRightCaret.swift; sourceTree = "<group>"; };
8D24041423E7FC0B009E23BE /* ListLeftVariableIconWithRightCaretModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListLeftVariableIconWithRightCaretModel.swift; sourceTree = "<group>"; }; 8D24041423E7FC0B009E23BE /* ListLeftVariableIconWithRightCaretModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListLeftVariableIconWithRightCaretModel.swift; sourceTree = "<group>"; };
8D448E5424050A46006211BB /* ListOneColumnFullWidthTextAllTextAndLinksModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListOneColumnFullWidthTextAllTextAndLinksModel.swift; sourceTree = "<group>"; }; 8D448E5424050A46006211BB /* ListOneColumnFullWidthTextAllTextAndLinksModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListOneColumnFullWidthTextAllTextAndLinksModel.swift; sourceTree = "<group>"; };
@ -452,6 +469,8 @@
944589202385D6E900DE9FD4 /* DashLineModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DashLineModel.swift; sourceTree = "<group>"; }; 944589202385D6E900DE9FD4 /* DashLineModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DashLineModel.swift; sourceTree = "<group>"; };
944589222385DA9500DE9FD4 /* ImageViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageViewModel.swift; sourceTree = "<group>"; }; 944589222385DA9500DE9FD4 /* ImageViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageViewModel.swift; sourceTree = "<group>"; };
9455B19B234F8A0400A574DB /* MVMAnimationFramework.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MVMAnimationFramework.framework; path = ../SharedFrameworks/MVMAnimationFramework.framework; sourceTree = "<group>"; }; 9455B19B234F8A0400A574DB /* MVMAnimationFramework.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MVMAnimationFramework.framework; path = ../SharedFrameworks/MVMAnimationFramework.framework; sourceTree = "<group>"; };
9458C3152406C8FD00930963 /* UIFont+FontWrapping.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIFont+FontWrapping.h"; sourceTree = "<group>"; };
9458C3162406C8FD00930963 /* UIFont+FontWrapping.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIFont+FontWrapping.m"; sourceTree = "<group>"; };
946EE1B9237B66D80036751F /* MoleculeModelHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoleculeModelHelper.swift; sourceTree = "<group>"; }; 946EE1B9237B66D80036751F /* MoleculeModelHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoleculeModelHelper.swift; sourceTree = "<group>"; };
948DB67D2326DCD90011F916 /* MultiProgress.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultiProgress.swift; sourceTree = "<group>"; }; 948DB67D2326DCD90011F916 /* MultiProgress.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultiProgress.swift; sourceTree = "<group>"; };
94AF4A3C23E9D13900676048 /* MFCaretButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MFCaretButton.h; sourceTree = "<group>"; }; 94AF4A3C23E9D13900676048 /* MFCaretButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MFCaretButton.h; sourceTree = "<group>"; };
@ -465,6 +484,10 @@
94C2D9A623872DA90006CF46 /* LabelAttributeColorModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelAttributeColorModel.swift; sourceTree = "<group>"; }; 94C2D9A623872DA90006CF46 /* LabelAttributeColorModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelAttributeColorModel.swift; sourceTree = "<group>"; };
94C2D9A823872E5E0006CF46 /* LabelAttributeImageModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelAttributeImageModel.swift; sourceTree = "<group>"; }; 94C2D9A823872E5E0006CF46 /* LabelAttributeImageModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelAttributeImageModel.swift; sourceTree = "<group>"; };
94C2D9AA23872EB50006CF46 /* LabelAttributeActionModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelAttributeActionModel.swift; sourceTree = "<group>"; }; 94C2D9AA23872EB50006CF46 /* LabelAttributeActionModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelAttributeActionModel.swift; sourceTree = "<group>"; };
94CA227824058533002D6750 /* VerizonNHGeTX-Bold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "VerizonNHGeTX-Bold.otf"; sourceTree = "<group>"; };
94CA227924058533002D6750 /* VerizonNHGeDS-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "VerizonNHGeDS-Regular.otf"; sourceTree = "<group>"; };
94CA227A24058533002D6750 /* VerizonNHGeDS-Bold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "VerizonNHGeDS-Bold.otf"; sourceTree = "<group>"; };
94CA227B24058533002D6750 /* VerizonNHGeTX-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "VerizonNHGeTX-Regular.otf"; sourceTree = "<group>"; };
94F217B423E0BF6100A47C06 /* PrimaryButtonView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PrimaryButtonView.h; sourceTree = "<group>"; }; 94F217B423E0BF6100A47C06 /* PrimaryButtonView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PrimaryButtonView.h; sourceTree = "<group>"; };
94F217B523E0BF6100A47C06 /* PrimaryButtonView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PrimaryButtonView.m; sourceTree = "<group>"; }; 94F217B523E0BF6100A47C06 /* PrimaryButtonView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PrimaryButtonView.m; sourceTree = "<group>"; };
94FB966023D797DA003D482B /* MFTextButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MFTextButton.h; sourceTree = "<group>"; }; 94FB966023D797DA003D482B /* MFTextButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MFTextButton.h; sourceTree = "<group>"; };
@ -639,10 +662,7 @@
D29DF2CC21E7C104003B2FB9 /* MFLoadingViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MFLoadingViewController.h; sourceTree = "<group>"; }; D29DF2CC21E7C104003B2FB9 /* MFLoadingViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MFLoadingViewController.h; sourceTree = "<group>"; };
D29DF2CD21E7C104003B2FB9 /* MFLoadingViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MFLoadingViewController.m; sourceTree = "<group>"; }; D29DF2CD21E7C104003B2FB9 /* MFLoadingViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MFLoadingViewController.m; sourceTree = "<group>"; };
D29DF2E021E9240B003B2FB9 /* MVMCoreUIPanelProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MVMCoreUIPanelProtocol.h; sourceTree = "<group>"; }; D29DF2E021E9240B003B2FB9 /* MVMCoreUIPanelProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MVMCoreUIPanelProtocol.h; sourceTree = "<group>"; };
D29DF31621ECECC0003B2FB9 /* NHaasGroteskDSStd-45Lt.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "NHaasGroteskDSStd-45Lt.otf"; sourceTree = "<group>"; };
D29DF31721ECECC0003B2FB9 /* OCRAExtended.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = OCRAExtended.ttf; sourceTree = "<group>"; }; D29DF31721ECECC0003B2FB9 /* OCRAExtended.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = OCRAExtended.ttf; sourceTree = "<group>"; };
D29DF31821ECECC0003B2FB9 /* NHaasGroteskDSStd-75Bd.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "NHaasGroteskDSStd-75Bd.otf"; sourceTree = "<group>"; };
D29DF31921ECECC0003B2FB9 /* NHaasGroteskDSStd-55Rg.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "NHaasGroteskDSStd-55Rg.otf"; sourceTree = "<group>"; };
D29DF31E21ED0CBA003B2FB9 /* LabelView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LabelView.h; sourceTree = "<group>"; }; D29DF31E21ED0CBA003B2FB9 /* LabelView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LabelView.h; sourceTree = "<group>"; };
D29DF31F21ED0CBA003B2FB9 /* LabelView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LabelView.m; sourceTree = "<group>"; }; D29DF31F21ED0CBA003B2FB9 /* LabelView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LabelView.m; sourceTree = "<group>"; };
D29DF32221ED0DA2003B2FB9 /* TextButtonView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TextButtonView.m; sourceTree = "<group>"; }; D29DF32221ED0DA2003B2FB9 /* TextButtonView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TextButtonView.m; sourceTree = "<group>"; };
@ -776,6 +796,17 @@
path = Views; path = Views;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
0AE98BAD23FEF92B004C5109 /* Link */ = {
isa = PBXGroup;
children = (
D28A838823CCCFCB00DFE4FC /* LinkModel.swift */,
C07065C32395677300FBF997 /* Link.swift */,
0AE98BB223FF0934004C5109 /* ExternalLinkModel.swift */,
0AE98BAE23FEF956004C5109 /* ExternalLink.swift */,
);
path = Link;
sourceTree = "<group>";
};
52267A0523FFE0A900906CBA /* OneColumn */ = { 52267A0523FFE0A900906CBA /* OneColumn */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@ -1017,6 +1048,7 @@
D22B38EA23F4E08B00490EF6 /* List */ = { D22B38EA23F4E08B00490EF6 /* List */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
52267A0523FFE0A900906CBA /* OneColumn */,
AA4FC2A323F4F69600E251DB /* RightVariable */, AA4FC2A323F4F69600E251DB /* RightVariable */,
D22B38EB23F4E0AE00490EF6 /* LeftVariable */, D22B38EB23F4E0AE00490EF6 /* LeftVariable */,
); );
@ -1026,6 +1058,8 @@
D22B38EB23F4E0AE00490EF6 /* LeftVariable */ = { D22B38EB23F4E0AE00490EF6 /* LeftVariable */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
52B201D124081CFB00D2011E /* ListLeftVariableRadioButtonAndPaymentMethodModel.swift */,
52B201D024081CFB00D2011E /* ListLeftVariableRadioButtonAndPaymentMethod.swift */,
522679C023FE886900906CBA /* ListLeftVariableCheckboxAllTextAndLinksModel.swift */, 522679C023FE886900906CBA /* ListLeftVariableCheckboxAllTextAndLinksModel.swift */,
522679BF23FE886900906CBA /* ListLeftVariableCheckboxAllTextAndLinks.swift */, 522679BF23FE886900906CBA /* ListLeftVariableCheckboxAllTextAndLinks.swift */,
8D24041423E7FC0B009E23BE /* ListLeftVariableIconWithRightCaretModel.swift */, 8D24041423E7FC0B009E23BE /* ListLeftVariableIconWithRightCaretModel.swift */,
@ -1165,7 +1199,7 @@
D2A514662213885800345BFB /* MoleculeHeaderView.swift */, D2A514662213885800345BFB /* MoleculeHeaderView.swift */,
012A88EB238F084D00FE3DA1 /* FooterModel.swift */, 012A88EB238F084D00FE3DA1 /* FooterModel.swift */,
D274CA322236A78900B01B62 /* FooterView.swift */, D274CA322236A78900B01B62 /* FooterView.swift */,
0116A4E4228B19640094F3ED /* RadioButtonModel.swift */, 0116A4E4228B19640094F3ED /* RadioButtonSelectionHelper.swift */,
012A88C5238DA34000FE3DA1 /* ModuleMoleculeModel.swift */, 012A88C5238DA34000FE3DA1 /* ModuleMoleculeModel.swift */,
D29B770F22C281F400D6ACE0 /* ModuleMolecule.swift */, D29B770F22C281F400D6ACE0 /* ModuleMolecule.swift */,
D28A838423CCCA8900DFE4FC /* ScrollerModel.swift */, D28A838423CCCA8900DFE4FC /* ScrollerModel.swift */,
@ -1260,6 +1294,8 @@
D29DF28121E7AB23003B2FB9 /* MVMCoreUICommonViewsUtility.m */, D29DF28121E7AB23003B2FB9 /* MVMCoreUICommonViewsUtility.m */,
D29DF14D21E693AD003B2FB9 /* MFFonts.h */, D29DF14D21E693AD003B2FB9 /* MFFonts.h */,
D29DF14C21E693AD003B2FB9 /* MFFonts.m */, D29DF14C21E693AD003B2FB9 /* MFFonts.m */,
9458C3152406C8FD00930963 /* UIFont+FontWrapping.h */,
9458C3162406C8FD00930963 /* UIFont+FontWrapping.m */,
D29DF29F21E7AF4E003B2FB9 /* MVMCoreUIUtility.h */, D29DF29F21E7AF4E003B2FB9 /* MVMCoreUIUtility.h */,
D29DF2A021E7AF4E003B2FB9 /* MVMCoreUIUtility.m */, D29DF2A021E7AF4E003B2FB9 /* MVMCoreUIUtility.m */,
D29DF2A721E7B2F9003B2FB9 /* MVMCoreUIConstants.h */, D29DF2A721E7B2F9003B2FB9 /* MVMCoreUIConstants.h */,
@ -1285,12 +1321,11 @@
D29DF16821E69E1F003B2FB9 /* Buttons */ = { D29DF16821E69E1F003B2FB9 /* Buttons */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
0AE98BAD23FEF92B004C5109 /* Link */,
01F2A03123A4498200D954D8 /* CaretLinkModel.swift */, 01F2A03123A4498200D954D8 /* CaretLinkModel.swift */,
DBC4391A224421A0001AB423 /* CaretLink.swift */, DBC4391A224421A0001AB423 /* CaretLink.swift */,
D28A838A23CCDA6B00DFE4FC /* ButtonModel.swift */, D28A838A23CCDA6B00DFE4FC /* ButtonModel.swift */,
D2E2A99E23E07F8A000B42E6 /* PillButton.swift */, D2E2A99E23E07F8A000B42E6 /* PillButton.swift */,
D28A838823CCCFCB00DFE4FC /* LinkModel.swift */,
C07065C32395677300FBF997 /* Link.swift */,
D28A838C23CCDCC200DFE4FC /* PrimaryButton+MoleculeProtocolExtension.swift */, D28A838C23CCDCC200DFE4FC /* PrimaryButton+MoleculeProtocolExtension.swift */,
D28A837623C79FC600DFE4FC /* MFCustomButton+ActionModel.swift */, D28A837623C79FC600DFE4FC /* MFCustomButton+ActionModel.swift */,
); );
@ -1321,6 +1356,7 @@
0A7BAFA0232BE61800FB8E22 /* Checkbox.swift */, 0A7BAFA0232BE61800FB8E22 /* Checkbox.swift */,
31BE15C923D8924C00452370 /* CheckboxLabelModel.swift */, 31BE15C923D8924C00452370 /* CheckboxLabelModel.swift */,
0A7BAFA2232BE63400FB8E22 /* CheckboxLabel.swift */, 0A7BAFA2232BE63400FB8E22 /* CheckboxLabel.swift */,
011D95AE2407266E000E3791 /* RadioButtonModel.swift */,
01004F2F22721C3800991ECC /* RadioButton.swift */, 01004F2F22721C3800991ECC /* RadioButton.swift */,
D28A838223CCBD3F00DFE4FC /* CircleProgressModel.swift */, D28A838223CCBD3F00DFE4FC /* CircleProgressModel.swift */,
943784F3236B77BB006A1E82 /* GraphView.swift */, 943784F3236B77BB006A1E82 /* GraphView.swift */,
@ -1329,6 +1365,8 @@
0AA33B392398524F0067DD0F /* Toggle.swift */, 0AA33B392398524F0067DD0F /* Toggle.swift */,
D260105423CEA7DC00764D80 /* MVMCoreUISwitch+Model.swift */, D260105423CEA7DC00764D80 /* MVMCoreUISwitch+Model.swift */,
012CA99D2385A2D3003F810F /* MFView+ModelExtension.swift */, 012CA99D2385A2D3003F810F /* MFView+ModelExtension.swift */,
0AE98BB623FF18E9004C5109 /* ArrowModel.swift */,
0AE98BB423FF18D2004C5109 /* Arrow.swift */,
); );
path = Views; path = Views;
sourceTree = "<group>"; sourceTree = "<group>";
@ -1438,10 +1476,11 @@
D29DF31521ECECC0003B2FB9 /* Fonts */ = { D29DF31521ECECC0003B2FB9 /* Fonts */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
D29DF31621ECECC0003B2FB9 /* NHaasGroteskDSStd-45Lt.otf */, 94CA227A24058533002D6750 /* VerizonNHGeDS-Bold.otf */,
94CA227924058533002D6750 /* VerizonNHGeDS-Regular.otf */,
94CA227824058533002D6750 /* VerizonNHGeTX-Bold.otf */,
94CA227B24058533002D6750 /* VerizonNHGeTX-Regular.otf */,
D29DF31721ECECC0003B2FB9 /* OCRAExtended.ttf */, D29DF31721ECECC0003B2FB9 /* OCRAExtended.ttf */,
D29DF31821ECECC0003B2FB9 /* NHaasGroteskDSStd-75Bd.otf */,
D29DF31921ECECC0003B2FB9 /* NHaasGroteskDSStd-55Rg.otf */,
); );
path = Fonts; path = Fonts;
sourceTree = "<group>"; sourceTree = "<group>";
@ -1522,6 +1561,7 @@
D29770F421F7C6D600B2F0D0 /* TopLabelsAndBottomButtonsViewController.h in Headers */, D29770F421F7C6D600B2F0D0 /* TopLabelsAndBottomButtonsViewController.h in Headers */,
D29DF15421E69760003B2FB9 /* MVMCoreUIPanelButtonProtocol.h in Headers */, D29DF15421E69760003B2FB9 /* MVMCoreUIPanelButtonProtocol.h in Headers */,
D2A514582211C53C00345BFB /* MVMCoreUIMoleculeMappingObject.h in Headers */, D2A514582211C53C00345BFB /* MVMCoreUIMoleculeMappingObject.h in Headers */,
9458C3172406C8FD00930963 /* UIFont+FontWrapping.h in Headers */,
D29DF0D121E404D4003B2FB9 /* MVMCoreUI.h in Headers */, D29DF0D121E404D4003B2FB9 /* MVMCoreUI.h in Headers */,
D29DF29A21E7ADB8003B2FB9 /* MFProgrammaticTableViewController.h in Headers */, D29DF29A21E7ADB8003B2FB9 /* MFProgrammaticTableViewController.h in Headers */,
D29DF11521E6805F003B2FB9 /* UIColor+MFConvenience.h in Headers */, D29DF11521E6805F003B2FB9 /* UIColor+MFConvenience.h in Headers */,
@ -1641,14 +1681,15 @@
isa = PBXResourcesBuildPhase; isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
94CA227F24058534002D6750 /* VerizonNHGeTX-Regular.otf in Resources */,
D29DF2AF21E7B3A4003B2FB9 /* MFTextView.xib in Resources */, D29DF2AF21E7B3A4003B2FB9 /* MFTextView.xib in Resources */,
D29DF31C21ECECC0003B2FB9 /* NHaasGroteskDSStd-75Bd.otf in Resources */,
D29DF31D21ECECC0003B2FB9 /* NHaasGroteskDSStd-55Rg.otf in Resources */,
0A21DB8E235E06EF00C160A2 /* MFDigitTextField.xib in Resources */, 0A21DB8E235E06EF00C160A2 /* MFDigitTextField.xib in Resources */,
94CA227C24058534002D6750 /* VerizonNHGeTX-Bold.otf in Resources */,
D29DF32C21EE8736003B2FB9 /* Localizable.strings in Resources */, D29DF32C21EE8736003B2FB9 /* Localizable.strings in Resources */,
0A21DB86235E06EF00C160A2 /* MFTextField.xib in Resources */, 0A21DB86235E06EF00C160A2 /* MFTextField.xib in Resources */,
D29DF31A21ECECC0003B2FB9 /* NHaasGroteskDSStd-45Lt.otf in Resources */, 94CA227D24058534002D6750 /* VerizonNHGeDS-Regular.otf in Resources */,
D29DF32E21EE8C3D003B2FB9 /* Media.xcassets in Resources */, D29DF32E21EE8C3D003B2FB9 /* Media.xcassets in Resources */,
94CA227E24058534002D6750 /* VerizonNHGeDS-Bold.otf in Resources */,
D29DF31B21ECECC0003B2FB9 /* OCRAExtended.ttf in Resources */, D29DF31B21ECECC0003B2FB9 /* OCRAExtended.ttf in Resources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
@ -1678,7 +1719,7 @@
D2FB151D23A40F1500C20E10 /* MoleculeStackItem.swift in Sources */, D2FB151D23A40F1500C20E10 /* MoleculeStackItem.swift in Sources */,
AA11A41F23F15D3100D7962F /* ListRightVariablePayments.swift in Sources */, AA11A41F23F15D3100D7962F /* ListRightVariablePayments.swift in Sources */,
D29DF29621E7ADB8003B2FB9 /* StackableViewController.m in Sources */, D29DF29621E7ADB8003B2FB9 /* StackableViewController.m in Sources */,
0116A4E5228B19640094F3ED /* RadioButtonModel.swift in Sources */, 0116A4E5228B19640094F3ED /* RadioButtonSelectionHelper.swift in Sources */,
017BEB48236230DB0024EF95 /* MoleculeViewProtocol.swift in Sources */, 017BEB48236230DB0024EF95 /* MoleculeViewProtocol.swift in Sources */,
D2E1FADB2260D3D200AEFD8C /* MVMCoreUIDelegateObject.swift in Sources */, D2E1FADB2260D3D200AEFD8C /* MVMCoreUIDelegateObject.swift in Sources */,
D27CD40E2322EEAF00C1DC07 /* TabsTableViewCell.swift in Sources */, D27CD40E2322EEAF00C1DC07 /* TabsTableViewCell.swift in Sources */,
@ -1698,6 +1739,7 @@
DBC4392122491730001AB423 /* LabelWithInternalButton.swift in Sources */, DBC4392122491730001AB423 /* LabelWithInternalButton.swift in Sources */,
D224798C231450C8003FCCF9 /* HeadlineBodyToggle.swift in Sources */, D224798C231450C8003FCCF9 /* HeadlineBodyToggle.swift in Sources */,
017BEB442362192F0024EF95 /* MVMCoreUIMoleculeMappingObject+ModelExtension.swift in Sources */, 017BEB442362192F0024EF95 /* MVMCoreUIMoleculeMappingObject+ModelExtension.swift in Sources */,
9458C3182406C8FD00930963 /* UIFont+FontWrapping.m in Sources */,
522679C123FE886900906CBA /* ListLeftVariableCheckboxAllTextAndLinks.swift in Sources */, 522679C123FE886900906CBA /* ListLeftVariableCheckboxAllTextAndLinks.swift in Sources */,
9445890C2385BCE300DE9FD4 /* ProgressBarModel.swift in Sources */, 9445890C2385BCE300DE9FD4 /* ProgressBarModel.swift in Sources */,
9445891F2385D2E900DE9FD4 /* CaretViewModel.swift in Sources */, 9445891F2385D2E900DE9FD4 /* CaretViewModel.swift in Sources */,
@ -1727,9 +1769,11 @@
C695A69623C990BC00BFB94E /* DoughnutChart.swift in Sources */, C695A69623C990BC00BFB94E /* DoughnutChart.swift in Sources */,
014AA72D23C5059B006F3E93 /* StackPageTemplateModel.swift in Sources */, 014AA72D23C5059B006F3E93 /* StackPageTemplateModel.swift in Sources */,
D260106123D0C02A00764D80 /* StackItemModelProtocol.swift in Sources */, D260106123D0C02A00764D80 /* StackItemModelProtocol.swift in Sources */,
0AE98BAF23FEF956004C5109 /* ExternalLink.swift in Sources */,
012A88C4238D86E600FE3DA1 /* CarouselItemModelProtocol.swift in Sources */, 012A88C4238D86E600FE3DA1 /* CarouselItemModelProtocol.swift in Sources */,
D2E2A9A123E095AB000B42E6 /* ButtonModelProtocol.swift in Sources */, D2E2A9A123E095AB000B42E6 /* ButtonModelProtocol.swift in Sources */,
94C2D9AB23872EB50006CF46 /* LabelAttributeActionModel.swift in Sources */, 94C2D9AB23872EB50006CF46 /* LabelAttributeActionModel.swift in Sources */,
52B201D324081CFB00D2011E /* ListLeftVariableRadioButtonAndPaymentMethodModel.swift in Sources */,
D2E2A99A23D8D6B4000B42E6 /* HeadlineBodyButtonModel.swift in Sources */, D2E2A99A23D8D6B4000B42E6 /* HeadlineBodyButtonModel.swift in Sources */,
014AA73123C5059B006F3E93 /* ListPageTemplateModel.swift in Sources */, 014AA73123C5059B006F3E93 /* ListPageTemplateModel.swift in Sources */,
017BEB4023620A230024EF95 /* TextFieldModel.swift in Sources */, 017BEB4023620A230024EF95 /* TextFieldModel.swift in Sources */,
@ -1801,6 +1845,7 @@
D29DF17A21E69E1F003B2FB9 /* MFCustomButton.m in Sources */, D29DF17A21E69E1F003B2FB9 /* MFCustomButton.m in Sources */,
017BEB7B236763000024EF95 /* LineModel.swift in Sources */, 017BEB7B236763000024EF95 /* LineModel.swift in Sources */,
94C2D9A523872C350006CF46 /* LabelAttributeFontModel.swift in Sources */, 94C2D9A523872C350006CF46 /* LabelAttributeFontModel.swift in Sources */,
011D95AF2407266E000E3791 /* RadioButtonModel.swift in Sources */,
017BEB7F23676E870024EF95 /* MoleculeObjectMapping.swift in Sources */, 017BEB7F23676E870024EF95 /* MoleculeObjectMapping.swift in Sources */,
D274CA332236A78900B01B62 /* FooterView.swift in Sources */, D274CA332236A78900B01B62 /* FooterView.swift in Sources */,
D29DF2BF21E7BEA4003B2FB9 /* MVMCoreUITabBarPageControlViewController.m in Sources */, D29DF2BF21E7BEA4003B2FB9 /* MVMCoreUITabBarPageControlViewController.m in Sources */,
@ -1834,11 +1879,13 @@
8D24041123E7FB9E009E23BE /* ListLeftVariableIconWithRightCaret.swift in Sources */, 8D24041123E7FB9E009E23BE /* ListLeftVariableIconWithRightCaret.swift in Sources */,
D2E1FAE12268E81D00AEFD8C /* MoleculeListTemplate.swift in Sources */, D2E1FAE12268E81D00AEFD8C /* MoleculeListTemplate.swift in Sources */,
525019E72406853600EED91C /* ListFourColumnDataUsageDivider.swift in Sources */, 525019E72406853600EED91C /* ListFourColumnDataUsageDivider.swift in Sources */,
0AE98BB323FF0934004C5109 /* ExternalLinkModel.swift in Sources */,
DB06250B2293456500B72DD3 /* LeftRightLabelView.swift in Sources */, DB06250B2293456500B72DD3 /* LeftRightLabelView.swift in Sources */,
0A21DB89235E06EF00C160A2 /* MFMdnTextField.m in Sources */, 0A21DB89235E06EF00C160A2 /* MFMdnTextField.m in Sources */,
D224798A2314445E003FCCF9 /* LabelToggle.swift in Sources */, D224798A2314445E003FCCF9 /* LabelToggle.swift in Sources */,
D22D1F47220496A30077CEC0 /* MVMCoreUISwitch.m in Sources */, D22D1F47220496A30077CEC0 /* MVMCoreUISwitch.m in Sources */,
C695A67F23C9830600BFB94E /* UnOrderedListModel.swift in Sources */, C695A67F23C9830600BFB94E /* UnOrderedListModel.swift in Sources */,
0AE98BB523FF18D2004C5109 /* Arrow.swift in Sources */,
017BEB4223620AD20024EF95 /* FormModelProtocol.swift in Sources */, 017BEB4223620AD20024EF95 /* FormModelProtocol.swift in Sources */,
D2D90B442404789000DD6EC9 /* MoleculeContainerProtocol.swift in Sources */, D2D90B442404789000DD6EC9 /* MoleculeContainerProtocol.swift in Sources */,
012A88DB238ED45900FE3DA1 /* CarouselModel.swift in Sources */, 012A88DB238ED45900FE3DA1 /* CarouselModel.swift in Sources */,
@ -1863,12 +1910,14 @@
01EB369323609801006832FA /* HeaderModel.swift in Sources */, 01EB369323609801006832FA /* HeaderModel.swift in Sources */,
D2E1FADF2268B8E700AEFD8C /* ThreeLayerTableViewController.swift in Sources */, D2E1FADF2268B8E700AEFD8C /* ThreeLayerTableViewController.swift in Sources */,
0A21DB83235DFBC500C160A2 /* MdnEntryField.swift in Sources */, 0A21DB83235DFBC500C160A2 /* MdnEntryField.swift in Sources */,
0AE98BB723FF18E9004C5109 /* ArrowModel.swift in Sources */,
D28A837D23CCA86A00DFE4FC /* TabsListItemModel.swift in Sources */, D28A837D23CCA86A00DFE4FC /* TabsListItemModel.swift in Sources */,
012A88C6238DA34000FE3DA1 /* ModuleMoleculeModel.swift in Sources */, 012A88C6238DA34000FE3DA1 /* ModuleMoleculeModel.swift in Sources */,
94C2D9A123872BCC0006CF46 /* LabelAttributeUnderlineModel.swift in Sources */, 94C2D9A123872BCC0006CF46 /* LabelAttributeUnderlineModel.swift in Sources */,
D20A9A5E2243D3E300ADE781 /* TwoButtonView.swift in Sources */, D20A9A5E2243D3E300ADE781 /* TwoButtonView.swift in Sources */,
D2B1E3E522F37D6A0065F95C /* ImageHeadlineBody.swift in Sources */, D2B1E3E522F37D6A0065F95C /* ImageHeadlineBody.swift in Sources */,
0A21DB94235E24ED00C160A2 /* DigitEntryField.swift in Sources */, 0A21DB94235E24ED00C160A2 /* DigitEntryField.swift in Sources */,
52B201D224081CFB00D2011E /* ListLeftVariableRadioButtonAndPaymentMethod.swift in Sources */,
D26C5A6B23F4A40D007AEECE /* ListItemModel.swift in Sources */, D26C5A6B23F4A40D007AEECE /* ListItemModel.swift in Sources */,
0A21DB8D235E06EF00C160A2 /* MFDigitTextField.m in Sources */, 0A21DB8D235E06EF00C160A2 /* MFDigitTextField.m in Sources */,
94AF4A4323E9D19E00676048 /* MFCaretView.m in Sources */, 94AF4A4323E9D19E00676048 /* MFCaretView.m in Sources */,

View File

@ -125,7 +125,7 @@ open class CaretLink: Button, MVMCoreUIViewConstrainingProtocol {
setTitleColor(disabledColor, for: .disabled) setTitleColor(disabledColor, for: .disabled)
} }
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
guard let caretLinkModel = model as? CaretLinkModel else { return } guard let caretLinkModel = model as? CaretLinkModel else { return }
if let color = caretLinkModel.backgroundColor { if let color = caretLinkModel.backgroundColor {
backgroundColor = color.uiColor backgroundColor = color.uiColor
@ -147,7 +147,7 @@ open class CaretLink: Button, MVMCoreUIViewConstrainingProtocol {
return .leading return .leading
} }
open override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return 10.5 return 10.5
} }
} }

View File

@ -0,0 +1,57 @@
//
// ExternalLink.swift
// MVMCoreUI
//
// Created by Kevin Christiano on 2/20/20.
// Copyright © 2020 Verizon Wireless. All rights reserved.
//
import UIKit
open class ExternalLink: Link {
//--------------------------------------------------
// MARK: - Properties
//--------------------------------------------------
public var exportImageView: UIImageView?
//--------------------------------------------------
// MARK: - ModelMoleculeViewProtocol
//--------------------------------------------------
open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.set(with: model, delegateObject, additionalData)
guard let model = model as? ExternalLinkModel else { return }
exportImageView?.tintColor = model.textColor.uiColor
}
//--------------------------------------------------
// MARK: - MVMCoreViewProtocol
//--------------------------------------------------
open override func setupView() {
super.setupView()
let image = MVMCoreUIUtility.imageNamed("externalLink")
exportImageView = UIImageView(image: image?.withRenderingMode(.alwaysTemplate))
guard let exportIcon = exportImageView else { return }
exportIcon.contentMode = .scaleAspectFit
exportIcon.translatesAutoresizingMaskIntoConstraints = false
addSubview(exportIcon)
trailingAnchor.constraint(greaterThanOrEqualTo: exportIcon.trailingAnchor).isActive = true
if let titleLabel = titleLabel {
let dimension = round(0.6 * titleLabel.font.pointSize)
exportIcon.heightAnchor.constraint(equalToConstant: dimension).isActive = true
exportIcon.widthAnchor.constraint(equalToConstant: dimension).isActive = true
exportIcon.leadingAnchor.constraint(equalTo: titleLabel.trailingAnchor, constant: PaddingOne).isActive = true
exportIcon.bottomAnchor.constraint(equalTo: titleLabel.lastBaselineAnchor).isActive = true
}
}
}

View File

@ -0,0 +1,16 @@
//
// ExternalLinkModel.swift
// MVMCoreUI
//
// Created by Kevin Christiano on 2/20/20.
// Copyright © 2020 Verizon Wireless. All rights reserved.
//
import UIKit
open class ExternalLinkModel: LinkModel {
override open class var identifier: String {
return "externalLink"
}
}

View File

@ -40,9 +40,10 @@ import UIKit
// MARK: - ModelMoleculeViewProtocol // MARK: - ModelMoleculeViewProtocol
//-------------------------------------------------- //--------------------------------------------------
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let model = model as? LinkModel else { return } guard let model = model as? LinkModel else { return }
setTitle(model.title, for: .normal) setTitle(model.title, for: .normal)
setTitleColor(model.textColor.uiColor, for: .normal) setTitleColor(model.textColor.uiColor, for: .normal)
setTitleColor(model.disabledColor.uiColor, for: .disabled) setTitleColor(model.disabledColor.uiColor, for: .disabled)
@ -50,7 +51,7 @@ import UIKit
set(with: model.action, delegateObject: delegateObject, additionalData: additionalData) set(with: model.action, delegateObject: delegateObject, additionalData: additionalData)
} }
open override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return 31.0 return 31.0
} }
} }
@ -58,7 +59,7 @@ import UIKit
// MARK: - MVMCoreViewProtocol // MARK: - MVMCoreViewProtocol
extension Link { extension Link {
public override func updateView(_ size: CGFloat) { open override func updateView(_ size: CGFloat) {
super.updateView(size) super.updateView(size)
DispatchQueue.main.async { [weak self] in DispatchQueue.main.async { [weak self] in
guard let self = self else { return } guard let self = self else { return }
@ -70,7 +71,7 @@ extension Link {
} }
} }
public override func setupView() { open override func setupView() {
super.setupView() super.setupView()
backgroundColor = .clear backgroundColor = .clear
contentMode = .redraw contentMode = .redraw
@ -86,7 +87,7 @@ extension Link {
// MARK: - MVMCoreUIViewConstrainingProtocol // MARK: - MVMCoreUIViewConstrainingProtocol
extension Link: MVMCoreUIViewConstrainingProtocol { extension Link: MVMCoreUIViewConstrainingProtocol {
public func horizontalAlignment() -> UIStackView.Alignment { open func horizontalAlignment() -> UIStackView.Alignment {
return .leading return .leading
} }
} }

View File

@ -8,12 +8,14 @@
import UIKit import UIKit
public class LinkModel: ButtonModelProtocol, MoleculeModelProtocol { open class LinkModel: ButtonModelProtocol, MoleculeModelProtocol {
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Properties // MARK: - Properties
//-------------------------------------------------- //--------------------------------------------------
public static var identifier: String = "link" public class var identifier: String {
return "link"
}
public var backgroundColor: Color? public var backgroundColor: Color?
public var title: String public var title: String

View File

@ -9,7 +9,9 @@
import Foundation import Foundation
public extension MFCustomButton { public extension MFCustomButton {
func set(with action: ActionModelProtocol, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) { func set(with action: ActionModelProtocol, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) {
buttonDelegate = delegateObject?.buttonDelegate buttonDelegate = delegateObject?.buttonDelegate
add({ [weak self] sender in add({ [weak self] sender in
guard let self = self else { return } guard let self = self else { return }

View File

@ -119,9 +119,9 @@ open class PillButton: Button, MVMCoreUIViewConstrainingProtocol, FormValidation
} }
// MARK: - ModelMoleculeViewProtocol // MARK: - ModelMoleculeViewProtocol
open override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
// The button will get styled in the enable check in super. // The button will get styled in the enable check in super.
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let model = model as? ButtonModel else { return } guard let model = model as? ButtonModel else { return }
setTitle(model.title, for: .normal) setTitle(model.title, for: .normal)
@ -132,8 +132,8 @@ open class PillButton: Button, MVMCoreUIViewConstrainingProtocol, FormValidation
} }
} }
open override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
PillButton.getHeight(for: (molecule as? ButtonModel)?.size, size: MVMCoreUIUtility.getWidth()) PillButton.getHeight(for: (model as? ButtonModel)?.size, size: MVMCoreUIUtility.getWidth())
} }
// MARK: - MVMCoreViewProtocol // MARK: - MVMCoreViewProtocol

View File

@ -10,8 +10,9 @@ import Foundation
// temporary until link is finished // temporary until link is finished
extension PrimaryButton: ModelMoleculeViewProtocol { extension PrimaryButton: ModelMoleculeViewProtocol {
public func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { public func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) {
guard let model = model as? ButtonModel else { return } guard let model = model as? ButtonModel else { return }
setTitle(model.title, for: .normal) setTitle(model.title, for: .normal)
backgroundColor = model.backgroundColor?.uiColor backgroundColor = model.backgroundColor?.uiColor
@ -23,7 +24,6 @@ extension PrimaryButton: ModelMoleculeViewProtocol {
FormValidator.setupValidation(molecule: selfForm, delegate: delegateObject?.formValidationProtocol) FormValidator.setupValidation(molecule: selfForm, delegate: delegateObject?.formValidationProtocol)
} }
if let style = model.style { if let style = model.style {
switch style { switch style {
case .primary: case .primary:
@ -32,6 +32,7 @@ extension PrimaryButton: ModelMoleculeViewProtocol {
setAsSecondaryCustom() setAsSecondaryCustom()
} }
} }
if let size = model.size { if let size = model.size {
switch size { switch size {
case .standard: case .standard:

View File

@ -69,12 +69,12 @@ import UIKit
dropDownCaretView.centerYAnchor.constraint(equalTo: container.centerYAnchor).isActive = true dropDownCaretView.centerYAnchor.constraint(equalTo: container.centerYAnchor).isActive = true
} }
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let model = model as? BaseDropdownEntryFieldModel else { return } guard let model = model as? BaseDropdownEntryFieldModel else { return }
dropDownCaretView.setWithModel(model.caretView, delegateObject, additionalData) dropDownCaretView.setOptional(with: model.caretView, delegateObject, additionalData)
} }
} }

View File

@ -111,8 +111,8 @@ import UIKit
setTextWith(date: datePicker?.date) setTextWith(date: datePicker?.date)
} }
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let model = model as? DateDropdownEntryFieldModel else { return } guard let model = model as? DateDropdownEntryFieldModel else { return }

View File

@ -328,7 +328,7 @@ import UIKit
} }
} }
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
guard let model = model as? DigitEntryFieldModel else { return } guard let model = model as? DigitEntryFieldModel else { return }
@ -341,7 +341,7 @@ import UIKit
MVMCoreUICommonViewsUtility.addDismissToolbar(digitBox.digitField, delegate: delegateObject as? UITextFieldDelegate) MVMCoreUICommonViewsUtility.addDismissToolbar(digitBox.digitField, delegate: delegateObject as? UITextFieldDelegate)
} }
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
} }
} }

View File

@ -240,13 +240,13 @@ import UIKit
entryFieldContainer.reset() entryFieldContainer.reset()
} }
open override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
self.delegateObject = delegateObject self.delegateObject = delegateObject
guard let model = model as? EntryFieldModel else { return } guard let model = model as? EntryFieldModel else { return }
entryFieldContainer.setWithModel(model, delegateObject, additionalData) entryFieldContainer.set(with: model, delegateObject, additionalData)
title = model.title title = model.title
feedback = model.feedback feedback = model.feedback

View File

@ -95,8 +95,8 @@ open class ItemDropdownEntryField: BaseDropdownEntryField {
} }
} }
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let model = model as? ItemDropdownEntryFieldModel else { return } guard let model = model as? ItemDropdownEntryFieldModel else { return }

View File

@ -16,7 +16,7 @@ enum TextType: String {
} }
extension MFTextField: ModelMoleculeViewProtocol { extension MFTextField: ModelMoleculeViewProtocol {
// //
public func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
//TODO: Need to create setWithModel in ViewConstraining View //TODO: Need to create setWithModel in ViewConstraining View
#warning("This below call should be repaced with super.setWithModel once we get rid of ViewConstrainingView.") #warning("This below call should be repaced with super.setWithModel once we get rid of ViewConstrainingView.")
//TODO: This below call should be repaced with super.setWithModel once we get rid of ViewConstrainingView. //TODO: This below call should be repaced with super.setWithModel once we get rid of ViewConstrainingView.

View File

@ -277,8 +277,8 @@ import UIKit
resignFirstResponder() resignFirstResponder()
} }
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let model = model as? TextEntryFieldModel else { return } guard let model = model as? TextEntryFieldModel else { return }

View File

@ -0,0 +1,100 @@
//
// Arrow.swift
// MVMCoreUI
//
// Created by Kevin Christiano on 2/20/20.
// Copyright © 2020 Verizon Wireless. All rights reserved.
//
import UIKit
open class Arrow: View {
//--------------------------------------------------
// MARK: - Properties
//--------------------------------------------------
var arrowLayer = CAShapeLayer()
public var arrowModel: ArrowModel? {
return model as? ArrowModel
}
//--------------------------------------------------
// MARK: - Constraints
//--------------------------------------------------
public var heightConstraint: NSLayoutConstraint?
public var widthConstraint: NSLayoutConstraint?
public func pinHeightAndWidth(constant: CGFloat = 12) {
heightConstraint = heightAnchor.constraint(equalToConstant: constant)
widthConstraint = widthAnchor.constraint(equalToConstant: constant)
heightConstraint?.isActive = true
widthConstraint?.isActive = true
}
//--------------------------------------------------
// MARK: - Lifecycle
//--------------------------------------------------
open override func setupView() {
super.setupView()
drawShapeLayer()
isOpaque = false
layer.addSublayer(arrowLayer)
arrowLayer.strokeEnd = 1
}
//--------------------------------------------------
// MARK: - Drawing
//--------------------------------------------------
open override func draw(_ rect: CGRect) {
super.draw(rect)
arrowLayer.transform = CATransform3DIdentity
drawShapeLayer()
if let degrees = arrowModel?.degrees {
let radians = CGFloat(degrees * Float.pi / 180)
arrowLayer.transform = CATransform3DMakeRotation(-radians, 0.0, 0.0, 1.0)
}
}
private func drawShapeLayer() {
arrowLayer.frame = bounds
arrowLayer.strokeColor = arrowModel?.color.cgColor
arrowLayer.fillColor = UIColor.clear.cgColor
arrowLayer.path = arrowPath()
arrowLayer.lineJoin = .miter
arrowLayer.lineCap = .butt
arrowLayer.lineWidth = arrowModel?.lineWidth ?? 1
}
private func arrowPath() -> CGPath {
let length = max(bounds.size.height, bounds.size.width)
let inset = (arrowModel?.lineWidth ?? 1) / 2
let midLength = length / 2
var startPoint = CGPoint(x: midLength, y: inset)
let pivotPoint = CGPoint(x: length - inset, y: midLength)
var endPoint = CGPoint(x: midLength, y: length - inset)
let bezierPath = UIBezierPath()
bezierPath.move(to: startPoint)
bezierPath.addLine(to: pivotPoint)
bezierPath.addLine(to: endPoint)
startPoint = CGPoint(x: inset, y: midLength)
endPoint = CGPoint(x: length - inset, y: midLength)
bezierPath.move(to: startPoint)
bezierPath.addLine(to: pivotPoint)
return bezierPath.cgPath
}
}

View File

@ -0,0 +1,80 @@
//
// ArrowModel.swift
// MVMCoreUI
//
// Created by Kevin Christiano on 2/20/20.
// Copyright © 2020 Verizon Wireless. All rights reserved.
//
import UIKit
open class ArrowModel: MoleculeModelProtocol {
//--------------------------------------------------
// MARK: - Properties
//--------------------------------------------------
public static var identifier: String = "arrow"
public var backgroundColor: Color?
public var color: Color = Color(uiColor: .mvmBlack)
public var degrees: Float = 0
public var lineWidth: CGFloat = 1
public var height: CGFloat = 12
public var width: CGFloat = 12
//--------------------------------------------------
// MARK: - Keys
//--------------------------------------------------
private enum CodingKeys: String, CodingKey {
case moleculeName
case backgroundColor
case color
case degrees
case size
case lineWidth
case height
case width
}
//--------------------------------------------------
// MARK: - Codec
//--------------------------------------------------
required public init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor)
if let color = try typeContainer.decodeIfPresent(Color.self, forKey: .color) {
self.color = color
}
if let degrees = try typeContainer.decodeIfPresent(Float.self, forKey: .degrees) {
self.degrees = degrees
}
if let lineWidth = try typeContainer.decodeIfPresent(CGFloat.self, forKey: .lineWidth) {
self.lineWidth = lineWidth
}
if let height = try typeContainer.decodeIfPresent(CGFloat.self, forKey: .height) {
self.lineWidth = height
}
if let width = try typeContainer.decodeIfPresent(CGFloat.self, forKey: .width) {
self.width = width
}
}
public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(moleculeName, forKey: .moleculeName)
try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor)
try container.encode(color, forKey: .color)
try container.encode(degrees, forKey: .degrees)
try container.encodeIfPresent(backgroundColor, forKey: .lineWidth)
try container.encode(width, forKey: .width)
try container.encode(height, forKey: .height)
}
}

View File

@ -184,12 +184,12 @@ open class CaretView: View {
public override func setWithJSON(_ json: [AnyHashable : Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) { public override func setWithJSON(_ json: [AnyHashable : Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) {
guard let json = json, let model = try? Self.decodeJSONToModel(json: json, type: CaretViewModel.self) else { return } guard let json = json, let model = try? Self.decodeJSONToModel(json: json, type: CaretViewModel.self) else { return }
setWithModel(model, delegateObject, additionalData) set(with: model, delegateObject, additionalData)
} }
//MARK: - MVMCoreMoleculeViewProtocol //MARK: - MVMCoreMoleculeViewProtocol
override public func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { override public func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let caretModel = model as? CaretViewModel else { guard let caretModel = model as? CaretViewModel else {
return return
} }

View File

@ -395,7 +395,7 @@ import MVMCore
heightConstraint?.constant = dimension heightConstraint?.constant = dimension
} }
layoutIfNeeded() //layoutIfNeeded()
} }
public override func setWithJSON(_ json: [AnyHashable: Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) { public override func setWithJSON(_ json: [AnyHashable: Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) {
@ -456,8 +456,8 @@ import MVMCore
} }
} }
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let model = model as? CheckboxModel else { return } guard let model = model as? CheckboxModel else { return }

View File

@ -115,15 +115,15 @@
} }
} }
open override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
guard let checkBoxWithLabelModel = model as? CheckboxLabelModel else { return } guard let checkBoxWithLabelModel = model as? CheckboxLabelModel else { return }
if let checkboxAlignment = checkBoxWithLabelModel.checkboxAlignment { if let checkboxAlignment = checkBoxWithLabelModel.checkboxAlignment {
alignCheckbox(checkboxAlignment) alignCheckbox(checkboxAlignment)
} }
checkbox.setWithModel(checkBoxWithLabelModel.checkbox, delegateObject, additionalData) checkbox.set(with: checkBoxWithLabelModel.checkbox, delegateObject, additionalData)
label.setWithModel(checkBoxWithLabelModel.label, delegateObject, additionalData) label.set(with: checkBoxWithLabelModel.label, delegateObject, additionalData)
} }
} }

View File

@ -89,12 +89,12 @@ open class DashLine: View {
open override func setWithJSON(_ json: [AnyHashable: Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) { open override func setWithJSON(_ json: [AnyHashable: Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) {
guard let json = json, let model = try? Self.decodeJSONToModel(json: json, type: DashLineModel.self) else { return } guard let json = json, let model = try? Self.decodeJSONToModel(json: json, type: DashLineModel.self) else { return }
setWithModel(model, delegateObject, additionalData) set(with: model, delegateObject, additionalData)
} }
//MARK: - MVMCoreMoleculeViewProtocol //MARK: - MVMCoreMoleculeViewProtocol
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let dashLineModel = dashModel else { guard let dashLineModel = dashModel else {
return return
} }

View File

@ -26,8 +26,8 @@ import UIKit
widthAnchor.constraint(equalTo: heightAnchor).isActive = true widthAnchor.constraint(equalTo: heightAnchor).isActive = true
} }
override open func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { override open func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let model = model as? CircleProgressModel else { return } guard let model = model as? CircleProgressModel else { return }
createGraphCircle(model) createGraphCircle(model)
rotationAnimation(model) rotationAnimation(model)
@ -35,7 +35,7 @@ import UIKit
override open func setWithJSON(_ json: [AnyHashable : Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) { override open func setWithJSON(_ json: [AnyHashable : Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) {
guard let json = json, let model = try? Self.decodeJSONToModel(json: json, type: CircleProgressModel.self) else { return } guard let json = json, let model = try? Self.decodeJSONToModel(json: json, type: CircleProgressModel.self) else { return }
setWithModel(model, delegateObject, additionalData) set(with: model, delegateObject, additionalData)
} }
class func getAngle(_ piValue: Double) -> Double { class func getAngle(_ piValue: Double) -> Double {

View File

@ -132,6 +132,89 @@ public typealias ActionBlock = () -> ()
// MARK: - Factory Functions // MARK: - Factory Functions
//------------------------------------------------------ //------------------------------------------------------
/// Title 2XLarge
@objc public static func createLabelTitle2XLarge(_ scale: Bool) -> Label {
let label = Label.label()
label.styleTitle2XLarge(scale)
return label
}
/// TitleXLarge
@objc public static func createLabelTitleXLarge(_ scale: Bool) -> Label {
let label = Label.label()
label.styleTitleXLarge(scale)
return label
}
/// BoldTitleLarge
@objc public static func createLabelBoldTitleLarge(_ scale: Bool) -> Label {
let label = Label.label()
label.styleBoldTitleLarge(scale)
return label
}
/// RegularTitleLarge
@objc public static func createLabelRegularTitleLarge(_ scale: Bool) -> Label {
let label = Label.label()
label.styleRegularTitleLarge(scale)
return label
}
/// BoldTitleMedium
@objc public static func createLabelBoldTitleMedium(_ scale: Bool) -> Label {
let label = Label.label()
label.styleBoldTitleMedium(scale)
return label
}
/// RegularTitleMedium
@objc public static func createLabelRegularTitleMedium(_ scale: Bool) -> Label {
let label = Label.label()
label.styleRegularTitleMedium(scale)
return label
}
/// BoldBodyLarge
@objc public static func createLabelBoldBodyLarge(_ scale: Bool) -> Label {
let label = Label.label()
label.styleBoldBodyLarge(scale)
return label
}
/// RegularBodyLarge
@objc public static func createLabelRegularBodyLarge(_ scale: Bool) -> Label {
let label = Label.label()
label.styleRegularBodyLarge(scale)
return label
}
/// BoldBodySmall
@objc public static func createLabelBoldBodySmall(_ scale: Bool) -> Label {
let label = Label.label()
label.styleBoldBodySmall(scale)
return label
}
/// RegularBodySmall
@objc public static func createLabelRegularBodySmall(_ scale: Bool) -> Label {
let label = Label.label()
label.styleRegularBodySmall(scale)
return label
}
/// BoldMicro
@objc public static func createLabelBoldMicro(_ scale: Bool) -> Label {
let label = Label.label()
label.styleBoldMicro(scale)
return label
}
/// RegularMicro
@objc public static func createLabelRegularMicro(_ scale: Bool) -> Label {
let label = Label.label()
label.styleRegularMicro(scale)
return label
}
//2.0 fonts init methods
/// H1 -> HeadlineLarge /// H1 -> HeadlineLarge
@objc public static func commonLabelH1(_ scale: Bool) -> Label { @objc public static func commonLabelH1(_ scale: Bool) -> Label {
let label = Label.label() let label = Label.label()
@ -219,7 +302,7 @@ public typealias ActionBlock = () -> ()
case left case left
} }
public func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
clauses = [] clauses = []
@ -267,16 +350,16 @@ public typealias ActionBlock = () -> ()
if let fontName = labelModel.fontName { if let fontName = labelModel.fontName {
font = MFFonts.mfFont(withName: fontName, size: fontSize ?? standardFontSize) font = MFFonts.mfFont(withName: fontName, size: fontSize ?? standardFontSize)
} else if let fontSize = fontSize { } else if let fontSize = fontSize {
font = font.withSize(fontSize) font = font.updateSize(fontSize)
} }
} }
if let textColorHex = labelModel.textColor, !textColorHex.isEmpty { if let color = labelModel.textColor {
textColor = UIColor.mfGet(forHex: textColorHex) textColor = color.uiColor
} }
if let attributes = labelModel.attributes, let labelText = text { if let attributes = labelModel.attributes, let labelText = text {
let attributedString = NSMutableAttributedString(string: labelText, attributes: [NSAttributedString.Key.font: font.withSize(standardFontSize), NSAttributedString.Key.foregroundColor: textColor as UIColor]) let attributedString = NSMutableAttributedString(string: labelText, attributes: [NSAttributedString.Key.font: font.updateSize(standardFontSize), NSAttributedString.Key.foregroundColor: textColor as UIColor])
for attribute in attributes { for attribute in attributes {
let range = NSRange(location: attribute.location, length: attribute.length) let range = NSRange(location: attribute.location, length: attribute.length)
@ -324,7 +407,7 @@ public typealias ActionBlock = () -> ()
if let fontName = fontAtt.name { if let fontName = fontAtt.name {
font = MFFonts.mfFont(withName: fontName, size: fontSize ?? self.font.pointSize) font = MFFonts.mfFont(withName: fontName, size: fontSize ?? self.font.pointSize)
} else if let fontSize = fontSize { } else if let fontSize = fontSize {
font = self.font.withSize(fontSize) font = self.font.updateSize(fontSize)
} }
if let font = font { if let font = font {
attributedString.removeAttribute(.font, range: range) attributedString.removeAttribute(.font, range: range)
@ -390,7 +473,7 @@ public typealias ActionBlock = () -> ()
if let fontName = json?.optionalStringForKey("fontName") { if let fontName = json?.optionalStringForKey("fontName") {
label.font = MFFonts.mfFont(withName: fontName, size: fontSize ?? mvmLabel?.standardFontSize ?? label.font.pointSize) label.font = MFFonts.mfFont(withName: fontName, size: fontSize ?? mvmLabel?.standardFontSize ?? label.font.pointSize)
} else if let fontSize = fontSize { } else if let fontSize = fontSize {
label.font = label.font.withSize(fontSize) label.font = label.font.updateSize(fontSize)
} }
} }
@ -400,7 +483,7 @@ public typealias ActionBlock = () -> ()
if let attributes = json?.optionalArrayForKey("attributes"), let labelText = label.text { if let attributes = json?.optionalArrayForKey("attributes"), let labelText = label.text {
let attributedString = NSMutableAttributedString(string: labelText, let attributedString = NSMutableAttributedString(string: labelText,
attributes: [NSAttributedString.Key.font: mvmLabel?.font.withSize(mvmLabel!.standardFontSize) ?? label.font as UIFont, attributes: [NSAttributedString.Key.font: mvmLabel?.font.updateSize(mvmLabel!.standardFontSize) ?? label.font as UIFont,
NSAttributedString.Key.foregroundColor: label.textColor as UIColor]) NSAttributedString.Key.foregroundColor: label.textColor as UIColor])
for case let attribute as [String: Any] in attributes { for case let attribute as [String: Any] in attributes {
guard let attributeType = attribute.optionalStringForKey(KeyType), guard let attributeType = attribute.optionalStringForKey(KeyType),
@ -452,7 +535,7 @@ public typealias ActionBlock = () -> ()
if let fontName = attribute.optionalStringForKey("name") { if let fontName = attribute.optionalStringForKey("name") {
font = MFFonts.mfFont(withName: fontName, size: fontSize ?? mvmLabel?.standardFontSize ?? label.font.pointSize) font = MFFonts.mfFont(withName: fontName, size: fontSize ?? mvmLabel?.standardFontSize ?? label.font.pointSize)
} else if let fontSize = fontSize { } else if let fontSize = fontSize {
font = label.font.withSize(fontSize) font = label.font.updateSize(fontSize)
} }
if let font = font { if let font = font {
@ -481,6 +564,68 @@ public typealias ActionBlock = () -> ()
// MARK: - Methods // MARK: - Methods
//------------------------------------------------------ //------------------------------------------------------
//mva 3.0 font
@objc public func styleTitle2XLarge(_ scale: Bool) {
MFStyler.styleLabelTitle2XLarge(self, genericScaling: false)
setScale(scale)
}
@objc public func styleTitleXLarge(_ scale: Bool) {
MFStyler.styleLabelTitleXLarge(self, genericScaling: false)
setScale(scale)
}
@objc public func styleBoldTitleLarge(_ scale: Bool) {
MFStyler.styleLabelBoldTitleLarge(self, genericScaling: false)
setScale(scale)
}
@objc public func styleRegularTitleLarge(_ scale: Bool) {
MFStyler.styleLabelRegularTitleLarge(self, genericScaling: false)
setScale(scale)
}
@objc public func styleBoldTitleMedium(_ scale: Bool) {
MFStyler.styleLabelBoldTitleMedium(self, genericScaling: false)
setScale(scale)
}
@objc public func styleRegularTitleMedium(_ scale: Bool) {
MFStyler.styleLabelRegularTitleMedium(self, genericScaling: false)
setScale(scale)
}
@objc public func styleBoldBodyLarge(_ scale: Bool) {
MFStyler.styleLabelBoldBodyLarge(self, genericScaling: false)
setScale(scale)
}
@objc public func styleRegularBodyLarge(_ scale: Bool) {
MFStyler.styleLabelRegularBodyLarge(self, genericScaling: false)
setScale(scale)
}
@objc public func styleBoldBodySmall(_ scale: Bool) {
MFStyler.styleLabelBoldBodySmall(self, genericScaling: false)
setScale(scale)
}
@objc public func styleRegularBodySmall(_ scale: Bool) {
MFStyler.styleLabelRegularBodySmall(self, genericScaling: false)
setScale(scale)
}
@objc public func styleBoldMicro(_ scale: Bool) {
MFStyler.styleLabelBoldMicro(self, genericScaling: false)
setScale(scale)
}
@objc public func styleRegularMicro(_ scale: Bool) {
MFStyler.styleLabelRegularMicro(self, genericScaling: false)
setScale(scale)
}
//2.0 fonts
@objc public func styleH1(_ scale: Bool) { @objc public func styleH1(_ scale: Bool) {
MFStyler.styleLabelH1(self, genericScaling: false) MFStyler.styleLabelH1(self, genericScaling: false)
setScale(scale) setScale(scale)
@ -532,7 +677,7 @@ public typealias ActionBlock = () -> ()
originalAttributedString.enumerateAttribute(.font, in: NSRange(location: 0, length: originalAttributedString.length), options: []) { value, range, stop in originalAttributedString.enumerateAttribute(.font, in: NSRange(location: 0, length: originalAttributedString.length), options: []) { value, range, stop in
if let fontObj = value as? UIFont, let stylerSize = MFStyler.sizeObjectGeneric(forCurrentDevice: fontObj.pointSize)?.getValueBased(onSize: size) { if let fontObj = value as? UIFont, let stylerSize = MFStyler.sizeObjectGeneric(forCurrentDevice: fontObj.pointSize)?.getValueBased(onSize: size) {
attributedString.addAttribute(.font, value: fontObj.withSize(stylerSize) as Any, range: range) attributedString.addAttribute(.font, value: fontObj.updateSize(stylerSize) as Any, range: range)
} }
} }
@ -548,7 +693,7 @@ public typealias ActionBlock = () -> ()
attributedText = attributedString attributedText = attributedString
} else if !MVMCoreGetterUtility.fequal(a: Float(standardFontSize), b: 0.0), let sizeObject = sizeObject ?? MFStyler.sizeObjectGeneric(forCurrentDevice: standardFontSize) { } else if !MVMCoreGetterUtility.fequal(a: Float(standardFontSize), b: 0.0), let sizeObject = sizeObject ?? MFStyler.sizeObjectGeneric(forCurrentDevice: standardFontSize) {
font = font.withSize(sizeObject.getValueBased(onSize: size)) font = font.updateSize(sizeObject.getValueBased(onSize: size))
} }
} }

View File

@ -8,7 +8,7 @@
import Foundation import Foundation
@objcMembers open class LabelAttributeModel: Model { @objcMembers open class LabelAttributeModel: ModelProtocol {
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Properties // MARK: - Properties
//-------------------------------------------------- //--------------------------------------------------

View File

@ -18,7 +18,7 @@ import Foundation
public var backgroundColor: Color? public var backgroundColor: Color?
public var text: String public var text: String
public var accessibilityText: String? public var accessibilityText: String?
public var textColor: String? public var textColor: Color?
public var fontStyle: String? public var fontStyle: String?
public var fontName: String? public var fontName: String?
public var fontSize: CGFloat? public var fontSize: CGFloat?
@ -68,7 +68,7 @@ import Foundation
let typeContainer = try decoder.container(keyedBy: CodingKeys.self) let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
text = try typeContainer.decode(String.self, forKey: .text) text = try typeContainer.decode(String.self, forKey: .text)
accessibilityText = try typeContainer.decodeIfPresent(String.self, forKey: .accessibilityText) accessibilityText = try typeContainer.decodeIfPresent(String.self, forKey: .accessibilityText)
textColor = try typeContainer.decodeIfPresent(String.self, forKey: .textColor) textColor = try typeContainer.decodeIfPresent(Color.self, forKey: .textColor)
backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor) backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor)
fontStyle = try typeContainer.decodeIfPresent(String.self, forKey: .fontStyle) fontStyle = try typeContainer.decodeIfPresent(String.self, forKey: .fontStyle)
fontName = try typeContainer.decodeIfPresent(String.self, forKey: .fontName) fontName = try typeContainer.decodeIfPresent(String.self, forKey: .fontName)

View File

@ -179,13 +179,14 @@ import Foundation
//MARK: - MVMCoreMoleculeViewProtocol //MARK: - MVMCoreMoleculeViewProtocol
open override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let leftRightLabelModel = model as? LeftRightLabelModel else { guard let leftRightLabelModel = model as? LeftRightLabelModel else {
return return
} }
leftTextLabel.setWithModel(leftRightLabelModel.leftText, delegateObject, additionalData) leftTextLabel.set(with: leftRightLabelModel.leftText, delegateObject, additionalData)
rightTextLabel.setWithModel(leftRightLabelModel.rightText, delegateObject, additionalData) rightTextLabel.setOptional(with: leftRightLabelModel.rightText, delegateObject, additionalData)
if !leftTextLabel.hasText { if !leftTextLabel.hasText {
constrainRightLabel() constrainRightLabel()
} else if !rightTextLabel.hasText { } else if !rightTextLabel.hasText {

View File

@ -67,11 +67,11 @@ import UIKit
super.setWithJSON(json, delegateObject: delegateObject, additionalData: additionalData) super.setWithJSON(json, delegateObject: delegateObject, additionalData: additionalData)
} }
open override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
if let lineModel = model as? LineModel { if let lineModel = model as? LineModel {
setStyle(lineModel.type ?? .standard) setStyle(lineModel.type ?? .standard)
} }
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
} }
open override func reset() { open override func reset() {

View File

@ -209,7 +209,7 @@ import UIKit
} }
} }
public func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
self.delegateObject = delegateObject self.delegateObject = delegateObject
// TODO: Temporary, should be moved to init once we have type erasure ready. // TODO: Temporary, should be moved to init once we have type erasure ready.
setAsMolecule() setAsMolecule()

View File

@ -9,16 +9,16 @@
import Foundation import Foundation
extension MFView { extension MFView {
public func setUpDefaultWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public func setUpDefaultWithModel(_ model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
self.model = model self.model = model
if let backgroundColor = model?.backgroundColor { if let backgroundColor = model.backgroundColor {
self.backgroundColor = backgroundColor.uiColor self.backgroundColor = backgroundColor.uiColor
} }
} }
} }
extension ModelMoleculeViewProtocol where Self: MFView { extension ModelMoleculeViewProtocol where Self: MFView {
func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
setUpDefaultWithModel(model, delegateObject, additionalData) setUpDefaultWithModel(model, delegateObject, additionalData)
} }
} }

View File

@ -10,7 +10,7 @@ import Foundation
// temporary until link is finished // temporary until link is finished
extension MVMCoreUISwitch: ModelMoleculeViewProtocol { extension MVMCoreUISwitch: ModelMoleculeViewProtocol {
public func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { public func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) {
guard let model = model as? ToggleModel else { return } guard let model = model as? ToggleModel else { return }
if let castSelf = self as? FormValidationProtocol { if let castSelf = self as? FormValidationProtocol {

View File

@ -64,8 +64,8 @@ import UIKit
} }
//MARK: - MVMCoreMoleculeViewProtocol //MARK: - MVMCoreMoleculeViewProtocol
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let multiProgressModel = multiProgressModel else { guard let multiProgressModel = multiProgressModel else {
return return
} }
@ -83,6 +83,6 @@ import UIKit
public override func setWithJSON(_ json: [AnyHashable : Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable : Any]?) { public override func setWithJSON(_ json: [AnyHashable : Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable : Any]?) {
guard let json = json, let model = try? Self.decodeJSONToModel(json: json, type: MultiProgressBarModel.self) else { return } guard let json = json, let model = try? Self.decodeJSONToModel(json: json, type: MultiProgressBarModel.self) else { return }
setWithModel(model, delegateObject, additionalData) set(with: model, delegateObject, additionalData)
} }
} }

View File

@ -51,7 +51,7 @@ import Foundation
} }
//MARK: - MVMCoreMoleculeViewProtocol //MARK: - MVMCoreMoleculeViewProtocol
public func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
guard let progressBarModel = model as? ProgressBarModel else { guard let progressBarModel = model as? ProgressBarModel else {
return return
} }
@ -66,7 +66,7 @@ import Foundation
// MARK: - MVMCoreUIMoleculeViewProtocol // MARK: - MVMCoreUIMoleculeViewProtocol
public func setWithJSON(_ json: [AnyHashable : Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) { public func setWithJSON(_ json: [AnyHashable : Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) {
guard let json = json, let model = try? Self.decodeJSONToModel(json: json, type: ProgressBarModel.self) else { return } guard let json = json, let model = try? Self.decodeJSONToModel(json: json, type: ProgressBarModel.self) else { return }
setWithModel(model, delegateObject, additionalData) set(with: model, delegateObject, additionalData)
} }
public func reset() { public func reset() {

View File

@ -32,7 +32,7 @@ import UIKit
return json?.optionalStringForKey("radioGroupName") ?? json?.optionalStringForKey("fieldKey") return json?.optionalStringForKey("radioGroupName") ?? json?.optionalStringForKey("fieldKey")
}() }()
lazy var radioButtonModel: RadioButtonModel? = { lazy var radioButtonModel: RadioButtonSelectionHelper? = {
[unowned self] in [unowned self] in
if let radioGroupName = radioGroupName, if let radioGroupName = radioGroupName,
let radioButtonModel = delegateObject?.formValidationProtocol?.formValidatorModel?()?.radioButtonsModelByGroup[radioGroupName] { let radioButtonModel = delegateObject?.formValidationProtocol?.formValidatorModel?()?.radioButtonsModelByGroup[radioGroupName] {
@ -98,6 +98,14 @@ import UIKit
accessibilityTraits = .button accessibilityTraits = .button
accessibilityHint = MVMCoreUIUtility.hardcodedString(withKey: "radio_action_hint") accessibilityHint = MVMCoreUIUtility.hardcodedString(withKey: "radio_action_hint")
} }
public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) {
super.set(with: model, delegateObject, additionalData)
guard let model = model as? RadioButtonModel else {
return
}
setWithJSON(model.toJSON(), delegateObject: delegateObject, additionalData: additionalData)
}
} }
// MARK: - MVMCoreUIViewConstrainingProtocol // MARK: - MVMCoreUIViewConstrainingProtocol
@ -123,11 +131,11 @@ extension RadioButton {
isRequired = jsonDictionary.boolForKey("required") isRequired = jsonDictionary.boolForKey("required")
self.delegateObject = delegateObject self.delegateObject = delegateObject
let radioButtonModel = RadioButtonModel.setupForRadioButtonGroup(radioButton: self, let radioButtonModel = RadioButtonSelectionHelper.setupForRadioButtonGroup(radioButton: self,
formValidator: delegateObject?.formValidationProtocol?.formValidatorModel?()) formValidator: delegateObject?.formValidationProtocol?.formValidatorModel?())
FormValidator.setupValidation(molecule: radioButtonModel, delegate: delegateObject?.formValidationProtocol) FormValidator.setupValidation(molecule: radioButtonModel, delegate: delegateObject?.formValidationProtocol)
} }
public override func reset() { public override func reset() {
super.reset() super.reset()
backgroundColor = .white backgroundColor = .white

View File

@ -0,0 +1,17 @@
//
// RadioButtonModel.swift
// MVMCoreUI
//
// Created by Suresh, Kamlesh on 2/26/20.
// Copyright © 2020 Verizon Wireless. All rights reserved.
//
import Foundation
public class RadioButtonModel: MoleculeModelProtocol {
public static var identifier: String = "radioButton"
public var backgroundColor: Color?
public var state: Bool = false
public var fieldKey: String?
}

View File

@ -334,7 +334,7 @@ public typealias ActionBlockConfirmation = () -> (Bool)
} }
// MARK:- ModelMoleculeViewProtocol // MARK:- ModelMoleculeViewProtocol
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
guard let toggleModel = model as? ToggleModel else { guard let toggleModel = model as? ToggleModel else {
return return
} }
@ -343,7 +343,7 @@ public typealias ActionBlockConfirmation = () -> (Bool)
setWithJSON(toggleModelJSON, delegateObject: delegateObject, additionalData: additionalData) setWithJSON(toggleModelJSON, delegateObject: delegateObject, additionalData: additionalData)
} }
public override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { public override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return Self.getContainerHeight() return Self.getContainerHeight()
} }
} }

View File

@ -87,10 +87,10 @@ public typealias ButtonAction = (Button) -> ()
} }
// MARK:- ModelMoleculeViewProtocol // MARK:- ModelMoleculeViewProtocol
open func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { open func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
self.model = model self.model = model
if let backgroundColor = model?.backgroundColor { if let backgroundColor = model.backgroundColor {
self.backgroundColor = backgroundColor.uiColor self.backgroundColor = backgroundColor.uiColor
} }
@ -100,15 +100,15 @@ public typealias ButtonAction = (Button) -> ()
set(with: model.action, delegateObject: delegateObject, additionalData: additionalData) set(with: model.action, delegateObject: delegateObject, additionalData: additionalData)
} }
open class func nameForReuse(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?) -> String? { open class func nameForReuse(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> String? {
return model?.moleculeName return model.moleculeName
} }
open class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { open class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return nil return nil
} }
open class func requiredModules(_ molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?, error: AutoreleasingUnsafeMutablePointer<MVMCoreErrorObject?>?) -> [String]? { open class func requiredModules(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, error: AutoreleasingUnsafeMutablePointer<MVMCoreErrorObject?>?) -> [String]? {
return nil return nil
} }
} }

View File

@ -48,22 +48,22 @@ import UIKit
} }
// MARK:- ModelMoleculeViewProtocol // MARK:- ModelMoleculeViewProtocol
open func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { open func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
self.model = model self.model = model
if let backgroundColor = model?.backgroundColor { if let backgroundColor = model.backgroundColor {
self.backgroundColor = backgroundColor.uiColor self.backgroundColor = backgroundColor.uiColor
} }
} }
open class func nameForReuse(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?) -> String? { open class func nameForReuse(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> String? {
return model?.moleculeName return model.moleculeName
} }
open class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { open class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return nil return nil
} }
open class func requiredModules(_ molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?, error: AutoreleasingUnsafeMutablePointer<MVMCoreErrorObject?>?) -> [String]? { open class func requiredModules(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, error: AutoreleasingUnsafeMutablePointer<MVMCoreErrorObject?>?) -> [String]? {
return nil return nil
} }
} }

View File

@ -150,8 +150,8 @@ import UIKit
contentView.preservesSuperviewLayoutMargins = false contentView.preservesSuperviewLayoutMargins = false
} }
//TODO: Model, Change to model //TODO: ModelProtocol, Change to model
public func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
guard let model = model as? ListItemModelProtocol else { return } guard let model = model as? ListItemModelProtocol else { return }
self.listItemModel = model self.listItemModel = model
@ -169,7 +169,7 @@ import UIKit
// override the separator // override the separator
if let separator = model.line { if let separator = model.line {
addSeparatorsIfNeeded() addSeparatorsIfNeeded()
bottomSeparatorView?.setWithModel(separator, nil, nil) bottomSeparatorView?.set(with: separator, nil, nil)
} }
if let moleculeModel = model as? MoleculeModelProtocol, if let moleculeModel = model as? MoleculeModelProtocol,
@ -183,11 +183,11 @@ import UIKit
backgroundColor = .white backgroundColor = .white
} }
public class func nameForReuse(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?) -> String? { public class func nameForReuse(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> String? {
return model?.moleculeName return model.moleculeName
} }
public class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { public class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return nil return nil
} }
@ -246,8 +246,8 @@ import UIKit
public func setLines(with model: LineModel?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable : Any]?, indexPath: IndexPath) { public func setLines(with model: LineModel?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable : Any]?, indexPath: IndexPath) {
addSeparatorsIfNeeded() addSeparatorsIfNeeded()
if let model = model { if let model = model {
topSeparatorView?.setWithModel(model, delegateObject, additionalData) topSeparatorView?.set(with: model, delegateObject, additionalData)
bottomSeparatorView?.setWithModel(model, delegateObject, additionalData) bottomSeparatorView?.set(with: model, delegateObject, additionalData)
} else { } else {
topSeparatorView?.setStyle(.standard) topSeparatorView?.setStyle(.standard)
bottomSeparatorView?.setStyle(.standard) bottomSeparatorView?.setStyle(.standard)

View File

@ -40,22 +40,22 @@ import UIKit
} }
// MARK:- ModelMoleculeViewProtocol // MARK:- ModelMoleculeViewProtocol
open func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { open func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
self.model = model self.model = model
if let backgroundColor = model?.backgroundColor { if let backgroundColor = model.backgroundColor {
self.backgroundColor = backgroundColor.uiColor self.backgroundColor = backgroundColor.uiColor
} }
} }
open class func nameForReuse(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?) -> String? { open class func nameForReuse(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> String? {
return model?.moleculeName return model.moleculeName
} }
open class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { open class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return nil return nil
} }
open class func requiredModules(_ molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?, error: AutoreleasingUnsafeMutablePointer<MVMCoreErrorObject?>?) -> [String]? { open class func requiredModules(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, error: AutoreleasingUnsafeMutablePointer<MVMCoreErrorObject?>?) -> [String]? {
return nil return nil
} }
} }

View File

@ -20,9 +20,7 @@ import UIKit
navigationBar.shadowImage = UIImage() navigationBar.shadowImage = UIImage()
navigationBar.isOpaque = true navigationBar.isOpaque = true
navigationBar.tintColor = .black navigationBar.tintColor = .black
if let font = MFFonts.mfFont75Bd(MFSizeObject(standardSize: 14, standardiPadPortraitSize: 16, iPadProLandscapeSize: 18)?.getValueBasedOnScreenSize() ?? 14) { navigationBar.titleTextAttributes = [NSAttributedString.Key.font: MFStyler.fontBoldBodySmall(false)];
navigationBar.titleTextAttributes = [NSAttributedString.Key.font: font];
}
} }
public static func setupNavigationController() -> Self? { public static func setupNavigationController() -> Self? {

View File

@ -338,7 +338,7 @@ static NSString * const COLLECTION_CELL_ID = @"cell";
#pragma mark - helper #pragma mark - helper
- (void)pinHeight:(CGFloat)height; { - (void)pinHeight:(CGFloat)height {
self.heightConstraint.constant = height; self.heightConstraint.constant = height;
[self setNeedsLayout]; [self setNeedsLayout];
[self layoutIfNeeded]; [self layoutIfNeeded];

View File

@ -16,8 +16,8 @@ open class Container: View, ContainerProtocol {
} }
// MARK:- ModelMoleculeViewProtocol // MARK:- ModelMoleculeViewProtocol
override open func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { override open func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let containerModel = model as? ContainerModelProtocol else { return } guard let containerModel = model as? ContainerModelProtocol else { return }
containerHelper.set(with: containerModel, for: view as? MVMCoreUIViewConstrainingProtocol) containerHelper.set(with: containerModel, for: view as? MVMCoreUIViewConstrainingProtocol)
} }

View File

@ -276,8 +276,8 @@ import UIKit
// MARK: - MVMCoreUIMoleculeViewProtocol // MARK: - MVMCoreUIMoleculeViewProtocol
//-------------------------------------------------- //--------------------------------------------------
open override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
self.delegateObject = delegateObject self.delegateObject = delegateObject
} }
} }

View File

@ -30,40 +30,40 @@ open class MoleculeContainer: Container {
super.setWithJSON(json, delegateObject: delegateObject, additionalData: additionalData) super.setWithJSON(json, delegateObject: delegateObject, additionalData: additionalData)
} }
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
if let casteModel = model as? MoleculeContainerModelProtocol { if let casteModel = model as? MoleculeContainerModelProtocol {
if view != nil { if view != nil {
(view as? ModelMoleculeViewProtocol)?.setWithModel(casteModel.molecule, delegateObject, additionalData) (view as? ModelMoleculeViewProtocol)?.set(with: casteModel.molecule, delegateObject, additionalData)
} else { } else {
if let molecule = MVMCoreUIMoleculeMappingObject.shared()?.createMolecule(casteModel.molecule, delegateObject) { if let molecule = MVMCoreUIMoleculeMappingObject.shared()?.createMolecule(casteModel.molecule, delegateObject) {
addMolecule(molecule) addMolecule(molecule)
} }
} }
} }
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
} }
public override static func nameForReuse(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?) -> String? { public override static func nameForReuse(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> String? {
guard let containerModel = model as? MoleculeContainerModelProtocol, guard let containerModel = model as? MoleculeContainerModelProtocol,
let moleculeClass = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(containerModel.molecule) as? ModelMoleculeViewProtocol.Type, let moleculeClass = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(containerModel.molecule) as? ModelMoleculeViewProtocol.Type,
let moleculeName = moleculeClass.nameForReuse(containerModel.molecule, delegateObject) else { let moleculeName = moleculeClass.nameForReuse(with: containerModel.molecule, delegateObject) else {
return "\(model?.moleculeName ?? "moleculeContainer")<>" return "\(model.moleculeName ?? "moleculeContainer")<>"
} }
return "\(model?.moleculeName ?? "moleculeContainer")<\(moleculeName)>" return "\(model.moleculeName ?? "moleculeContainer")<\(moleculeName)>"
} }
public override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { public override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
guard let containerModel = molecule as? MoleculeContainerModelProtocol else { return 0 } guard let containerModel = model as? MoleculeContainerModelProtocol else { return 0 }
guard let moleculeClass = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(containerModel.molecule) as? ModelMoleculeViewProtocol.Type, guard let moleculeClass = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(containerModel.molecule) as? ModelMoleculeViewProtocol.Type,
let moleculeHeight = moleculeClass.estimatedHeight(forRow: containerModel.molecule, delegateObject: delegateObject) else { let moleculeHeight = moleculeClass.estimatedHeight(with: containerModel.molecule, delegateObject) else {
return (containerModel.topMarginPadding ?? 0) + (containerModel.bottomMarginPadding ?? 0) return (containerModel.topMarginPadding ?? 0) + (containerModel.bottomMarginPadding ?? 0)
} }
return moleculeHeight + (containerModel.topMarginPadding ?? 0) + (containerModel.bottomMarginPadding ?? 0) return moleculeHeight + (containerModel.topMarginPadding ?? 0) + (containerModel.bottomMarginPadding ?? 0)
} }
public override class func requiredModules(_ molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?, error: AutoreleasingUnsafeMutablePointer<MVMCoreErrorObject?>?) -> [String]? { public override class func requiredModules(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, error: AutoreleasingUnsafeMutablePointer<MVMCoreErrorObject?>?) -> [String]? {
guard let containerModel = molecule as? MoleculeContainerModelProtocol, guard let containerModel = model as? MoleculeContainerModelProtocol,
let moleculeClass = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(containerModel.molecule) as? ModelMoleculeViewProtocol.Type else { return nil } let moleculeClass = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(containerModel.molecule) as? ModelMoleculeViewProtocol.Type else { return nil }
return moleculeClass.requiredModules(containerModel.molecule, delegateObject: delegateObject, error: error) return moleculeClass.requiredModules(with: containerModel.molecule, delegateObject, error: error)
} }
} }

View File

@ -16,7 +16,7 @@ import MVMCore
weak var delegate: FormValidationProtocol? weak var delegate: FormValidationProtocol?
var fieldMolecules: [FormValidationFormFieldProtocol] = [] var fieldMolecules: [FormValidationFormFieldProtocol] = []
var enableDisableMolecules: [FormValidationEnableDisableProtocol] = [] var enableDisableMolecules: [FormValidationEnableDisableProtocol] = []
var radioButtonsModelByGroup: [String: RadioButtonModel] = [:] var radioButtonsModelByGroup: [String: RadioButtonSelectionHelper] = [:]
public func insertMolecule(_ molecule: FormValidationProtocol) { public func insertMolecule(_ molecule: FormValidationProtocol) {
if let molecule = molecule as? FormValidationFormFieldProtocol { if let molecule = molecule as? FormValidationFormFieldProtocol {

View File

@ -32,6 +32,7 @@ FOUNDATION_EXPORT const unsigned char MVMCoreUIVersionString[];
#pragma mark - Categories #pragma mark - Categories
#import <MVMCoreUI/NSLayoutConstraint+MFConvenience.h> #import <MVMCoreUI/NSLayoutConstraint+MFConvenience.h>
#import <MVMCoreUI/UIColor+MFConvenience.h> #import <MVMCoreUI/UIColor+MFConvenience.h>
#import <MVMCoreUI/UIFont+FontWrapping.h>
#pragma mark - Styles #pragma mark - Styles
#import <MVMCoreUI/MFStyler.h> #import <MVMCoreUI/MFStyler.h>

View File

@ -9,7 +9,7 @@
import Foundation import Foundation
public protocol FormModelProtocol: Model { public protocol FormModelProtocol: ModelProtocol {
var required: Bool? { get } var required: Bool? { get }
var fieldKey: String? { get } var fieldKey: String? { get }
var groupName: String? { get } var groupName: String? { get }

View File

@ -1,7 +1,7 @@
import Foundation import Foundation
public protocol MoleculeModelProtocol: Model { public protocol MoleculeModelProtocol: ModelProtocol {
var moleculeName: String? { get } var moleculeName: String? { get }
var backgroundColor: Color? { get set } var backgroundColor: Color? { get set }
} }

View File

@ -9,7 +9,7 @@
import Foundation import Foundation
public protocol TemplateModelProtocol: PageModelProtocol, Model { public protocol TemplateModelProtocol: PageModelProtocol, ModelProtocol {
var template: String { get } var template: String { get }
} }

View File

@ -11,30 +11,36 @@ import Foundation
@objcMembers open class ListLeftVariableCheckboxAllTextAndLinks: TableViewCell { @objcMembers open class ListLeftVariableCheckboxAllTextAndLinks: TableViewCell {
public let checkbox = Checkbox(frame: .zero) public let checkbox = Checkbox(frame: .zero)
public let eyebrowHeadlineBodyLink = EyebrowHeadlineBodyLink(frame: .zero) public let eyebrowHeadlineBodyLink = EyebrowHeadlineBodyLink(frame: .zero)
public let stack = Stack<StackModel>(frame: .zero) public var stack: Stack<StackModel>
// MARK: - Initializers
public override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
stack = Stack<StackModel>.createStack(with: [(view: checkbox, model: StackItemModel(horizontalAlignment: .fill)),
(view: eyebrowHeadlineBodyLink, model: StackItemModel(horizontalAlignment: .leading))],
axis: .horizontal)
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
public required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// MARK: - View Lifecycle // MARK: - View Lifecycle
override open func setupView() { override open func setupView() {
super.setupView() super.setupView()
stack.stackItems = [StackItem(andContain: checkbox),StackItem(andContain: eyebrowHeadlineBodyLink)]
addMolecule(stack) addMolecule(stack)
}
// MARK:- MVMCoreUIMoleculeViewProtocol
open override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) {
super.setWithModel(model, delegateObject, additionalData)
guard let model = model as? ListLeftVariableCheckboxAllTextAndLinksModel else { return}
checkbox.setWithModel(model.checkbox, delegateObject, additionalData)
eyebrowHeadlineBodyLink.setWithModel(model.eyebrowHeadlineBodyLink, delegateObject, additionalData)
let stackModel = StackModel(molecules: [StackItemModel(horizontalAlignment: .fill),
StackItemModel(horizontalAlignment: .leading)],
axis: .horizontal)
stack.model = stackModel
stack.restack() stack.restack()
} }
open override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { // MARK:- MVMCoreUIMoleculeViewProtocol
open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) {
super.set(with: model, delegateObject, additionalData)
guard let model = model as? ListLeftVariableCheckboxAllTextAndLinksModel else { return}
checkbox.set(with: model.checkbox, delegateObject, additionalData)
eyebrowHeadlineBodyLink.set(with: model.eyebrowHeadlineBodyLink, delegateObject, additionalData)
}
open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return 140 return 140
} }
} }

View File

@ -17,39 +17,46 @@ import UIKit
let leftImage = MFLoadImageView(pinnedEdges: .all) let leftImage = MFLoadImageView(pinnedEdges: .all)
let leftLabel = Label.commonLabelB2(true) let leftLabel = Label.commonLabelB2(true)
let rightLabel = Label.commonLabelB2(true) let rightLabel = Label.commonLabelB2(true)
let stack = Stack<StackModel>(frame: .zero) var stack: Stack<StackModel>
//-----------------------------------------------------
// MARK: - Initializers
//-----------------------------------------------------
public override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
stack = Stack<StackModel>.createStack(with: [(view: leftImage, model: StackItemModel(horizontalAlignment: .fill)),
(view: leftLabel, model: StackItemModel(horizontalAlignment: .fill)),
(view: rightLabel, model: StackItemModel(spacing: 4, horizontalAlignment: .trailing))],
axis: .horizontal)
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
public required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
//----------------------------------------------------- //-----------------------------------------------------
// MARK: - View Lifecycle // MARK: - View Lifecycle
//------------------------------------------------------- //-------------------------------------------------------
override open func setupView() { override open func setupView() {
super.setupView() super.setupView()
stack.stackItems = [StackItem(andContain: leftImage),StackItem(andContain: leftLabel),StackItem(andContain: rightLabel)]
addMolecule(stack)
leftLabel.setContentHuggingPriority(UILayoutPriority(rawValue: 901), for: .horizontal) leftLabel.setContentHuggingPriority(UILayoutPriority(rawValue: 901), for: .horizontal)
rightLabel.setContentHuggingPriority(UILayoutPriority(rawValue: 902), for: .horizontal) rightLabel.setContentHuggingPriority(UILayoutPriority(rawValue: 902), for: .horizontal)
addMolecule(stack)
stack.restack()
} }
//---------------------------------------------------- //----------------------------------------------------
// MARK: - Molecule // MARK: - Molecule
//------------------------------------------------------ //------------------------------------------------------
open override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let model = model as? ListLeftVariableIconWithRightCaretModel else { return} guard let model = model as? ListLeftVariableIconWithRightCaretModel else { return}
leftImage.setWithModel(model.image, delegateObject, additionalData) leftImage.set(with: model.image, delegateObject, additionalData)
leftLabel.setWithModel(model.leftLabel, delegateObject, additionalData) leftLabel.set(with: model.leftLabel, delegateObject, additionalData)
rightLabel.setWithModel(model.rightLabel, delegateObject, additionalData) rightLabel.set(with: model.rightLabel, delegateObject, additionalData)
let stackModel = StackModel(molecules: [StackItemModel(horizontalAlignment: .fill),
StackItemModel(horizontalAlignment: .fill),
StackItemModel(horizontalAlignment: .trailing)],
axis: .horizontal)
stack.model = stackModel
stack.restack()
} }
open override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return 90 return 90
} }

View File

@ -0,0 +1,67 @@
//
// ListLeftVariableRadioButtonAndPaymentMethod.swift
// MVMCoreUI
//
// Created by Kruthika KP on 27/02/20.
// Copyright © 2020 Verizon Wireless. All rights reserved.
//
import UIKit
@objcMembers open class ListLeftVariableRadioButtonAndPaymentMethod: TableViewCell {
//-----------------------------------------------------
// MARK: - Outlets
//-----------------------------------------------------
let radioButton = RadioButton(frame: .zero)
let leftImage = MFLoadImageView(pinnedEdges: .all)
let eyebrowHeadlineBodyLink = EyebrowHeadlineBodyLink()
var stack: Stack<StackModel>
//-----------------------------------------------------
// MARK: - Initializers
//-----------------------------------------------------
public override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
stack = Stack<StackModel>.createStack(with: [(view: radioButton, model: StackItemModel(horizontalAlignment: .fill)),
(view: leftImage, model: StackItemModel(horizontalAlignment: .fill)),
(view: eyebrowHeadlineBodyLink, model: StackItemModel(horizontalAlignment: .leading))],
axis: .horizontal)
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
public required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
//-----------------------------------------------------
// MARK: - View Lifecycle
//-----------------------------------------------------
override open func setupView() {
super.setupView()
addMolecule(stack)
stack.restack()
eyebrowHeadlineBodyLink.body.textColor = .mvmOrangeAA
eyebrowHeadlineBodyLink.headline.styleBoldBodySmall(true)
}
open override func reset() {
super.reset()
eyebrowHeadlineBodyLink.body.textColor = .mvmOrangeAA
eyebrowHeadlineBodyLink.headline.styleBoldBodySmall(true)
}
//----------------------------------------------------
// MARK: - Molecule
//----------------------------------------------------
open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) {
super.set(with: model, delegateObject, additionalData)
guard let model = model as? ListLeftVariableRadioButtonAndPaymentMethodModel else { return}
radioButton.set(with: model.radioButton, delegateObject, additionalData)
leftImage.set(with: model.image, delegateObject, additionalData)
eyebrowHeadlineBodyLink.set(with: model.eyebrowHeadlineBodyLink, delegateObject, additionalData)
}
open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return 90
}
}

View File

@ -0,0 +1,55 @@
//
// ListLeftVariableRadioButtonAndPaymentMethodModel.swift
// MVMCoreUI
//
// Created by Kruthika KP on 27/02/20.
// Copyright © 2020 Verizon Wireless. All rights reserved.
//
import Foundation
public class ListLeftVariableRadioButtonAndPaymentMethodModel: ListItemModel, MoleculeModelProtocol {
public static var identifier: String = "listLVRBImg"
public var radioButton: RadioButtonModel
public var image: ImageViewModel
public var eyebrowHeadlineBodyLink: EyebrowHeadlineBodyLinkModel
public init(radioButton: RadioButtonModel, image: ImageViewModel, eyebrowHeadlineBodyLink:EyebrowHeadlineBodyLinkModel) {
self.radioButton = radioButton
self.image = image
self.eyebrowHeadlineBodyLink = eyebrowHeadlineBodyLink
super.init()
}
public override func setDefaults() {
super.setDefaults()
if image.width == nil, image.height == nil {
image.width = 32
image.height = 32
}
}
private enum CodingKeys: String, CodingKey {
case moleculeName
case radioButton
case image
case eyebrowHeadlineBodyLink
}
required public init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
radioButton = try typeContainer.decode(RadioButtonModel.self, forKey: .radioButton)
image = try typeContainer.decode(ImageViewModel.self, forKey: .image)
eyebrowHeadlineBodyLink = try typeContainer.decode(EyebrowHeadlineBodyLinkModel.self, forKey: .eyebrowHeadlineBodyLink)
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(moleculeName, forKey: .moleculeName)
try container.encode(radioButton, forKey: .radioButton)
try container.encode(image, forKey: .image)
try container.encode(eyebrowHeadlineBodyLink, forKey: .eyebrowHeadlineBodyLink)
}
}

View File

@ -0,0 +1,74 @@
//
// ListOneColumnFullWidthTextAllTextAndLinks.swift
// MVMCoreUI
//
// Created by Kruthika KP on 14/02/20.
// Copyright © 2020 Verizon Wireless. All rights reserved.
//
import Foundation
@objcMembers public class ListOneColumnFullWidthTextAllTextAndLinks: TableViewCell {
//-----------------------------------------------------
// MARK: - Outlets
//-----------------------------------------------------
var stack: Stack<StackModel>
let eyebrow = Label.commonLabelB3(true)
let headline = Label.commonLabelH3(true)
let subHeadline = Label.commonLabelB1(true)
let body = Label.commonLabelB2(true)
let link = Link()
//-----------------------------------------------------
// MARK: - Initializers
//-----------------------------------------------------
public override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
stack = Stack<StackModel>.createStack(with: [eyebrow, headline, subHeadline, body, link])
stack.stackModel?.spacing = 0
stack.stackModel?.molecules[4].spacing = 2
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
public required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
//-----------------------------------------------------
// MARK: - View Lifecycle
//-----------------------------------------------------
override open func setupView() {
super.setupView()
addMolecule(stack)
}
open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?){
super.set(with: model, delegateObject, additionalData)
guard let model = model as? ListOneColumnFullWidthTextAllTextAndLinksModel else { return }
eyebrow.setOptional(with: model.eyebrow, delegateObject, additionalData)
headline.setOptional(with: model.headline, delegateObject, additionalData)
subHeadline.setOptional(with: model.subHeadline, delegateObject, additionalData)
body.setOptional(with: model.body, delegateObject, additionalData)
link.setOptional(with: model.link, delegateObject, additionalData)
// Hide labels if neeeded.
stack.stackModel?.molecules[0].gone = !eyebrow.hasText
stack.stackModel?.molecules[1].gone = !headline.hasText
stack.stackModel?.molecules[2].gone = !subHeadline.hasText
stack.stackModel?.molecules[3].gone = !body.hasText
stack.stackModel?.molecules[4].gone = (link.titleLabel?.text?.count ?? 0) == 0
stack.restack()
}
open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return 90
}
open override func reset() {
super.reset()
eyebrow.styleB3(true)
headline.styleH3(true)
subHeadline.styleB1(true)
body.styleB2(true)
}
}

View File

@ -11,7 +11,22 @@ import Foundation
let wheel = GraphView(frame: .zero) let wheel = GraphView(frame: .zero)
let leftLabel = Label.commonLabelB1(true) let leftLabel = Label.commonLabelB1(true)
let rightLabel = Label.commonLabelB2(true) let rightLabel = Label.commonLabelB2(true)
let stack = Stack<StackModel>(frame: .zero) var stack: Stack<StackModel>
//-----------------------------------------------------
// MARK: - Initializers
//-----------------------------------------------------
public override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
stack = Stack<StackModel>.createStack(with: [(view: leftLabel, model: StackItemModel(horizontalAlignment: .leading)),
(view: wheel, model: StackItemModel(horizontalAlignment: .fill)),
(view: rightLabel, model: StackItemModel(spacing: 4, horizontalAlignment: .fill))],
axis: .horizontal)
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
public required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
//------------------------------------------------- //-------------------------------------------------
// MARK: - Setup // MARK: - Setup
@ -19,26 +34,19 @@ import Foundation
open override func setupView() { open override func setupView() {
super.setupView() super.setupView()
rightLabel.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 900), for: .horizontal) rightLabel.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 900), for: .horizontal)
stack.stackItems = [StackItem(andContain: leftLabel),StackItem(andContain: wheel),StackItem(andContain: rightLabel)]
addMolecule(stack) addMolecule(stack)
stack.restack()
} }
//------------------------------------------------- //-------------------------------------------------
// MARK: - ModelMoleculeViewProtocol // MARK: - ModelMoleculeViewProtocol
//------------------------------------------------- //-------------------------------------------------
open override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let model = model as? ListRVWheelModel else { return } guard let model = model as? ListRVWheelModel else { return }
leftLabel.setWithModel(model.leftLabel, delegateObject, additionalData) leftLabel.set(with: model.leftLabel, delegateObject, additionalData)
rightLabel.setWithModel(model.rightLabel, delegateObject, additionalData) rightLabel.set(with: model.rightLabel, delegateObject, additionalData)
wheel.setWithModel(model.wheel, delegateObject, additionalData) wheel.set(with: model.wheel, delegateObject, additionalData)
let stackModel = StackModel(molecules: [StackItemModel(horizontalAlignment: .leading),
StackItemModel(horizontalAlignment: .fill),
StackItemModel(spacing: 4, horizontalAlignment: .fill)],
axis: .horizontal)
stack.model = stackModel
stack.restack()
} }
//------------------------------------------------- //-------------------------------------------------
@ -50,7 +58,7 @@ import Foundation
rightLabel.styleB2(true) rightLabel.styleB2(true)
} }
public override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { public override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return 70 return 70
} }
} }

View File

@ -15,34 +15,42 @@ import Foundation
//------------------------------------------------------- //-------------------------------------------------------
let leftLabel = Label.commonLabelB1(true) let leftLabel = Label.commonLabelB1(true)
let rightImage = MFLoadImageView(pinnedEdges: .all) let rightImage = MFLoadImageView(pinnedEdges: .all)
let stack = Stack<StackModel>(frame: .zero) var stack: Stack<StackModel>
//-----------------------------------------------------
// MARK: - Initializers
//-----------------------------------------------------
public override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
stack = Stack<StackModel>.createStack(with: [(view: leftLabel, model: StackItemModel(horizontalAlignment: .leading)),
(view: rightImage, model: StackItemModel(horizontalAlignment: .fill))],
axis: .horizontal)
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
public required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
//----------------------------------------------------- //-----------------------------------------------------
// MARK: - View Lifecycle // MARK: - View Lifecycle
//------------------------------------------------------- //-------------------------------------------------------
override open func setupView() { override open func setupView() {
super.setupView() super.setupView()
stack.stackItems = [StackItem(andContain: leftLabel),StackItem(andContain: rightImage)]
addMolecule(stack) addMolecule(stack)
stack.restack()
} }
//---------------------------------------------------- //----------------------------------------------------
// MARK: - Molecule // MARK: - Molecule
//------------------------------------------------------ //------------------------------------------------------
open override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let model = model as? ListRightVariablePaymentsModel else { return } guard let model = model as? ListRightVariablePaymentsModel else { return }
leftLabel.setWithModel(model.leftLabel, delegateObject, additionalData) leftLabel.set(with: model.leftLabel, delegateObject, additionalData)
rightImage.setWithModel(model.image, delegateObject, additionalData) rightImage.set(with: model.image, delegateObject, additionalData)
let stackModel = StackModel(molecules: [StackItemModel(horizontalAlignment: .leading),
StackItemModel(horizontalAlignment: .fill)],
axis: .horizontal)
stack.model = stackModel
stack.restack()
} }
open override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return 65 return 65
} }

View File

@ -1,65 +0,0 @@
//
// ListOneColumnFullWidthTextAllTextAndLinks.swift
// MVMCoreUI
//
// Created by Kruthika KP on 14/02/20.
// Copyright © 2020 Verizon Wireless. All rights reserved.
//
import Foundation
@objcMembers public class ListOneColumnFullWidthTextAllTextAndLinks: TableViewCell {
//-----------------------------------------------------
// MARK: - Outlets
//-----------------------------------------------------
let stack = Stack<StackModel>(frame: .zero)
let eyebrow = Label.commonLabelB3(true)
let headline = Label.commonLabelH3(true)
let subHeadline = Label.commonLabelB1(true)
let body = Label.commonLabelB2(true)
let link = Link()
//-----------------------------------------------------
// MARK: - View Lifecycle
//-------------------------------------------------------
override open func setupView() {
super.setupView()
stack.stackItems = [StackItem(andContain: eyebrow),
StackItem(andContain: headline),
StackItem(andContain: subHeadline),
StackItem(andContain: body),
StackItem(andContain: link)]
addMolecule(stack)
}
open override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?){
super.setWithModel(model, delegateObject, additionalData)
guard let model = model as? ListOneColumnFullWidthTextAllTextAndLinksModel else { return}
eyebrow.setWithModel(model.eyebrow, delegateObject, additionalData)
headline.setWithModel(model.headline, delegateObject, additionalData)
subHeadline.setWithModel(model.subHeadline, delegateObject, additionalData)
body.setWithModel(model.body, delegateObject, additionalData)
link.setWithModel(model.link, delegateObject, additionalData)
let stackModel = StackModel(molecules: [StackItemModel(spacing: 2, gone: !eyebrow.hasText),
StackItemModel(spacing: 2, gone: !headline.hasText),
StackItemModel(spacing: 2, gone: !subHeadline.hasText),
StackItemModel(spacing: 2, gone: !body.hasText),
StackItemModel(spacing: 2, gone: (link.titleLabel?.text?.count ?? 0) == 0)])
stack.model = stackModel
stack.restack()
}
open override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat?{
return 90
}
open override func reset() {
super.reset()
eyebrow.styleB3(true)
headline.styleH3(true)
subHeadline.styleB1(true)
body.styleB2(true)
}
}

View File

@ -13,35 +13,38 @@ import Foundation
let leftHeadlineBody = HeadlineBody(frame: .zero) let leftHeadlineBody = HeadlineBody(frame: .zero)
let centerHeadLineBody = HeadlineBody(frame: .zero) let centerHeadLineBody = HeadlineBody(frame: .zero)
let rightHeadLineBody = HeadlineBody(frame: .zero) let rightHeadLineBody = HeadlineBody(frame: .zero)
let stack = Stack<StackModel>(frame: .zero) var stack: Stack<StackModel>
// MARK: - Initializers
public override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
stack = Stack<StackModel>.createStack(with: [(view: leftHeadlineBody, model: StackItemModel(percent: 33, horizontalAlignment: .leading)),
(view: centerHeadLineBody, model: StackItemModel(percent: 34, horizontalAlignment: .center)),
(view: rightHeadLineBody, model: StackItemModel(percent: 33, horizontalAlignment: .trailing))],
axis: .horizontal)
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
public required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// MARK: - MFViewProtocol // MARK: - MFViewProtocol
open override func setupView() { open override func setupView() {
super.setupView() super.setupView()
//using stackItems to align the three headlineBody
stack.stackItems = [StackItem(andContain: leftHeadlineBody),StackItem(andContain: centerHeadLineBody),StackItem(andContain: rightHeadLineBody)]
addMolecule(stack) addMolecule(stack)
stack.restack()
} }
// MARK: - MVMCoreUIMoleculeViewProtocol // MARK: - MVMCoreUIMoleculeViewProtocol
open override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let model = model as? ListThreeColumnPlanDataDividerModel else { return } guard let model = model as? ListThreeColumnPlanDataDividerModel else { return }
leftHeadlineBody.setWithModel(model.leftHeadlineBody, delegateObject, additionalData) leftHeadlineBody.set(with: model.leftHeadlineBody, delegateObject, additionalData)
centerHeadLineBody.setWithModel(model.centerHeadlineBody, delegateObject, additionalData) centerHeadLineBody.set(with: model.centerHeadlineBody, delegateObject, additionalData)
rightHeadLineBody.setWithModel(model.rightHeadlineBody, delegateObject, additionalData) rightHeadLineBody.set(with: model.rightHeadlineBody, delegateObject, additionalData)
// Create a stack model to use for the internal stack and set the alignment of models
let stackModel = StackModel(molecules: [StackItemModel(percent: 33, horizontalAlignment: .leading),
StackItemModel(percent: 34, horizontalAlignment: .center),
StackItemModel(percent: 33, horizontalAlignment: .trailing)],
axis: .horizontal)
stack.model = stackModel
stack.restack()
} }
open override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat { open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat {
return 121 return 121
} }
} }

View File

@ -94,14 +94,14 @@ open class DoughnutChart: View {
doughnutLayer.transform = CATransform3DMakeRotation(1 * .pi, 0.0, 0.0, 1.0) doughnutLayer.transform = CATransform3DMakeRotation(1 * .pi, 0.0, 0.0, 1.0)
} }
open override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
clearLayers() clearLayers()
guard let doughnutChartModel = doughnutChartModel else { guard let doughnutChartModel = doughnutChartModel else {
return return
} }
titleLabel.setWithModel(doughnutChartModel.title, delegateObject, additionalData) titleLabel.setOptional(with: doughnutChartModel.title, delegateObject, additionalData)
subTitleLabel.setWithModel(doughnutChartModel.subtitle, delegateObject, additionalData) subTitleLabel.setOptional(with: doughnutChartModel.subtitle, delegateObject, additionalData)
titleLabel.textAlignment = .center titleLabel.textAlignment = .center
subTitleLabel.textAlignment = .center subTitleLabel.textAlignment = .center
updateLabelContainer() updateLabelContainer()

View File

@ -65,11 +65,11 @@ import Foundation
colorLablesStack.reset() colorLablesStack.reset()
} }
open override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let model = doughnutChartModel else { return } guard let model = doughnutChartModel else { return }
doughnutChart.setWithModel(model, delegateObject, additionalData) doughnutChart.set(with: model, delegateObject, additionalData)
// Create the stack model // Create the stack model
var stackItems: [MoleculeStackItemModel] = [] var stackItems: [MoleculeStackItemModel] = []
@ -78,12 +78,12 @@ import Foundation
} }
let stack = MoleculeStackModel(molecules: stackItems) let stack = MoleculeStackModel(molecules: stackItems)
stack.verticalAlignment = .fill stack.verticalAlignment = .fill
colorLablesStack.setWithModel(stack, delegateObject, additionalData) colorLablesStack.set(with: stack, delegateObject, additionalData)
} }
open override func setWithJSON(_ json: [AnyHashable : Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable : Any]?) { open override func setWithJSON(_ json: [AnyHashable : Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable : Any]?) {
guard let json = json, let model = try? Self.decodeJSONToModel(json: json, type: DoughnutChartModel.self) else { return } guard let json = json, let model = try? Self.decodeJSONToModel(json: json, type: DoughnutChartModel.self) else { return }
setWithModel(model, delegateObject, additionalData) set(with: model, delegateObject, additionalData)
} }
} }
@ -94,12 +94,12 @@ extension DoughnutChartView: MVMCoreUIViewConstrainingProtocol {
} }
class ColorViewLabelsStack: MoleculeStackView { class ColorViewLabelsStack: MoleculeStackView {
override func createStackItemsFromModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { override func createStackItemsFromModel(_ model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) {
guard let stackItemModels = stackModel?.molecules else { return } guard let stackItemModels = stackModel?.molecules else { return }
for model in stackItemModels { for model in stackItemModels {
let view = ColorViewWithLabel() let view = ColorViewWithLabel()
let stackItem = MoleculeStackItem(andContain: view) let stackItem = MoleculeStackItem(andContain: view)
stackItem.setWithModel(model, delegateObject, additionalData) stackItem.set(with: model, delegateObject, additionalData)
stackItems.append(stackItem) stackItems.append(stackItem)
} }
} }
@ -149,12 +149,12 @@ class ColorViewWithLabel: View {
label.setAsMolecule() label.setAsMolecule()
} }
override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let chartItemModel = model as? DoughnutChartItemModel else { guard let chartItemModel = model as? DoughnutChartItemModel else {
return return
} }
label.setWithModel(chartItemModel.label, delegateObject, additionalData) label.set(with: chartItemModel.label, delegateObject, additionalData)
colorView.backgroundColor = chartItemModel.color.uiColor colorView.backgroundColor = chartItemModel.color.uiColor
} }
} }

View File

@ -51,14 +51,14 @@ import UIKit
} }
// MARK:- ModelMoleculeViewProtocol // MARK:- ModelMoleculeViewProtocol
public override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { public override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return 95 return 95
} }
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let model = model as? ImageHeadlineBodyModel else { return } guard let model = model as? ImageHeadlineBodyModel else { return }
headlineBody.setWithModel(model.headlineBody, delegateObject, additionalData) headlineBody.set(with: model.headlineBody, delegateObject, additionalData)
imageView.setWithModel(model.image, delegateObject, additionalData) imageView.set(with: model.image, delegateObject, additionalData)
} }
} }

View File

@ -101,23 +101,24 @@ import UIKit
} }
// MARK: - ModelMoleculeViewProtocol // MARK: - ModelMoleculeViewProtocol
public override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { public override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
guard let model = molecule as? TwoButtonViewModel else { return 0 } guard let model = model as? TwoButtonViewModel,
return PillButton.estimatedHeight(forRow: model.primaryButton ?? model.secondaryButton, delegateObject: delegateObject) let buttonModel = model.primaryButton ?? model.secondaryButton else { return 0 }
return PillButton.estimatedHeight(with: buttonModel, delegateObject)
} }
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let model = model as? TwoButtonViewModel else { return } guard let model = model as? TwoButtonViewModel else { return }
if let secondaryModel = model.secondaryButton { if let secondaryModel = model.secondaryButton {
showSecondaryButton() showSecondaryButton()
secondaryButton.setWithModel(secondaryModel, delegateObject, additionalData) secondaryButton.set(with: secondaryModel, delegateObject, additionalData)
} else { } else {
hideSecondaryButton() hideSecondaryButton()
} }
if let primaryModel = model.primaryButton { if let primaryModel = model.primaryButton {
showPrimaryButton() showPrimaryButton()
primaryButton.setWithModel(primaryModel, delegateObject, additionalData) primaryButton.set(with: primaryModel, delegateObject, additionalData)
} else { } else {
hidePrimaryButton() hidePrimaryButton()
} }

View File

@ -44,12 +44,12 @@ import UIKit
} }
} }
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
dropDownListItemModel = model as? DropDownListItemModel
self.delegateObject = delegateObject self.delegateObject = delegateObject
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
if let dropDownListItemModel = model as? DropDownListItemModel {
dropDown.setWithModel(dropDownListItemModel?.dropDown, delegateObject, additionalData) dropDown.set(with: dropDownListItemModel.dropDown, delegateObject, additionalData)
}
dropDown.observingTextFieldDelegate = delegateObject?.uiTextFieldDelegate as? ObservingTextFieldDelegate dropDown.observingTextFieldDelegate = delegateObject?.uiTextFieldDelegate as? ObservingTextFieldDelegate
dropDown.uiTextFieldDelegate = delegateObject?.uiTextFieldDelegate dropDown.uiTextFieldDelegate = delegateObject?.uiTextFieldDelegate
} }
@ -59,7 +59,7 @@ import UIKit
bottomSeparatorView?.setStyle(.none) bottomSeparatorView?.setStyle(.none)
} }
public override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { public override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return 80 return 80
} }
} }

View File

@ -68,7 +68,7 @@ open class MoleculeCollectionViewCell: UICollectionViewCell, MVMCoreUIMoleculeVi
} }
public func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
guard let collectionModel = model as? CarouselItemModel else { guard let collectionModel = model as? CarouselItemModel else {
return return
} }
@ -98,7 +98,7 @@ open class MoleculeCollectionViewCell: UICollectionViewCell, MVMCoreUIMoleculeVi
molecule = moleculeView molecule = moleculeView
} }
} else { } else {
(molecule as? ModelMoleculeViewProtocol)?.setWithModel(collectionModel.molecule, delegateObject, additionalData) (molecule as? ModelMoleculeViewProtocol)?.set(with: collectionModel.molecule, delegateObject, additionalData)
} }
guard let molecule = molecule else { return } guard let molecule = molecule else { return }
@ -114,10 +114,10 @@ open class MoleculeCollectionViewCell: UICollectionViewCell, MVMCoreUIMoleculeVi
backgroundColor = .white backgroundColor = .white
} }
public class func nameForReuse(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?) -> String? { public class func nameForReuse(_ model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> String? {
guard let molecule = (model as? CarouselItemModel)?.molecule, guard let molecule = (model as? CarouselItemModel)?.molecule,
let moleculeClass = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(molecule) as? ModelMoleculeViewProtocol.Type, let moleculeClass = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(molecule) as? ModelMoleculeViewProtocol.Type,
let name = moleculeClass.nameForReuse(molecule, delegateObject) ?? molecule.moleculeName else { let name = moleculeClass.nameForReuse(with: molecule, delegateObject) ?? molecule.moleculeName else {
return nil return nil
} }
return name return name

View File

@ -13,13 +13,13 @@ import UIKit
// MARK: - MVMCoreUIMoleculeViewProtocol // MARK: - MVMCoreUIMoleculeViewProtocol
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let model = model as? MoleculeListItemModel else { return } guard let model = model as? MoleculeListItemModel else { return }
if molecule != nil { if molecule != nil {
(molecule as? ModelMoleculeViewProtocol)?.setWithModel(model.molecule, delegateObject, additionalData) (molecule as? ModelMoleculeViewProtocol)?.set(with: model.molecule, delegateObject, additionalData)
} else if let moleculeView = MVMCoreUIMoleculeMappingObject.shared()?.createMolecule(model.molecule, delegateObject, false) { } else if let moleculeView = MVMCoreUIMoleculeMappingObject.shared()?.createMolecule(model.molecule, delegateObject, false) {
addMolecule(moleculeView) addMolecule(moleculeView)
@ -28,11 +28,11 @@ import UIKit
containerHelper.set(with: model, for: molecule as? MVMCoreUIViewConstrainingProtocol) containerHelper.set(with: model, for: molecule as? MVMCoreUIViewConstrainingProtocol)
} }
public override class func nameForReuse(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?) -> String? { public override class func nameForReuse(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> String? {
guard let moleculeModel = (model as? MoleculeListItemModel)?.molecule else { return "\(self)<>" } guard let moleculeModel = (model as? MoleculeListItemModel)?.molecule else { return "\(self)<>" }
let className = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(moleculeModel) as? ModelMoleculeViewProtocol.Type let className = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(moleculeModel) as? ModelMoleculeViewProtocol.Type
let moleculeName = className?.nameForReuse(moleculeModel, delegateObject) ?? moleculeModel.moleculeName ?? "" let moleculeName = className?.nameForReuse(with: moleculeModel, delegateObject) ?? moleculeModel.moleculeName ?? ""
return "\(self)<\(moleculeName)>" return "\(self)<\(moleculeName)>"
} }
@ -45,10 +45,10 @@ import UIKit
return theClass.requiredModules?(moleculeJSON, delegateObject: delegateObject, error: error) return theClass.requiredModules?(moleculeJSON, delegateObject: delegateObject, error: error)
} }
public override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat { public override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat {
guard let moleculeModel = (molecule as? MoleculeContainerModel)?.molecule, guard let moleculeModel = (model as? MoleculeContainerModel)?.molecule,
let classType = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(moleculeModel) as? ModelMoleculeViewProtocol.Type, let classType = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(moleculeModel) as? ModelMoleculeViewProtocol.Type,
let height = classType.estimatedHeight(forRow: moleculeModel, delegateObject: delegateObject) let height = classType.estimatedHeight(with: moleculeModel, delegateObject)
else { return 80 } else { return 80 }
return max(2 * PaddingDefaultVerticalSpacing3, height) return max(2 * PaddingDefaultVerticalSpacing3, height)

View File

@ -36,8 +36,8 @@ import UIKit
// MARK: - MoleculeDelegateProtocol // MARK: - MoleculeDelegateProtocol
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
self.delegateObject = delegateObject self.delegateObject = delegateObject
tabs.reloadData() tabs.reloadData()
} }
@ -47,7 +47,7 @@ import UIKit
tabs.reset() tabs.reset()
} }
public override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { public override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return 46 return 46
} }
} }

View File

@ -114,14 +114,14 @@ import UIKit
} }
// MARK:- ModelMoleculeViewProtocol // MARK:- ModelMoleculeViewProtocol
public override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { public override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return 197 return 197
} }
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let model = model as? ActionDetailWithImageModel else { return } guard let model = model as? ActionDetailWithImageModel else { return }
headlineBodyButton.setWithModel(model.headlineBodyButton, delegateObject, additionalData) headlineBodyButton.set(with: model.headlineBodyButton, delegateObject, additionalData)
imageLoader.setWithModel(model.image, delegateObject, additionalData) imageLoader.set(with: model.image, delegateObject, additionalData)
} }
} }

View File

@ -166,19 +166,19 @@ import UIKit
return 34 return 34
} }
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let model = model as? CornerLabelsModel else { return } guard let model = model as? CornerLabelsModel else { return }
if middleView != nil { if middleView != nil {
(middleView as? ModelMoleculeViewProtocol)?.setWithModel(model, delegateObject, additionalData) (middleView as? ModelMoleculeViewProtocol)?.set(with: model, delegateObject, additionalData)
} else if let moleculeModel = model.molecule, let molecule = MVMCoreUIMoleculeMappingObject.shared()?.createMolecule(moleculeModel, delegateObject) { } else if let moleculeModel = model.molecule, let molecule = MVMCoreUIMoleculeMappingObject.shared()?.createMolecule(moleculeModel, delegateObject) {
addMiddleView(molecule) addMiddleView(molecule)
} }
topLeftLabel.setWithModel(model.topLeftLabel, delegateObject, additionalData) topLeftLabel.setOptional(with: model.topLeftLabel, delegateObject, additionalData)
topRightLabel.setWithModel(model.topRightLabel, delegateObject, additionalData) topRightLabel.setOptional(with: model.topRightLabel, delegateObject, additionalData)
bottomLeftLabel.setWithModel(model.bottomLeftLabel, delegateObject, additionalData) bottomLeftLabel.setOptional(with: model.bottomLeftLabel, delegateObject, additionalData)
bottomRightLabel.setWithModel(model.bottomRightLabel, delegateObject, additionalData) bottomRightLabel.setOptional(with: model.bottomRightLabel, delegateObject, additionalData)
topLabelToMoleculeConstraint?.constant = (middleView != nil && (topLeftLabel.hasText || topRightLabel.hasText)) ? spaceAboveMolecule : 0 topLabelToMoleculeConstraint?.constant = (middleView != nil && (topLeftLabel.hasText || topRightLabel.hasText)) ? spaceAboveMolecule : 0
bottomLabelToMoleculeConstraint?.constant = (middleView != nil && (bottomLeftLabel.hasText || bottomRightLabel.hasText)) ? spaceBelowMolecule : 0 bottomLabelToMoleculeConstraint?.constant = (middleView != nil && (bottomLeftLabel.hasText || bottomRightLabel.hasText)) ? spaceBelowMolecule : 0

View File

@ -38,15 +38,16 @@ import UIKit
} }
// MARK:- ModelMoleculeViewProtocol // MARK:- ModelMoleculeViewProtocol
open override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let model = model as? HeadlineBodyLinkToggleModel else { return } guard let model = model as? HeadlineBodyLinkToggleModel else { return }
headlineBodyLink.setWithModel(model.headlineBodyLink, delegateObject, additionalData) headlineBodyLink.set(with: model.headlineBodyLink, delegateObject, additionalData)
toggle.setWithModel(model.toggle, delegateObject, additionalData) toggle.set(with: model.toggle, delegateObject, additionalData)
} }
public override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { public override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return HeadlineBodyLink.estimatedHeight(forRow: (molecule as? HeadlineBodyLinkToggleModel)?.headlineBodyLink, delegateObject: delegateObject) guard let model = model as? HeadlineBodyLinkToggleModel else { return nil }
return HeadlineBodyLink.estimatedHeight(with: model.headlineBodyLink, delegateObject)
} }
} }

View File

@ -35,18 +35,18 @@ import UIKit
} }
// MARK:- ModelMoleculeViewProtocol // MARK:- ModelMoleculeViewProtocol
open override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let headlineBodyToggleModel = model as? HeadlineBodyToggleModel else { guard let headlineBodyToggleModel = model as? HeadlineBodyToggleModel else {
return return
} }
setWithJSON(headlineBodyToggleModel.toJSON(), delegateObject: delegateObject, additionalData: additionalData) setWithJSON(headlineBodyToggleModel.toJSON(), delegateObject: delegateObject, additionalData: additionalData)
} }
open class override func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { open class override func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
guard let model = molecule as? HeadlineBodyToggleModel, guard let model = model as? HeadlineBodyToggleModel,
let toggleHeight = Toggle.estimatedHeight(forRow: model.toggle, delegateObject: delegateObject), let toggleHeight = Toggle.estimatedHeight(with: model.toggle, delegateObject),
let headlineBody = HeadlineBody.estimatedHeight(forRow: model.headlineBody, delegateObject: delegateObject) else { return nil } let headlineBody = HeadlineBody.estimatedHeight(with: model.headlineBody, delegateObject) else { return nil }
return max(toggleHeight, headlineBody) return max(toggleHeight, headlineBody)
} }

View File

@ -32,19 +32,19 @@ import UIKit
} }
// MARK:- ModelMoleculeViewProtocol // MARK:- ModelMoleculeViewProtocol
open override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
guard let model = molecule as? LabelToggleModel, guard let model = model as? LabelToggleModel,
let toggleHeight = Toggle.estimatedHeight(forRow: model.toggle, delegateObject: delegateObject), let toggleHeight = Toggle.estimatedHeight(with: model.toggle, delegateObject),
let labelHeight = Label.estimatedHeight(forRow: model.label, delegateObject: delegateObject) else { return nil } let labelHeight = Label.estimatedHeight(with: model.label, delegateObject) else { return nil }
return max(toggleHeight, labelHeight) return max(toggleHeight, labelHeight)
} }
open override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
guard let labelToggleModel = model as? LabelToggleModel else { guard let labelToggleModel = model as? LabelToggleModel else {
return return
} }
label.setWithModel(labelToggleModel.label, delegateObject, additionalData) label.set(with: labelToggleModel.label, delegateObject, additionalData)
toggle.setWithModel(labelToggleModel.toggle, delegateObject, additionalData) toggle.set(with: labelToggleModel.toggle, delegateObject, additionalData)
} }
// MARK: - MVMCoreUIMoleculeViewProtocol // MARK: - MVMCoreUIMoleculeViewProtocol

View File

@ -9,20 +9,20 @@
import Foundation import Foundation
public protocol ModelMoleculeViewProtocol { public protocol ModelMoleculeViewProtocol {
func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?)
static func nameForReuse(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?) -> String? static func nameForReuse(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> String?
static func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? static func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat?
static func requiredModules(_ molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?, error: AutoreleasingUnsafeMutablePointer<MVMCoreErrorObject?>?) -> [String]? static func requiredModules(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, error: AutoreleasingUnsafeMutablePointer<MVMCoreErrorObject?>?) -> [String]?
} }
extension ModelMoleculeViewProtocol { extension ModelMoleculeViewProtocol {
public static func nameForReuse(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?) -> String? { public static func nameForReuse(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> String? {
return model?.moleculeName return model.moleculeName
} }
public static func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { public static func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return nil return nil
} }
public static func requiredModules(_ molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?, error: AutoreleasingUnsafeMutablePointer<MVMCoreErrorObject?>?) -> [String]? { public static func requiredModules(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, error: AutoreleasingUnsafeMutablePointer<MVMCoreErrorObject?>?) -> [String]? {
return nil return nil
} }
// Temporary // Temporary
@ -31,4 +31,10 @@ extension ModelMoleculeViewProtocol {
let decoder = JSONDecoder() let decoder = JSONDecoder()
return try decoder.decode(type, from: data) return try decoder.decode(type, from: data)
} }
public func setOptional<T: MoleculeModelProtocol>(with model: T?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
if let model = model {
set(with: model, delegateObject, additionalData)
}
}
} }

View File

@ -19,8 +19,8 @@ open class ModuleMolecule: Container {
super.setupView() super.setupView()
} }
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let moduleMoleculeModel = model as? ModuleMoleculeModel, guard let moduleMoleculeModel = model as? ModuleMoleculeModel,
let moduleModel = delegateObject?.moleculeDelegate?.getModuleWithName(moduleMoleculeModel.moduleName) else { let moduleModel = delegateObject?.moleculeDelegate?.getModuleWithName(moduleMoleculeModel.moduleName) else {
@ -42,36 +42,36 @@ open class ModuleMolecule: Container {
} }
} }
} else { } else {
moduleMolecule?.setWithModel(model, delegateObject, additionalData) moduleMolecule?.set(with: model, delegateObject, additionalData)
} }
} }
public override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { public override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
guard let moduleMolecule = molecule as? ModuleMoleculeModel, guard let moduleMolecule = model as? ModuleMoleculeModel,
let moduleModel = delegateObject?.moleculeDelegate?.getModuleWithName(moduleMolecule.moduleName), let moduleModel = delegateObject?.moleculeDelegate?.getModuleWithName(moduleMolecule.moduleName),
let classType = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(moduleModel) as? ModelMoleculeViewProtocol.Type, let classType = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(moduleModel) as? ModelMoleculeViewProtocol.Type,
let height = classType.estimatedHeight(forRow: moduleModel, delegateObject: delegateObject)else { let height = classType.estimatedHeight(with: moduleModel, delegateObject) else {
// Critical error // Critical error
return 0 return 0
} }
return height return height
} }
public override class func nameForReuse(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?) -> String? { public override class func nameForReuse(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> String? {
guard let moduleMolecule = model as? ModuleMoleculeModel, guard let moduleMolecule = model as? ModuleMoleculeModel,
let moduleModel = delegateObject?.moleculeDelegate?.getModuleWithName(moduleMolecule.moduleName), let moduleModel = delegateObject?.moleculeDelegate?.getModuleWithName(moduleMolecule.moduleName),
let classType = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(moduleModel) as? ModelMoleculeViewProtocol.Type, let classType = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(moduleModel) as? ModelMoleculeViewProtocol.Type,
let name = classType.nameForReuse(moduleModel, delegateObject) else { let name = classType.nameForReuse(with: moduleModel, delegateObject) else {
// Critical error // Critical error
return "moduleMolecule<>" return "moduleMolecule<>"
} }
return name return name
} }
public override class func requiredModules(_ molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?, error: AutoreleasingUnsafeMutablePointer<MVMCoreErrorObject?>?) -> [String]? { public override class func requiredModules(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, error: AutoreleasingUnsafeMutablePointer<MVMCoreErrorObject?>?) -> [String]? {
guard let moduleName = (molecule as? ModuleMoleculeModel)?.moduleName, guard let moduleName = (model as? ModuleMoleculeModel)?.moduleName,
let _ = delegateObject?.moleculeDelegate?.getModuleWithName(moduleName) else { let _ = delegateObject?.moleculeDelegate?.getModuleWithName(moduleName) else {
if let errorObject = MVMCoreErrorObject(title: nil, message: MVMCoreGetterUtility.hardcodedString(withKey: HardcodedErrorUnableToProcess), code: CoreUIErrorCode.ErrorCodeModuleMolecule.rawValue, domain: ErrorDomainNative, location: String(describing: self)) { if let errorObject = MVMCoreErrorObject(title: nil, message: MVMCoreGetterUtility.hardcodedString(withKey: HardcodedErrorUnableToProcess), code: CoreUIErrorCode.ErrorCodeModuleMolecule.rawValue, domain: ErrorDomainNative, location: String(describing: self)) {
error?.pointee = errorObject error?.pointee = errorObject

View File

@ -37,11 +37,11 @@ public class MoleculeHeaderView: MoleculeContainer {
} }
// MARK: - ModelMoleculeViewProtocol // MARK: - ModelMoleculeViewProtocol
open override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let headerModel = headerModel else { return } guard let headerModel = headerModel else { return }
if let lineModel = headerModel.line { if let lineModel = headerModel.line {
line.setWithModel(lineModel, delegateObject, additionalData) line.set(with: lineModel, delegateObject, additionalData)
} }
} }

View File

@ -9,18 +9,18 @@
import Foundation import Foundation
import UIKit import UIKit
@objcMembers public class RadioButtonModel: NSObject { @objcMembers public class RadioButtonSelectionHelper: NSObject {
private var selectedRadioButton: RadioButton? private var selectedRadioButton: RadioButton?
private var fieldGroupName: String? private var fieldGroupName: String?
public static func setupForRadioButtonGroup(radioButton: RadioButton, formValidator: FormValidator?) -> RadioButtonModel { public static func setupForRadioButtonGroup(radioButton: RadioButton, formValidator: FormValidator?) -> RadioButtonSelectionHelper {
guard let groupName = radioButton.radioGroupName, guard let groupName = radioButton.radioGroupName,
let formValidator = formValidator else { let formValidator = formValidator else {
return RadioButtonModel() return RadioButtonSelectionHelper()
} }
let radioButtonModel = formValidator.radioButtonsModelByGroup[groupName] ?? RadioButtonModel() let radioButtonModel = formValidator.radioButtonsModelByGroup[groupName] ?? RadioButtonSelectionHelper()
radioButtonModel.fieldGroupName = radioButton.formFieldGroupName() radioButtonModel.fieldGroupName = radioButton.formFieldGroupName()
formValidator.radioButtonsModelByGroup[groupName] = radioButtonModel formValidator.radioButtonsModelByGroup[groupName] = radioButtonModel
return radioButtonModel return radioButtonModel
@ -34,7 +34,7 @@ import UIKit
} }
// MARK: - FormValidationFormFieldProtocol // MARK: - FormValidationFormFieldProtocol
extension RadioButtonModel: FormValidationFormFieldProtocol { extension RadioButtonSelectionHelper: FormValidationFormFieldProtocol {
public func formFieldGroupName() -> String? { public func formFieldGroupName() -> String? {
return selectedRadioButton?.formFieldGroupName() ?? self.fieldGroupName return selectedRadioButton?.formFieldGroupName() ?? self.fieldGroupName
} }

View File

@ -29,10 +29,10 @@ import UIKit
constraint.isActive = true constraint.isActive = true
} }
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
if let casteModel = model as? ScrollerModel { if let casteModel = model as? ScrollerModel {
if view != nil { if view != nil {
(view as? ModelMoleculeViewProtocol)?.setWithModel(casteModel.molecule, delegateObject, additionalData) (view as? ModelMoleculeViewProtocol)?.set(with: casteModel.molecule, delegateObject, additionalData)
} else { } else {
if let molecule = MVMCoreUIMoleculeMappingObject.shared()?.createMolecule(casteModel.molecule, delegateObject) { if let molecule = MVMCoreUIMoleculeMappingObject.shared()?.createMolecule(casteModel.molecule, delegateObject) {
contentView.addSubview(molecule) contentView.addSubview(molecule)
@ -41,6 +41,6 @@ import UIKit
} }
} }
} }
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
} }
} }

View File

@ -8,7 +8,7 @@
import UIKit import UIKit
@objcMembers open class EyebrowHeadlineBodyLink: Container { @objcMembers open class EyebrowHeadlineBodyLink: View {
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Outlets // MARK: - Outlets
//-------------------------------------------------- //--------------------------------------------------
@ -29,10 +29,8 @@ import UIKit
open override func setupView() { open override func setupView() {
super.setupView() super.setupView()
stack.stackItems = [StackItem(andContain: eyebrow), stack.setAndCreateModel(with: [eyebrow, headline, body, link])
StackItem(andContain: headline), stack.stackModel?.spacing = 0
StackItem(andContain: body),
StackItem(andContain: link)]
addSubview(stack) addSubview(stack)
NSLayoutConstraint.constraintPinSubview(toSuperview: stack) NSLayoutConstraint.constraintPinSubview(toSuperview: stack)
} }
@ -49,7 +47,6 @@ import UIKit
open override func reset() { open override func reset() {
super.reset() super.reset()
stack.reset() stack.reset()
stack.stackModel?.spacing = 0
eyebrow.styleB3(true) eyebrow.styleB3(true)
headline.styleB1(true) headline.styleB1(true)
body.styleB2(true) body.styleB2(true)
@ -59,25 +56,23 @@ import UIKit
// MARK: - ModelMoleculeViewProtocol // MARK: - ModelMoleculeViewProtocol
//-------------------------------------------------- //--------------------------------------------------
open override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
eyebrow.setWithModel(casteModel?.eyebrow, delegateObject, additionalData) eyebrow.setOptional(with: casteModel?.eyebrow, delegateObject, additionalData)
headline.setWithModel(casteModel?.headline, delegateObject, additionalData) headline.setOptional(with: casteModel?.headline, delegateObject, additionalData)
body.setWithModel(casteModel?.body, delegateObject, additionalData) body.setOptional(with: casteModel?.body, delegateObject, additionalData)
link.setWithModel(casteModel?.link, delegateObject, additionalData) link.setOptional(with: casteModel?.link, delegateObject, additionalData)
// Create a stack model to use for the internal stack. // Hide labels if neeeded.
let stackModel = StackModel(molecules: [StackItemModel(gone: !eyebrow.hasText), stack.stackModel?.molecules[0].gone = !eyebrow.hasText
StackItemModel(gone: !headline.hasText), stack.stackModel?.molecules[1].gone = !headline.hasText
StackItemModel(gone: !body.hasText), stack.stackModel?.molecules[2].gone = !body.hasText
StackItemModel(gone: (link.titleLabel?.text?.count ?? 0) == 0)]) stack.stackModel?.molecules[3].gone = (link.titleLabel?.text?.count ?? 0) == 0
stackModel.spacing = 0
stack.model = stackModel
stack.restack() stack.restack()
} }
public override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { public override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return 65 return 65
} }
} }

View File

@ -73,17 +73,17 @@ import Foundation
} }
// MARK:- ModelMoleculeViewProtocol // MARK:- ModelMoleculeViewProtocol
public override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { public override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return 320 return 320
} }
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let model = model as? HeadlineBodyCaretLinkImageModel else { return } guard let model = model as? HeadlineBodyCaretLinkImageModel else { return }
headlineBody.setWithModel(model.headlineBody, delegateObject, additionalData) headlineBody.set(with: model.headlineBody, delegateObject, additionalData)
caretButton.setWithModel(model.caretLink, delegateObject, additionalData) caretButton.setOptional(with: model.caretLink, delegateObject, additionalData)
caretButton.isHidden = model.caretLink == nil caretButton.isHidden = model.caretLink == nil
backgroundImageView.setWithModel(model.image, delegateObject, additionalData) backgroundImageView.set(with: model.image, delegateObject, additionalData)
backgroundImageView.alignFillHorizontal() backgroundImageView.alignFillHorizontal()
backgroundImageView.alignFillVertical() backgroundImageView.alignFillVertical()
} }

View File

@ -124,19 +124,19 @@ open class HeadlineBody: View {
// MARK: - ModelMoleculeViewProtocol // MARK: - ModelMoleculeViewProtocol
//-------------------------------------------------- //--------------------------------------------------
public override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { public override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return 58 return 58
} }
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let headlineBodyModel = model as? HeadlineBodyModel else { return } guard let headlineBodyModel = model as? HeadlineBodyModel else { return }
style(with: headlineBodyModel.style) style(with: headlineBodyModel.style)
headlineLabel.setWithModel(headlineBodyModel.headline, delegateObject, additionalData) headlineLabel.setOptional(with: headlineBodyModel.headline, delegateObject, additionalData)
messageLabel.setWithModel(headlineBodyModel.body, delegateObject, additionalData) messageLabel.setOptional(with: headlineBodyModel.body, delegateObject, additionalData)
} }
//-------------------------------------------------- //--------------------------------------------------

View File

@ -108,15 +108,15 @@ import UIKit
} }
// MARK:- ModelMoleculeViewProtocol // MARK:- ModelMoleculeViewProtocol
public override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { public override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return 320 return 320
} }
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let model = model as? HeadlineBodyButtonModel else { return } guard let model = model as? HeadlineBodyButtonModel else { return }
buttonHeadlinePadding = model.buttonHeadlinePadding buttonHeadlinePadding = model.buttonHeadlinePadding
headlineBody.setWithModel(model.headlineBody, delegateObject, additionalData) headlineBody.set(with: model.headlineBody, delegateObject, additionalData)
button.setWithModel(model.button, delegateObject, additionalData) button.set(with: model.button, delegateObject, additionalData)
} }
} }

View File

@ -67,14 +67,14 @@ import UIKit
} }
// MARK:- ModelMoleculeViewProtocol // MARK:- ModelMoleculeViewProtocol
open override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let model = model as? HeadlineBodyLinkModel else { return } guard let model = model as? HeadlineBodyLinkModel else { return }
headlineBody.setWithModel(model.headlineBody, delegateObject, additionalData) headlineBody.set(with: model.headlineBody, delegateObject, additionalData)
link.setWithModel(model.link, delegateObject, additionalData) link.set(with: model.link, delegateObject, additionalData)
} }
public override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { public override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return 60 return 60
} }
} }

View File

@ -10,7 +10,7 @@ import UIKit
// This class is only temporarily necessary. Eventually we will have initWithModel instad of just init for moleculeviews, which will remove this need. // This class is only temporarily necessary. Eventually we will have initWithModel instad of just init for moleculeviews, which will remove this need.
open class StringAndMoleculeStack: MoleculeStackView { open class StringAndMoleculeStack: MoleculeStackView {
override func createStackItemsFromModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { override open func createStackItemsFromModel(_ model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) {
guard let model = stackModel else { return } guard let model = stackModel else { return }
for stackItemModel in model.molecules { for stackItemModel in model.molecules {
guard let stringAndMoleculeModel = stackItemModel.molecule as? StringAndMoleculeModel, guard let stringAndMoleculeModel = stackItemModel.molecule as? StringAndMoleculeModel,
@ -21,7 +21,7 @@ open class StringAndMoleculeStack: MoleculeStackView {
} }
let view = StringAndMoleculeView(string: stringAndMoleculeModel.string, molecule: molecule) let view = StringAndMoleculeView(string: stringAndMoleculeModel.string, molecule: molecule)
let stackItem = MoleculeStackItem(andContain: view) let stackItem = MoleculeStackItem(andContain: view)
stackItem.setWithModel(stackItemModel, delegateObject, nil) stackItem.set(with: stackItemModel, delegateObject, nil)
stackItems.append(stackItem) stackItems.append(stackItem)
} }
} }

View File

@ -76,11 +76,11 @@ open class StringAndMoleculeView: View {
(molecule as? MoleculeViewProtocol)?.reset?() (molecule as? MoleculeViewProtocol)?.reset?()
} }
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let model = model as? StringAndMoleculeModel else { return } guard let model = model as? StringAndMoleculeModel else { return }
label.text = model.string label.text = model.string
molecule.setWithModel(model.molecule, delegateObject, additionalData) molecule.set(with: model.molecule, delegateObject, additionalData)
} }
func updateLeftViewWidthConstraint(_ percent: CGFloat) { func updateLeftViewWidthConstraint(_ percent: CGFloat) {

View File

@ -83,8 +83,8 @@ open class Carousel: View {
} }
// MARK: - MVMCoreUIMoleculeViewProtocol // MARK: - MVMCoreUIMoleculeViewProtocol
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
guard let carouselModel = model as? CarouselModel else { return } guard let carouselModel = model as? CarouselModel else { return }
collectionView.backgroundColor = backgroundColor collectionView.backgroundColor = backgroundColor
collectionView.layer.borderColor = backgroundColor?.cgColor collectionView.layer.borderColor = backgroundColor?.cgColor
@ -159,7 +159,7 @@ open class Carousel: View {
/// Returns the (identifier, class) of the molecule for the given map. /// Returns the (identifier, class) of the molecule for the given map.
func getMoleculeInfo(with molecule: MoleculeModelProtocol, delegateObject: MVMCoreUIDelegateObject?) -> (identifier: String, class: AnyClass, molecule: MoleculeModelProtocol)? { func getMoleculeInfo(with molecule: MoleculeModelProtocol, delegateObject: MVMCoreUIDelegateObject?) -> (identifier: String, class: AnyClass, molecule: MoleculeModelProtocol)? {
guard let className = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(molecule) , guard let className = MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(molecule) ,
let moleculeName = (className as? ModelMoleculeViewProtocol.Type)?.nameForReuse(molecule, delegateObject) ?? molecule.moleculeName else { let moleculeName = (className as? ModelMoleculeViewProtocol.Type)?.nameForReuse(with: molecule, delegateObject) ?? molecule.moleculeName else {
return nil return nil
} }
return (moleculeName, className, molecule) return (moleculeName, className, molecule)
@ -275,7 +275,7 @@ extension Carousel: UICollectionViewDataSource {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: moleculeInfo.identifier, for: indexPath) let cell = collectionView.dequeueReusableCell(withReuseIdentifier: moleculeInfo.identifier, for: indexPath)
if let protocolCell = cell as? MVMCoreUIMoleculeViewProtocol & ModelMoleculeViewProtocol { if let protocolCell = cell as? MVMCoreUIMoleculeViewProtocol & ModelMoleculeViewProtocol {
protocolCell.reset?() protocolCell.reset?()
protocolCell.setWithModel(moleculeInfo.molecule, nil, nil) protocolCell.set(with: moleculeInfo.molecule, nil, nil)
protocolCell.updateView(collectionView.bounds.width) protocolCell.updateView(collectionView.bounds.width)
} }
setAccessiblity(cell, index: indexPath.row) setAccessiblity(cell, index: indexPath.row)

View File

@ -33,7 +33,7 @@ open class MoleculeStackView: Stack<MoleculeStackModel> {
// MARK: - Adding to stack // MARK: - Adding to stack
/// Creates all of the stackItems for the stackItemModels /// Creates all of the stackItems for the stackItemModels
override func createStackItemsFromModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) { override open func createStackItemsFromModel(_ model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) {
guard let stackItemModels = stackModel?.molecules else { return } guard let stackItemModels = stackModel?.molecules else { return }
for model in stackItemModels { for model in stackItemModels {
if let stackItem = MVMCoreUIMoleculeMappingObject.shared()?.createMolecule(model, delegateObject) as? MoleculeStackItem { if let stackItem = MVMCoreUIMoleculeMappingObject.shared()?.createMolecule(model, delegateObject) as? MoleculeStackItem {

View File

@ -9,7 +9,7 @@
import Foundation import Foundation
open class Stack<T>: Container where T: StackModelProtocol { open class Stack<T>: Container where T: (StackModelProtocol & MoleculeModelProtocol) {
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Properties // MARK: - Properties
//-------------------------------------------------- //--------------------------------------------------
@ -24,7 +24,7 @@ open class Stack<T>: Container where T: StackModelProtocol {
// MARK: - Helpers // MARK: - Helpers
//-------------------------------------------------- //--------------------------------------------------
public func pinView(_ view: UIView, toView: UIView, attribute: NSLayoutConstraint.Attribute, relation: NSLayoutConstraint.Relation, priority: UILayoutPriority, constant: CGFloat) { open func pinView(_ view: UIView, toView: UIView, attribute: NSLayoutConstraint.Attribute, relation: NSLayoutConstraint.Relation, priority: UILayoutPriority, constant: CGFloat) {
let constraint = NSLayoutConstraint(item: view, attribute: attribute, relatedBy: relation, toItem: toView, attribute: attribute, multiplier: 1.0, constant: constant) let constraint = NSLayoutConstraint(item: view, attribute: attribute, relatedBy: relation, toItem: toView, attribute: attribute, multiplier: 1.0, constant: constant)
constraint.priority = priority constraint.priority = priority
@ -32,7 +32,7 @@ open class Stack<T>: Container where T: StackModelProtocol {
} }
/// Restacks the existing items. /// Restacks the existing items.
func restack() { open func restack() {
removeAllItemViews() removeAllItemViews()
guard let stackModel = stackModel else { return } guard let stackModel = stackModel else { return }
let stackItems = self.stackItems let stackItems = self.stackItems
@ -49,7 +49,7 @@ open class Stack<T>: Container where T: StackModelProtocol {
} }
/// Removes all stack items views from the view. /// Removes all stack items views from the view.
func removeAllItemViews() { open func removeAllItemViews() {
for item in stackItems { for item in stackItems {
item.removeFromSuperview() item.removeFromSuperview()
} }
@ -63,20 +63,52 @@ open class Stack<T>: Container where T: StackModelProtocol {
super.init(frame: frame) super.init(frame: frame)
} }
public init(withJSON json: [AnyHashable: Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) { /// The main initializer for model driven
public init(with model: T, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) {
super.init(frame: .zero)
setOptional(with: model, delegateObject, additionalData)
}
/// The main initializer for hardcode driven
public init(with model: T, stackItems: [UIView]) {
super.init(frame: CGRect.zero) super.init(frame: CGRect.zero)
setWithJSON(json, delegateObject: delegateObject, additionalData: additionalData) self.model = model
self.stackItems = stackItems
} }
public required init?(coder aDecoder: NSCoder) { public required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented") fatalError("init(coder:) has not been implemented")
} }
/// Returns a Stack created with a StackModel and StackItems containing the passed in views.
public static func createStack(with views: [UIView], axis: NSLayoutConstraint.Axis? = nil, spacing: CGFloat? = nil) -> Stack<StackModel> {
var items: [StackItem] = []
var models: [StackItemModel] = []
for view in views {
items.append(StackItem(andContain: view))
models.append(StackItemModel())
}
let model = StackModel(molecules: models, axis: axis, spacing: spacing)
return Stack<StackModel>(with: model, stackItems: items)
}
/// Returns a Stack created with a StackModel containing the passed in views and using the passed in stackitems.
public static func createStack(with viewModels:[(view: UIView, model: StackItemModel)], axis: NSLayoutConstraint.Axis? = nil, spacing: CGFloat? = nil) -> Stack<StackModel> {
var stackItems: [StackItem] = []
var models: [StackItemModel] = []
for item in viewModels {
stackItems.append(StackItem(andContain: item.view))
models.append(item.model)
}
let model = StackModel(molecules: models, axis: axis, spacing: spacing)
return Stack<StackModel>(with: model, stackItems: stackItems)
}
//-------------------------------------------------- //--------------------------------------------------
// MARK: - MFViewProtocol // MARK: - MFViewProtocol
//-------------------------------------------------- //--------------------------------------------------
public override func setupView() { open override func setupView() {
super.setupView() super.setupView()
guard contentView.superview == nil else { return } guard contentView.superview == nil else { return }
MVMCoreUIUtility.setMarginsFor(contentView, leading: 0, top: 0, trailing: 0, bottom: 0) MVMCoreUIUtility.setMarginsFor(contentView, leading: 0, top: 0, trailing: 0, bottom: 0)
@ -88,7 +120,7 @@ open class Stack<T>: Container where T: StackModelProtocol {
contentView.setContentHuggingPriority(.defaultHigh, for: .horizontal) contentView.setContentHuggingPriority(.defaultHigh, for: .horizontal)
} }
public override func updateView(_ size: CGFloat) { open override func updateView(_ size: CGFloat) {
super.updateView(size) super.updateView(size)
for item in stackItems { for item in stackItems {
(item as? MVMCoreViewProtocol)?.updateView(size) (item as? MVMCoreViewProtocol)?.updateView(size)
@ -99,7 +131,7 @@ open class Stack<T>: Container where T: StackModelProtocol {
// MARK: - MVMCoreUIMoleculeViewProtocol // MARK: - MVMCoreUIMoleculeViewProtocol
//-------------------------------------------------- //--------------------------------------------------
public override func reset() { open override func reset() {
super.reset() super.reset()
backgroundColor = .clear backgroundColor = .clear
for item in stackItems { for item in stackItems {
@ -107,13 +139,13 @@ open class Stack<T>: Container where T: StackModelProtocol {
} }
} }
public override func setWithModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
let previousModel = self.model let previousModel = self.model
super.setWithModel(model, delegateObject, additionalData) super.set(with: model, delegateObject, additionalData)
removeAllItemViews() removeAllItemViews()
// If the items in the stack are different, clear them, create new ones. // If the items in the stack are different, clear them, create new ones.
if (previousModel == nil) || Self.nameForReuse(previousModel, delegateObject) != Self.nameForReuse(model, delegateObject) { if (previousModel == nil) || Self.nameForReuse(with: previousModel!, delegateObject) != Self.nameForReuse(with: model, delegateObject) {
stackItems = [] stackItems = []
createStackItemsFromModel(model, delegateObject, additionalData) createStackItemsFromModel(model, delegateObject, additionalData)
} else { } else {
@ -123,7 +155,7 @@ open class Stack<T>: Container where T: StackModelProtocol {
restack() restack()
} }
public override class func nameForReuse(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?) -> String? { open override class func nameForReuse(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> String? {
// This will aggregate names of molecules to make an id. // This will aggregate names of molecules to make an id.
guard let model = model as? T else { guard let model = model as? T else {
return "stack<>" return "stack<>"
@ -132,7 +164,7 @@ open class Stack<T>: Container where T: StackModelProtocol {
for case let item in model.molecules { for case let item in model.molecules {
if let moleculeName = item.moleculeName { if let moleculeName = item.moleculeName {
if let moleculeClass = MVMCoreUIMoleculeMappingObject.shared()?.moleculeMapping[moleculeName] as? ModelMoleculeViewProtocol.Type, if let moleculeClass = MVMCoreUIMoleculeMappingObject.shared()?.moleculeMapping[moleculeName] as? ModelMoleculeViewProtocol.Type,
let nameForReuse = moleculeClass.nameForReuse(item, delegateObject) { let nameForReuse = moleculeClass.nameForReuse(with: item, delegateObject) {
name.append(nameForReuse + ",") name.append(nameForReuse + ",")
} else { } else {
name.append(moleculeName + ",") name.append(moleculeName + ",")
@ -144,14 +176,14 @@ open class Stack<T>: Container where T: StackModelProtocol {
} }
// Need to update to take into account first spacing flag // Need to update to take into account first spacing flag
public override class func estimatedHeight(forRow molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
guard let model = molecule as? T else { return 0 } guard let model = model as? T else { return 0 }
let horizontal = model.axis == .horizontal let horizontal = model.axis == .horizontal
var estimatedHeight: CGFloat = 0 var estimatedHeight: CGFloat = 0
for case let item in model.molecules { for case let item in model.molecules {
if item.gone { continue } if item.gone { continue }
let height = (MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(item) as? ModelMoleculeViewProtocol.Type)?.estimatedHeight(forRow: item, delegateObject: delegateObject) ?? 0 let height = (MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(item) as? ModelMoleculeViewProtocol.Type)?.estimatedHeight(with: item, delegateObject) ?? 0
if !horizontal { if !horizontal {
// Vertical stack aggregates the items // Vertical stack aggregates the items
let spacing = item.spacing ?? model.spacing let spacing = item.spacing ?? model.spacing
@ -164,11 +196,11 @@ open class Stack<T>: Container where T: StackModelProtocol {
return estimatedHeight return estimatedHeight
} }
public override class func requiredModules(_ molecule: MoleculeModelProtocol?, delegateObject: MVMCoreUIDelegateObject?, error: AutoreleasingUnsafeMutablePointer<MVMCoreErrorObject?>?) -> [String]? { open override class func requiredModules(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, error: AutoreleasingUnsafeMutablePointer<MVMCoreErrorObject?>?) -> [String]? {
guard let model = molecule as? T else { return nil } guard let model = model as? T else { return nil }
var modules: [String] = [] var modules: [String] = []
for case let item in model.molecules { for case let item in model.molecules {
if let modulesForMolecule = (MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(item) as? ModelMoleculeViewProtocol.Type)?.requiredModules(item, delegateObject: delegateObject, error: error) { if let modulesForMolecule = (MVMCoreUIMoleculeMappingObject.shared()?.getMoleculeClass(item) as? ModelMoleculeViewProtocol.Type)?.requiredModules(with: item, delegateObject, error: error) {
modules += modulesForMolecule modules += modulesForMolecule
} }
} }
@ -180,19 +212,43 @@ open class Stack<T>: Container where T: StackModelProtocol {
//-------------------------------------------------- //--------------------------------------------------
/// Can be subclassed to create views when we get stack item models and have no views yet /// Can be subclassed to create views when we get stack item models and have no views yet
func createStackItemsFromModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { } open func createStackItemsFromModel(_ model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { }
/// Can be subclassed to set stack items with model when we already have views /// Can be subclassed to set stack items with model when we already have views
func setStackItemsFromModel(_ model: MoleculeModelProtocol?, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { open func setStackItemsFromModel(_ model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
guard let models = stackModel?.molecules else { return } guard let models = stackModel?.molecules else { return }
for (index, element) in models.enumerated() { for (index, element) in models.enumerated() {
(stackItems[index] as? ModelMoleculeViewProtocol)?.setWithModel(element, delegateObject, additionalData) (stackItems[index] as? ModelMoleculeViewProtocol)?.set(with: element, delegateObject, additionalData)
} }
} }
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Adding to stack // MARK: - Adding to stack
//-------------------------------------------------- //--------------------------------------------------
/// Sets the stack with StackItems containing the passed in views and creates a StackModel with StackItems.
open func setAndCreateModel(with views: [UIView]) {
var stackItems: [StackItem] = []
var models: [StackItemModel] = []
for view in views {
stackItems.append(StackItem(andContain: view))
models.append(StackItemModel())
}
self.stackItems = stackItems
model = StackModel(molecules: models)
}
/// Sets the stack with StackItems containing the passed in views and sets the StackModel with models.
open func set(with viewModels:[(view: UIView, model: T.AnyStackItemModel)]) {
guard var stackModel = self.stackModel else { return }
var stackItems: [StackItem] = []
var models: [T.AnyStackItemModel] = []
for item in viewModels {
stackItems.append(StackItem(andContain: item.view))
models.append(item.model)
}
stackModel.molecules = models
self.stackItems = stackItems
}
/// Gets the percent modifier. This value is used to help properly calculate percent for stack items when spacing is involved. /// Gets the percent modifier. This value is used to help properly calculate percent for stack items when spacing is involved.
private func getTotalSpace() -> CGFloat { private func getTotalSpace() -> CGFloat {
@ -237,7 +293,7 @@ open class Stack<T>: Container where T: StackModelProtocol {
if first { if first {
pinView(view, toView: contentView, attribute: .top, relation: .equal, priority: .required, constant: stackModel.useStackSpacingBeforeFirstItem ? spacing : model.spacing ?? 0) pinView(view, toView: contentView, attribute: .top, relation: .equal, priority: .required, constant: stackModel.useStackSpacingBeforeFirstItem ? spacing : model.spacing ?? 0)
} else if let previousView = stackItems.last(where: { item in } else if let previousView = stackItems.last(where: { item in
return !model.gone return item.superview != nil
}) { }) {
view.topAnchor.constraint(equalTo: previousView.bottomAnchor, constant: spacing).isActive = true view.topAnchor.constraint(equalTo: previousView.bottomAnchor, constant: spacing).isActive = true
} }
@ -256,7 +312,7 @@ open class Stack<T>: Container where T: StackModelProtocol {
// First horizontal item has no spacing by default unless told otherwise. // First horizontal item has no spacing by default unless told otherwise.
pinView(view, toView: contentView, attribute: .leading, relation: .equal, priority: .required, constant: stackModel.useStackSpacingBeforeFirstItem ? spacing : model.spacing ?? 0) pinView(view, toView: contentView, attribute: .leading, relation: .equal, priority: .required, constant: stackModel.useStackSpacingBeforeFirstItem ? spacing : model.spacing ?? 0)
} else if let previousView = stackItems.last(where: { item in } else if let previousView = stackItems.last(where: { item in
return !model.gone return item.superview != nil
}) { }) {
view.leftAnchor.constraint(equalTo: previousView.rightAnchor, constant: spacing).isActive = true view.leftAnchor.constraint(equalTo: previousView.rightAnchor, constant: spacing).isActive = true
} }

View File

@ -9,16 +9,23 @@
import Foundation import Foundation
@objcMembers public class StackModel: StackModelProtocol, MoleculeModelProtocol { @objcMembers public class StackModel: StackModelProtocol, MoleculeModelProtocol {
static let defaultSpacing: CGFloat = 16.0
public static var identifier: String = "simpleStack" public static var identifier: String = "simpleStack"
public var backgroundColor: Color? public var backgroundColor: Color?
public var molecules: [StackItemModel] public var molecules: [StackItemModel]
public var axis: NSLayoutConstraint.Axis = .vertical public var axis: NSLayoutConstraint.Axis = .vertical
public var spacing: CGFloat = 16.0 public var spacing: CGFloat = StackModel.defaultSpacing
public var useStackSpacingBeforeFirstItem = false public var useStackSpacingBeforeFirstItem = false
public init(molecules: [StackItemModel], axis: NSLayoutConstraint.Axis = .vertical) { public init(molecules: [StackItemModel], axis: NSLayoutConstraint.Axis? = nil, spacing: CGFloat? = nil) {
self.molecules = molecules self.molecules = molecules
self.axis = axis if let axis = axis {
self.axis = axis
}
if let spacing = spacing {
self.spacing = spacing
}
} }
private enum CodingKeys: String, CodingKey { private enum CodingKeys: String, CodingKey {

View File

@ -10,7 +10,7 @@ import Foundation
public extension MVMCoreUIMoleculeMappingObject { public extension MVMCoreUIMoleculeMappingObject {
func register<M: Model, V: MVMCoreUIMoleculeViewProtocol>(viewClass: V.Type, viewModelClass: M.Type) { func register<M: ModelProtocol, V: MVMCoreUIMoleculeViewProtocol>(viewClass: V.Type, viewModelClass: M.Type) {
try? ModelRegistry.register(viewModelClass) try? ModelRegistry.register(viewModelClass)
MVMCoreUIMoleculeMappingObject.shared()?.moleculeMapping.setObject(viewClass, forKey: viewModelClass.identifier as NSString) MVMCoreUIMoleculeMappingObject.shared()?.moleculeMapping.setObject(viewClass, forKey: viewModelClass.identifier as NSString)
} }
@ -34,7 +34,7 @@ public extension MVMCoreUIMoleculeMappingObject {
let setData = {() in let setData = {() in
if let molecule = molecule as? ModelMoleculeViewProtocol { if let molecule = molecule as? ModelMoleculeViewProtocol {
molecule.setWithModel(model, delegateObject, nil) molecule.set(with: model, delegateObject, nil)
} else { } else {
molecule.setWithJSON?(model.toJSON(), delegateObject: delegateObject, additionalData: nil) molecule.setWithJSON?(model.toJSON(), delegateObject: delegateObject, additionalData: nil)
} }

View File

@ -29,6 +29,7 @@ import Foundation
// Buttons // Buttons
MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: PillButton.self, viewModelClass: ButtonModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: PillButton.self, viewModelClass: ButtonModel.self)
MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: TwoButtonView.self, viewModelClass: TwoButtonViewModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: TwoButtonView.self, viewModelClass: TwoButtonViewModel.self)
MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ExternalLink.self, viewModelClass: ExternalLinkModel.self)
MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: Link.self, viewModelClass: LinkModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: Link.self, viewModelClass: LinkModel.self)
MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: CaretLink.self, viewModelClass: CaretLinkModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: CaretLink.self, viewModelClass: CaretLinkModel.self)
@ -50,6 +51,8 @@ import Foundation
MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: Toggle.self, viewModelClass: ToggleModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: Toggle.self, viewModelClass: ToggleModel.self)
MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: Checkbox.self, viewModelClass: CheckboxModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: Checkbox.self, viewModelClass: CheckboxModel.self)
MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: CheckboxLabel.self, viewModelClass: CheckboxLabelModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: CheckboxLabel.self, viewModelClass: CheckboxLabelModel.self)
MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: RadioButton.self, viewModelClass: RadioButtonModel.self)
MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: Arrow.self, viewModelClass: ArrowModel.self)
// Horizontal Combination Molecules // Horizontal Combination Molecules
MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: StringAndMoleculeView.self, viewModelClass: StringAndMoleculeModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: StringAndMoleculeView.self, viewModelClass: StringAndMoleculeModel.self)
@ -59,6 +62,7 @@ import Foundation
MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListFourColumnDataUsageDivider.self, viewModelClass: ListFourColumnDataUsageDividerModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListFourColumnDataUsageDivider.self, viewModelClass: ListFourColumnDataUsageDividerModel.self)
MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListOneColumnFullWidthTextAllTextAndLinks.self, viewModelClass: ListOneColumnFullWidthTextAllTextAndLinksModel.self)
// Vertical Combination Molecules // Vertical Combination Molecules
MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: HeadlineBody.self, viewModelClass: HeadlineBodyModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: HeadlineBody.self, viewModelClass: HeadlineBodyModel.self)
@ -78,6 +82,7 @@ import Foundation
MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListLeftVariableIconWithRightCaret.self, viewModelClass: ListLeftVariableIconWithRightCaretModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListLeftVariableIconWithRightCaret.self, viewModelClass: ListLeftVariableIconWithRightCaretModel.self)
MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListLeftVariableCheckboxAllTextAndLinks.self, viewModelClass: ListLeftVariableCheckboxAllTextAndLinksModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListLeftVariableCheckboxAllTextAndLinks.self, viewModelClass: ListLeftVariableCheckboxAllTextAndLinksModel.self)
MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListRightVariablePayments.self, viewModelClass: ListRightVariablePaymentsModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListRightVariablePayments.self, viewModelClass: ListRightVariablePaymentsModel.self)
MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: ListLeftVariableRadioButtonAndPaymentMethod.self, viewModelClass: ListLeftVariableRadioButtonAndPaymentMethodModel.self)
// List items // List items
MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: MoleculeTableViewCell.self, viewModelClass: MoleculeListItemModel.self) MVMCoreUIMoleculeMappingObject.shared()?.register(viewClass: MoleculeTableViewCell.self, viewModelClass: MoleculeListItemModel.self)
@ -107,7 +112,6 @@ import Foundation
MVMCoreUIMoleculeMappingObject.shared()?.moleculeMapping.setObject(DateDropdownEntryField.self, forKey: "dateDropdownEntryField" as NSString) MVMCoreUIMoleculeMappingObject.shared()?.moleculeMapping.setObject(DateDropdownEntryField.self, forKey: "dateDropdownEntryField" as NSString)
MVMCoreUIMoleculeMappingObject.shared()?.moleculeMapping.setObject(Checkbox.self, forKey: "checkbox" as NSString) MVMCoreUIMoleculeMappingObject.shared()?.moleculeMapping.setObject(Checkbox.self, forKey: "checkbox" as NSString)
MVMCoreUIMoleculeMappingObject.shared()?.moleculeMapping.setObject(CheckboxLabel.self, forKey: "checkboxLabel" as NSString) MVMCoreUIMoleculeMappingObject.shared()?.moleculeMapping.setObject(CheckboxLabel.self, forKey: "checkboxLabel" as NSString)
MVMCoreUIMoleculeMappingObject.shared()?.moleculeMapping.setObject(RadioButton.self, forKey: "radioButton" as NSString)
MVMCoreUIMoleculeMappingObject.shared()?.moleculeMapping.setObject(RadioButtonLabel.self, forKey: "radioButtonLabel" as NSString) MVMCoreUIMoleculeMappingObject.shared()?.moleculeMapping.setObject(RadioButtonLabel.self, forKey: "radioButtonLabel" as NSString)
MVMCoreUIMoleculeMappingObject.shared()?.moleculeMapping.setObject(MVMCoreUIPageControl.self, forKey: "barsPager" as NSString) MVMCoreUIMoleculeMappingObject.shared()?.moleculeMapping.setObject(MVMCoreUIPageControl.self, forKey: "barsPager" as NSString)

View File

@ -98,6 +98,48 @@ B3 -> Legal
//------------------------------------------------- //-------------------------------------------------
// Returns the fonts for these styles. Scales them as needed by default // Returns the fonts for these styles. Scales them as needed by default
#pragma mark - 3.0 fonts
///auto select corresponding font based on font size, DS for font bigger than 15 pt, TX for font smaller than 15 pt
+ (nonnull UIFont *)getMVA3FontSize:(CGFloat)size bold:(BOOL)isBold;
///Bold 36pt
+ (nonnull UIFont *)fontTitle2XLarge:(BOOL)genericScaling;
+ (nonnull UIFont *)fontTitle2XLarge;
///Bold 32pt
+ (nonnull UIFont *)fontTitleXLarge:(BOOL)genericScaling;
+ (nonnull UIFont *)fontTitleXLarge;
///Bold 24pt
+ (nonnull UIFont *)fontBoldTitleLarge:(BOOL)genericScaling;
+ (nonnull UIFont *)fontBoldTitleLarge;
///Regular 24pt
+ (nonnull UIFont *)fontRegularTitleLarge:(BOOL)genericScaling;
+ (nonnull UIFont *)fontRegularTitleLarge;
///Bold 20pt
+ (nonnull UIFont *)fontBoldTitleMedium:(BOOL)genericScaling;
+ (nonnull UIFont *)fontBoldTitleMedium;
///Regular 20pt
+ (nonnull UIFont *)fontRegularTitleMedium:(BOOL)genericScaling;
+ (nonnull UIFont *)fontRegularTitleMedium;
///Bold 16pt
+ (nonnull UIFont *)fontBoldBodyLarge:(BOOL)genericScaling;
+ (nonnull UIFont *)fontBoldBodyLarge;
///Regular 16pt
+ (nonnull UIFont *)fontRegularBodyLarge:(BOOL)genericScaling;
+ (nonnull UIFont *)fontRegularBodyLarge;
///Bold 13pt
+ (nonnull UIFont *)fontBoldBodySmall:(BOOL)genericScaling;
+ (nonnull UIFont *)fontBoldBodySmall;
///Regular 13pt
+ (nonnull UIFont *)fontRegularBodySmall:(BOOL)genericScaling;
+ (nonnull UIFont *)fontRegularBodySmall;
///Bold 11pt
+ (nonnull UIFont *)fontBoldMicro:(BOOL)genericScaling;
+ (nonnull UIFont *)fontBoldMicro;
///Regular 11pt
+ (nonnull UIFont *)fontRegularMicro:(BOOL)genericScaling;
+ (nonnull UIFont *)fontRegularMicro;
#pragma mark - 2.0 fonts #pragma mark - 2.0 fonts
//75Bd 40pt //75Bd 40pt
@ -206,9 +248,50 @@ B3 -> Legal
//------------------------------------------------- //-------------------------------------------------
// Applies the styles to the passed in objects. // Applies the styles to the passed in objects.
#pragma mark - 3.0 Styles
+ (void)styleLabelTitle2XLarge:(nonnull UILabel *)label genericScaling:(BOOL)genericScaling;
+ (void)styleLabelTitle2XLarge:(nonnull UILabel *)label;
+ (void)styleLabelTitleXLarge:(nonnull UILabel *)label genericScaling:(BOOL)genericScaling;
+ (void)styleLabelTitleXLarge:(nonnull UILabel *)label;
+ (void)styleLabelBoldTitleLarge:(nonnull UILabel *)label genericScaling:(BOOL)genericScaling;
+ (void)styleLabelBoldTitleLarge:(nonnull UILabel *)label;
+ (void)styleLabelRegularTitleLarge:(nonnull UILabel *)label genericScaling:(BOOL)genericScaling;
+ (void)styleLabelRegularTitleLarge:(nonnull UILabel *)label;
+ (void)styleLabelBoldTitleMedium:(nonnull UILabel *)label genericScaling:(BOOL)genericScaling;
+ (void)styleLabelBoldTitleMedium:(nonnull UILabel *)label;
+ (void)styleLabelRegularTitleMedium:(nonnull UILabel *)label genericScaling:(BOOL)genericScaling;
+ (void)styleLabelRegularTitleMedium:(nonnull UILabel *)label;
+ (void)styleLabelBoldBodyLarge:(nonnull UILabel *)label genericScaling:(BOOL)genericScaling;
+ (void)styleLabelBoldBodyLarge:(nonnull UILabel *)label;
+ (void)styleLabelRegularBodyLarge:(nonnull UILabel *)label genericScaling:(BOOL)genericScaling;
+ (void)styleLabelRegularBodyLarge:(nonnull UILabel *)label;
+ (void)styleLabelBoldBodySmall:(nonnull UILabel *)label genericScaling:(BOOL)genericScaling;
+ (void)styleLabelBoldBodySmall:(nonnull UILabel *)label;
+ (void)styleLabelRegularBodySmall:(nonnull UILabel *)label genericScaling:(BOOL)genericScaling;
+ (void)styleLabelRegularBodySmall:(nonnull UILabel *)label;
+ (void)styleLabelBoldMicro:(nonnull UILabel *)label genericScaling:(BOOL)genericScaling;
+ (void)styleLabelBoldMicro:(nonnull UILabel *)label;
+ (void)styleLabelRegularMicro:(nonnull UILabel *)label genericScaling:(BOOL)genericScaling;
+ (void)styleLabelRegularMicro:(nonnull UILabel *)label;
/// Will style the label with mva 3.0 fonts based on the string.
+ (BOOL)styleMVA3Label:(nonnull UILabel *)label withStyle:(nullable NSString *)style genericScaling:(BOOL)genericScaling;
#pragma mark - 2.0 styles #pragma mark - 2.0 styles
/// Will style the label based on the string. Accepted values, H1, H2, H3, H32, B1, B2, B3, B20 /// Will style the label based on the string. Accepted values, including mva3.0 fonts and 2.0 fonts H1, H2, H3, H32, B1, B2, B3, B20
+ (void)styleLabel:(nonnull UILabel *)label withStyle:(nullable NSString *)style; + (void)styleLabel:(nonnull UILabel *)label withStyle:(nullable NSString *)style;
+ (void)styleLabel:(nonnull UILabel *)label withStyle:(nullable NSString *)style genericScaling:(BOOL)genericScaling; + (void)styleLabel:(nonnull UILabel *)label withStyle:(nullable NSString *)style genericScaling:(BOOL)genericScaling;
@ -257,6 +340,43 @@ B3 -> Legal
#pragma mark - Attributed Strings #pragma mark - Attributed Strings
+ (nonnull NSAttributedString *)styleGetTitle2XLargeAttributedString:(nullable NSString *)string;
+ (nonnull NSAttributedString *)styleGetTitle2XLargeAttributedString:(nullable NSString *)string genericScaling:(BOOL)genericScaling;
+ (nonnull NSAttributedString *)styleGetTitleXLargeAttributedString:(nullable NSString *)string;
+ (nonnull NSAttributedString *)styleGetTitleXLargeAttributedString:(nullable NSString *)string genericScaling:(BOOL)genericScaling;
+ (nonnull NSAttributedString *)styleGetBoldTitleLargeAttributedString:(nullable NSString *)string;
+ (nonnull NSAttributedString *)styleGetBoldTitleLargeAttributedString:(nullable NSString *)string genericScaling:(BOOL)genericScaling;
+ (nonnull NSAttributedString *)styleGetRegularTitleLargeAttributedString:(nullable NSString *)string;
+ (nonnull NSAttributedString *)styleGetRegularTitleLargeAttributedString:(nullable NSString *)string genericScaling:(BOOL)genericScaling;
+ (nonnull NSAttributedString *)styleGetBoldTitleMediumAttributedString:(nullable NSString *)string;
+ (nonnull NSAttributedString *)styleGetBoldTitleMediumAttributedString:(nullable NSString *)string genericScaling:(BOOL)genericScaling;
+ (nonnull NSAttributedString *)styleGetRegularTitleMediumAttributedString:(nullable NSString *)string;
+ (nonnull NSAttributedString *)styleGetRegularTitleMediumAttributedString:(nullable NSString *)string genericScaling:(BOOL)genericScaling;
+ (nonnull NSAttributedString *)styleGetBoldBodyLargeAttributedString:(nullable NSString *)string;
+ (nonnull NSAttributedString *)styleGetBoldBodyLargeAttributedString:(nullable NSString *)string genericScaling:(BOOL)genericScaling;
+ (nonnull NSAttributedString *)styleGetRegularBodyLargeAttributedString:(nullable NSString *)string;
+ (nonnull NSAttributedString *)styleGetRegularBodyLargeAttributedString:(nullable NSString *)string genericScaling:(BOOL)genericScaling;
+ (nonnull NSAttributedString *)styleGetBoldBodySmallAttributedString:(nullable NSString *)string;
+ (nonnull NSAttributedString *)styleGetBoldBodySmallAttributedString:(nullable NSString *)string genericScaling:(BOOL)genericScaling;
+ (nonnull NSAttributedString *)styleGetRegularBodySmallAttributedString:(nullable NSString *)string;
+ (nonnull NSAttributedString *)styleGetRegularBodySmallAttributedString:(nullable NSString *)string genericScaling:(BOOL)genericScaling;
+ (nonnull NSAttributedString *)styleGetBoldMicroAttributedString:(nullable NSString *)string;
+ (nonnull NSAttributedString *)styleGetBoldMicroAttributedString:(nullable NSString *)string genericScaling:(BOOL)genericScaling;
+ (nonnull NSAttributedString *)styleGetRegularMicroAttributedString:(nullable NSString *)string;
+ (nonnull NSAttributedString *)styleGetRegularMicroAttributedString:(nullable NSString *)string genericScaling:(BOOL)genericScaling;
/// Will style the string based on the string. Accepted values, H1, H2, H3, H32, B1, B2, B3, B20 /// Will style the string based on the string. Accepted values, H1, H2, H3, H32, B1, B2, B3, B20
+ (nonnull NSAttributedString *)styleGetAttributedString:(nullable NSString *)string withStyle:(nullable NSString *)style; + (nonnull NSAttributedString *)styleGetAttributedString:(nullable NSString *)string withStyle:(nullable NSString *)style;
+ (nonnull NSAttributedString *)styleGetAttributedString:(nullable NSString *)string withStyle:(nullable NSString *)style genericScaling:(BOOL)genericScaling; + (nonnull NSAttributedString *)styleGetAttributedString:(nullable NSString *)string withStyle:(nullable NSString *)style genericScaling:(BOOL)genericScaling;

View File

@ -111,6 +111,168 @@ CGFloat const LabelWithInternalButtonLineSpace = 2;
}]; }];
} }
#pragma mark - 3.0 fonts
+ (nonnull UIFont *)getMVA3FontSize:(CGFloat)size bold:(BOOL)isBold {
if (isBold) {
if (size >= 15) {
return [MFFonts mfFontDSBold:size];
} else {
return [MFFonts mfFontTXBold:size];
}
} else {
if (size >= 15) {
return [MFFonts mfFontDSRegular:size];
} else {
return [MFFonts mfFontTXRegular:size];
}
}
}
+ (nonnull UIFont *)fontTitle2XLarge:(BOOL)genericScaling {
CGFloat size = 36;
if (genericScaling) {
size = [self sizeFontGenericForCurrentDevice:size];
}
return [self getMVA3FontSize:size bold:YES];
}
+ (nonnull UIFont *)fontTitle2XLarge {
return [self fontTitle2XLarge:YES];
}
+ (nonnull UIFont *)fontTitleXLarge:(BOOL)genericScaling {
CGFloat size = 32;
if (genericScaling) {
size = [self sizeFontGenericForCurrentDevice:size];
}
return [self getMVA3FontSize:size bold:YES];
}
+ (nonnull UIFont *)fontTitleXLarge{
return [self fontTitleXLarge:YES];
}
+ (nonnull UIFont *)fontBoldTitleLarge:(BOOL)genericScaling {
CGFloat size = 24;
if (genericScaling) {
size = [self sizeFontGenericForCurrentDevice:size];
}
return [self getMVA3FontSize:size bold:YES];
}
+ (nonnull UIFont *)fontBoldTitleLarge {
return [self fontBoldTitleLarge:YES];
}
+ (nonnull UIFont *)fontRegularTitleLarge:(BOOL)genericScaling {
CGFloat size = 24;
if (genericScaling) {
size = [self sizeFontGenericForCurrentDevice:size];
}
return [self getMVA3FontSize:size bold:NO];
}
+ (nonnull UIFont *)fontRegularTitleLarge {
return [self fontRegularTitleLarge:YES];
}
+ (nonnull UIFont *)fontBoldTitleMedium:(BOOL)genericScaling {
CGFloat size = 20;
if (genericScaling) {
size = [self sizeFontGenericForCurrentDevice:size];
}
return [self getMVA3FontSize:size bold:YES];
}
+ (nonnull UIFont *)fontBoldTitleMedium {
return [self fontBoldTitleMedium:YES];
}
+ (nonnull UIFont *)fontRegularTitleMedium:(BOOL)genericScaling {
CGFloat size = 20;
if (genericScaling) {
size = [self sizeFontGenericForCurrentDevice:size];
}
return [self getMVA3FontSize:size bold:NO];
}
+ (nonnull UIFont *)fontRegularTitleMedium {
return [self fontRegularTitleMedium:YES];
}
+ (nonnull UIFont *)fontBoldBodyLarge:(BOOL)genericScaling {
CGFloat size = 16;
if (genericScaling) {
size = [self sizeFontGenericForCurrentDevice:size];
}
return [self getMVA3FontSize:size bold:YES];
}
+ (nonnull UIFont *)fontBoldBodyLarge {
return [self fontBoldBodyLarge:YES];
}
+ (nonnull UIFont *)fontRegularBodyLarge:(BOOL)genericScaling {
CGFloat size = 16;
if (genericScaling) {
size = [self sizeFontGenericForCurrentDevice:size];
}
return [self getMVA3FontSize:size bold:NO];
}
+ (nonnull UIFont *)fontRegularBodyLarge {
return [self fontRegularBodyLarge:YES];
}
+ (nonnull UIFont *)fontBoldBodySmall:(BOOL)genericScaling {
CGFloat size = 13;
if (genericScaling) {
size = [self sizeFontGenericForCurrentDevice:size];
}
return [self getMVA3FontSize:size bold:YES];
}
+ (nonnull UIFont *)fontBoldBodySmall {
return [self fontBoldBodySmall:YES];
}
+ (nonnull UIFont *)fontRegularBodySmall:(BOOL)genericScaling {
CGFloat size = 13;
if (genericScaling) {
size = [self sizeFontGenericForCurrentDevice:size];
}
return [self getMVA3FontSize:size bold:NO];
}
+ (nonnull UIFont *)fontRegularBodySmall {
return [self fontRegularBodySmall:YES];
}
+ (nonnull UIFont *)fontBoldMicro:(BOOL)genericScaling {
CGFloat size = 11;
if (genericScaling) {
size = [self sizeFontGenericForCurrentDevice:size];
}
return [self getMVA3FontSize:size bold:YES];
}
+ (nonnull UIFont *)fontBoldMicro {
return [self fontBoldMicro:YES];
}
+ (nonnull UIFont *)fontRegularMicro:(BOOL)genericScaling {
CGFloat size = 11;
if (genericScaling) {
size = [self sizeFontGenericForCurrentDevice:size];
}
return [self getMVA3FontSize:size bold:NO];
}
+ (nonnull UIFont *)fontRegularMicro {
return [self fontRegularMicro:YES];
}
#pragma mark - 2.0 fonts #pragma mark - 2.0 fonts
+ (nullable UIFont *)fontH1:(BOOL)genericScaling { + (nullable UIFont *)fontH1:(BOOL)genericScaling {
@ -514,10 +676,165 @@ CGFloat const LabelWithInternalButtonLineSpace = 2;
return [MFFonts mfFont55Rg:[self sizeFontGenericForCurrentDevice:size]]; return [MFFonts mfFont55Rg:[self sizeFontGenericForCurrentDevice:size]];
} }
#pragma mark - 3.0 Styles
+ (void)styleLabelTitle2XLarge:(nonnull UILabel *)label genericScaling:(BOOL)genericScaling {
label.font = [MFStyler fontTitle2XLarge:genericScaling];
label.textColor = [UIColor blackColor];
}
+ (void)styleLabelTitle2XLarge:(nonnull UILabel *)label {
[self styleLabelTitle2XLarge:label genericScaling:YES];
}
+ (void)styleLabelTitleXLarge:(nonnull UILabel *)label genericScaling:(BOOL)genericScaling {
label.font = [MFStyler fontTitleXLarge:genericScaling];
label.textColor = [UIColor blackColor];
}
+ (void)styleLabelTitleXLarge:(nonnull UILabel *)label {
[self styleLabelTitleXLarge:label genericScaling:YES];
}
+ (void)styleLabelBoldTitleLarge:(nonnull UILabel *)label genericScaling:(BOOL)genericScaling {
label.font = [MFStyler fontBoldTitleLarge:genericScaling];
label.textColor = [UIColor blackColor];
}
+ (void)styleLabelBoldTitleLarge:(nonnull UILabel *)label {
[self styleLabelBoldTitleLarge:label genericScaling:YES];
}
+ (void)styleLabelRegularTitleLarge:(nonnull UILabel *)label genericScaling:(BOOL)genericScaling {
label.font = [MFStyler fontRegularTitleLarge:genericScaling];
label.textColor = [UIColor blackColor];
}
+ (void)styleLabelRegularTitleLarge:(nonnull UILabel *)label {
[self styleLabelBoldTitleLarge:label genericScaling:YES];
}
+ (void)styleLabelBoldTitleMedium:(nonnull UILabel *)label genericScaling:(BOOL)genericScaling {
label.font = [MFStyler fontBoldTitleMedium:genericScaling];
label.textColor = [UIColor blackColor];
}
+ (void)styleLabelBoldTitleMedium:(nonnull UILabel *)label {
[self styleLabelBoldTitleMedium:label genericScaling:YES];
}
+ (void)styleLabelRegularTitleMedium:(nonnull UILabel *)label genericScaling:(BOOL)genericScaling {
label.font = [MFStyler fontRegularTitleMedium:genericScaling];
label.textColor = [UIColor blackColor];
}
+ (void)styleLabelRegularTitleMedium:(nonnull UILabel *)label {
[self styleLabelRegularTitleMedium:label genericScaling:YES];
}
+ (void)styleLabelBoldBodyLarge:(nonnull UILabel *)label genericScaling:(BOOL)genericScaling {
label.font = [MFStyler fontBoldBodyLarge:genericScaling];
label.textColor = [UIColor blackColor];
}
+ (void)styleLabelBoldBodyLarge:(nonnull UILabel *)label {
[self styleLabelBoldBodyLarge:label genericScaling:YES];
}
+ (void)styleLabelRegularBodyLarge:(nonnull UILabel *)label genericScaling:(BOOL)genericScaling {
label.font = [MFStyler fontRegularBodyLarge:genericScaling];
label.textColor = [UIColor blackColor];
}
+ (void)styleLabelRegularBodyLarge:(nonnull UILabel *)label {
[self styleLabelRegularBodyLarge:label genericScaling:YES];
}
+ (void)styleLabelBoldBodySmall:(nonnull UILabel *)label genericScaling:(BOOL)genericScaling {
label.font = [MFStyler fontBoldBodySmall:genericScaling];
label.textColor = [UIColor blackColor];
}
+ (void)styleLabelBoldBodySmall:(nonnull UILabel *)label {
[self styleLabelBoldBodySmall:label genericScaling:YES];
}
+ (void)styleLabelRegularBodySmall:(nonnull UILabel *)label genericScaling:(BOOL)genericScaling {
label.font = [MFStyler fontRegularBodySmall:genericScaling];
label.textColor = [UIColor blackColor];
}
+ (void)styleLabelRegularBodySmall:(nonnull UILabel *)label {
[self styleLabelRegularBodySmall:label genericScaling:YES];
}
+ (void)styleLabelBoldMicro:(nonnull UILabel *)label genericScaling:(BOOL)genericScaling {
label.font = [MFStyler fontBoldMicro:genericScaling];
label.textColor = [UIColor blackColor];
}
+ (void)styleLabelBoldMicro:(nonnull UILabel *)label {
[self styleLabelBoldMicro:label genericScaling:YES];
}
+ (void)styleLabelRegularMicro:(nonnull UILabel *)label genericScaling:(BOOL)genericScaling {
label.font = [MFStyler fontRegularMicro:genericScaling];
label.textColor = [UIColor blackColor];
}
+ (void)styleLabelRegularMicro:(nonnull UILabel *)label {
[self styleLabelRegularMicro:label genericScaling:YES];
}
+ (BOOL)styleMVA3Label:(nonnull UILabel *)label withStyle:(nullable NSString *)style genericScaling:(BOOL)genericScaling {
if ([style isEqualToString:@"Title2XLarge"]) {
[self styleLabelTitle2XLarge:label genericScaling:genericScaling];
return YES;
} else if ([style isEqualToString:@"TitleXLarge"]) {
[self styleLabelTitleXLarge:label genericScaling:genericScaling];
return YES;
} else if ([style isEqualToString:@"BoldTitleLarge"]) {
[self styleLabelBoldTitleLarge:label genericScaling:genericScaling];
return YES;
} else if ([style isEqualToString:@"RegularTitleLarge"]) {
[self styleLabelRegularTitleLarge:label genericScaling:genericScaling];
return YES;
} else if ([style isEqualToString:@"BoldTitleMedium"]) {
[self styleLabelBoldTitleMedium:label genericScaling:genericScaling];
return YES;
} else if ([style isEqualToString:@"RegularTitleMedium"]) {
[self styleLabelRegularTitleMedium:label genericScaling:genericScaling];
return YES;
} else if ([style isEqualToString:@"BoldBodyLarge"]) {
[self styleLabelBoldBodyLarge:label genericScaling:genericScaling];
return YES;
} else if ([style isEqualToString:@"RegularBodyLarge"]) {
[self styleLabelRegularBodyLarge:label genericScaling:genericScaling];
return YES;
} else if ([style isEqualToString:@"BoldBodySmall"]) {
[self styleLabelBoldBodySmall:label genericScaling:genericScaling];
return YES;
} else if ([style isEqualToString:@"RegularBodySmall"]) {
[self styleLabelRegularBodySmall:label genericScaling:genericScaling];
return YES;
} else if ([style isEqualToString:@"BoldMicro"]) {
[self styleLabelBoldMicro:label genericScaling:genericScaling];
return YES;
} else if ([style isEqualToString:@"RegularMicro"]) {
[self styleLabelRegularMicro:label genericScaling:genericScaling];
return YES;
} else {
return NO;
}
}
#pragma mark - 2.0 Styles #pragma mark - 2.0 Styles
+ (void)styleLabel:(nonnull UILabel *)label withStyle:(nullable NSString *)style genericScaling:(BOOL)genericScaling { + (void)styleLabel:(nonnull UILabel *)label withStyle:(nullable NSString *)style genericScaling:(BOOL)genericScaling {
if ([style isEqualToString:@"H1"]) { if ([self styleMVA3Label:label withStyle:style genericScaling:genericScaling]) {
//try mva 3.0 font first
} else if ([style isEqualToString:@"H1"]) {
[self styleLabelH1:label genericScaling:genericScaling]; [self styleLabelH1:label genericScaling:genericScaling];
} else if ([style isEqualToString:@"H2"]) { } else if ([style isEqualToString:@"H2"]) {
[self styleLabelH2:label genericScaling:genericScaling]; [self styleLabelH2:label genericScaling:genericScaling];
@ -697,6 +1014,105 @@ CGFloat const LabelWithInternalButtonLineSpace = 2;
return attributedString; return attributedString;
} }
+ (nonnull NSAttributedString *)styleGetTitle2XLargeAttributedString:(nullable NSString *)string {
return [MFStyler styleGetTitle2XLargeAttributedString:string genericScaling:YES];
}
+ (nonnull NSAttributedString *)styleGetTitle2XLargeAttributedString:(nullable NSString *)string genericScaling:(BOOL)genericScaling {
return [MFStyler styleGetAttributedString:string font:[MFStyler fontTitle2XLarge:genericScaling] color:[UIColor blackColor]];
}
+ (nonnull NSAttributedString *)styleGetTitleXLargeAttributedString:(nullable NSString *)string {
return [MFStyler styleGetTitleXLargeAttributedString:string genericScaling:YES];
}
+ (nonnull NSAttributedString *)styleGetTitleXLargeAttributedString:(nullable NSString *)string genericScaling:(BOOL)genericScaling {
return [MFStyler styleGetAttributedString:string font:[MFStyler fontTitleXLarge:genericScaling] color:[UIColor blackColor]];
}
+ (nonnull NSAttributedString *)styleGetBoldTitleLargeAttributedString:(nullable NSString *)string {
return [MFStyler styleGetBoldTitleLargeAttributedString:string genericScaling:YES];
}
+ (nonnull NSAttributedString *)styleGetBoldTitleLargeAttributedString:(nullable NSString *)string genericScaling:(BOOL)genericScaling {
return [MFStyler styleGetAttributedString:string font:[MFStyler fontBoldTitleLarge:genericScaling] color:[UIColor blackColor]];
}
+ (nonnull NSAttributedString *)styleGetRegularTitleLargeAttributedString:(nullable NSString *)string {
return [MFStyler styleGetRegularTitleLargeAttributedString:string genericScaling:YES];
}
+ (nonnull NSAttributedString *)styleGetRegularTitleLargeAttributedString:(nullable NSString *)string genericScaling:(BOOL)genericScaling {
return [MFStyler styleGetAttributedString:string font:[MFStyler fontRegularTitleLarge:genericScaling] color:[UIColor blackColor]];
}
+ (nonnull NSAttributedString *)styleGetBoldTitleMediumAttributedString:(nullable NSString *)string {
return [MFStyler styleGetBoldTitleMediumAttributedString:string genericScaling:YES];
}
+ (nonnull NSAttributedString *)styleGetBoldTitleMediumAttributedString:(nullable NSString *)string genericScaling:(BOOL)genericScaling {
return [MFStyler styleGetAttributedString:string font:[MFStyler fontBoldTitleMedium:genericScaling] color:[UIColor blackColor]];
}
+ (nonnull NSAttributedString *)styleGetRegularTitleMediumAttributedString:(nullable NSString *)string {
return [MFStyler styleGetRegularTitleMediumAttributedString:string genericScaling:YES];
}
+ (nonnull NSAttributedString *)styleGetRegularTitleMediumAttributedString:(nullable NSString *)string genericScaling:(BOOL)genericScaling {
return [MFStyler styleGetAttributedString:string font:[MFStyler fontRegularTitleMedium:genericScaling] color:[UIColor blackColor]];
}
+ (nonnull NSAttributedString *)styleGetBoldBodyLargeAttributedString:(nullable NSString *)string {
return [MFStyler styleGetBoldBodyLargeAttributedString:string genericScaling:YES];
}
+ (nonnull NSAttributedString *)styleGetBoldBodyLargeAttributedString:(nullable NSString *)string genericScaling:(BOOL)genericScaling {
return [MFStyler styleGetAttributedString:string font:[MFStyler fontBoldBodyLarge:genericScaling] color:[UIColor blackColor]];
}
+ (nonnull NSAttributedString *)styleGetRegularBodyLargeAttributedString:(nullable NSString *)string {
return [MFStyler styleGetRegularBodyLargeAttributedString:string genericScaling:YES];
}
+ (nonnull NSAttributedString *)styleGetRegularBodyLargeAttributedString:(nullable NSString *)string genericScaling:(BOOL)genericScaling {
return [MFStyler styleGetAttributedString:string font:[MFStyler fontRegularBodyLarge:genericScaling] color:[UIColor blackColor]];
}
+ (nonnull NSAttributedString *)styleGetBoldBodySmallAttributedString:(nullable NSString *)string {
return [MFStyler styleGetBoldBodySmallAttributedString:string genericScaling:YES];
}
+ (nonnull NSAttributedString *)styleGetBoldBodySmallAttributedString:(nullable NSString *)string genericScaling:(BOOL)genericScaling {
return [MFStyler styleGetAttributedString:string font:[MFStyler fontBoldBodySmall:genericScaling] color:[UIColor blackColor]];
}
+ (nonnull NSAttributedString *)styleGetRegularBodySmallAttributedString:(nullable NSString *)string {
return [MFStyler styleGetRegularBodySmallAttributedString:string genericScaling:YES];
}
+ (nonnull NSAttributedString *)styleGetRegularBodySmallAttributedString:(nullable NSString *)string genericScaling:(BOOL)genericScaling {
return [MFStyler styleGetAttributedString:string font:[MFStyler fontRegularBodySmall:genericScaling] color:[UIColor blackColor]];
}
+ (nonnull NSAttributedString *)styleGetBoldMicroAttributedString:(nullable NSString *)string {
return [MFStyler styleGetBoldMicroAttributedString:string genericScaling:YES];
}
+ (nonnull NSAttributedString *)styleGetBoldMicroAttributedString:(nullable NSString *)string genericScaling:(BOOL)genericScaling {
return [MFStyler styleGetAttributedString:string font:[MFStyler fontBoldMicro:genericScaling] color:[UIColor blackColor]];
}
+ (nonnull NSAttributedString *)styleGetRegularMicroAttributedString:(nullable NSString *)string {
return [MFStyler styleGetRegularBodySmallAttributedString:string genericScaling:YES];
}
+ (nonnull NSAttributedString *)styleGetRegularMicroAttributedString:(nullable NSString *)string genericScaling:(BOOL)genericScaling {
return [MFStyler styleGetAttributedString:string font:[MFStyler fontRegularMicro:genericScaling] color:[UIColor blackColor]];
}
//2.0 font get attributedString
+ (nonnull NSAttributedString *)styleGetH1AttributedString:(nullable NSString *)string { + (nonnull NSAttributedString *)styleGetH1AttributedString:(nullable NSString *)string {
return [MFStyler styleGetH1AttributedString:string genericScaling:YES]; return [MFStyler styleGetH1AttributedString:string genericScaling:YES];
} }

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More