This commit is contained in:
Suresh, Kamlesh 2020-02-14 15:56:36 -05:00
parent d706d15d7e
commit e431ea2de9
7 changed files with 183 additions and 4 deletions

View File

@ -50,6 +50,7 @@
0198F79F225679880066C936 /* FormValidationProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0198F79E225679870066C936 /* FormValidationProtocol.swift */; };
0198F7A62256A80B0066C936 /* MFRadioButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 0198F7A02256A80A0066C936 /* MFRadioButton.h */; settings = {ATTRIBUTES = (Public, ); }; };
0198F7A82256A80B0066C936 /* MFRadioButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 0198F7A22256A80A0066C936 /* MFRadioButton.m */; };
01B5E6B023F5F276005B5839 /* IsaacLandingTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01B5E6AF23F5F276005B5839 /* IsaacLandingTemplate.swift */; };
01C851D323CF9E740021F976 /* LabelToggleModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01C851D223CF9E740021F976 /* LabelToggleModel.swift */; };
01E569D3223FFFA500327251 /* ThreeLayerViewController.swift in Headers */ = {isa = PBXBuildFile; fileRef = D2A5146A2214905000345BFB /* ThreeLayerViewController.swift */; settings = {ATTRIBUTES = (Public, ); }; };
01EB3684236097C0006832FA /* MoleculeModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01EB3683236097C0006832FA /* MoleculeModelProtocol.swift */; };
@ -382,6 +383,7 @@
0198F79E225679870066C936 /* FormValidationProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormValidationProtocol.swift; sourceTree = "<group>"; };
0198F7A02256A80A0066C936 /* MFRadioButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MFRadioButton.h; sourceTree = "<group>"; };
0198F7A22256A80A0066C936 /* MFRadioButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MFRadioButton.m; sourceTree = "<group>"; };
01B5E6AF23F5F276005B5839 /* IsaacLandingTemplate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IsaacLandingTemplate.swift; sourceTree = "<group>"; };
01C851D223CF9E740021F976 /* LabelToggleModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelToggleModel.swift; sourceTree = "<group>"; };
01EB3683236097C0006832FA /* MoleculeModelProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoleculeModelProtocol.swift; sourceTree = "<group>"; };
01EB368823609801006832FA /* LabelModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LabelModel.swift; sourceTree = "<group>"; };
@ -1068,6 +1070,7 @@
D2E1FAE02268E81D00AEFD8C /* MoleculeListTemplate.swift */,
014AA72A23C5059B006F3E93 /* ThreeLayerPageTemplateModel.swift */,
D2D6CD4122E78FAB00D701B8 /* ThreeLayerTemplate.swift */,
01B5E6AF23F5F276005B5839 /* IsaacLandingTemplate.swift */,
);
path = Templates;
sourceTree = "<group>";
@ -1810,6 +1813,7 @@
D28A839123CD4FD400DFE4FC /* CornerLabelsModel.swift in Sources */,
012A88F123985E0100FE3DA1 /* Color.swift in Sources */,
012A889C23889E8400FE3DA1 /* TemplateModelProtocol.swift in Sources */,
01B5E6B023F5F276005B5839 /* IsaacLandingTemplate.swift in Sources */,
D29770FC21F7C77400B2F0D0 /* MVMCoreUITextFieldView.m in Sources */,
C003506123AA94CD00B6AC29 /* Button.swift in Sources */,
DBC4391B224421A0001AB423 /* CaretLink.swift in Sources */,

View File

@ -11,11 +11,33 @@ import Foundation
@objcMembers public class ImageViewModel: MoleculeModelProtocol {
public static var identifier: String = "image"
public var backgroundColor: Color?
public var moleculeName: String?
public var image: String
public var accessibilityText: String?
public var fallbackImage: String?
public var imageFormat: String?
public var width: CGFloat?
public var height: CGFloat?
public var contentMode: ContentMode?
public enum ContentMode : String, Codable {
case scaleToFill
case scaleAspectFit // contents scaled to fit with fixed aspect. remainder is transparent
case scaleAspectFill // contents scaled to fill with fixed aspect. some portion of content may be clipped.
case redraw // redraw on bounds change (calls -setNeedsDisplay)
case center // contents remain same size. positioned adjusted.
case top
case bottom
case left
case right
case topLeft
case topRight
case bottomLeft
case bottomRight
}
public init(image: String) {
self.image = image
moleculeName = Self.identifier
}
}

View File

@ -45,7 +45,11 @@ import Foundation
enum AttributeTypeKey: String, CodingKey {
case type
}
public init(text: String) {
self.text = text
}
required public init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
moleculeName = try typeContainer.decodeIfPresent(String.self, forKey: .moleculeName)

View File

@ -232,6 +232,54 @@ import UIKit
imageView.animatedImage = nil
loadImage(withName: imageModel.image, format: imageModel.imageFormat, width: width as NSNumber?, height: height as NSNumber?, customFallbackImage: imageModel.fallbackImage)
}
setContentMode(imageModel)
}
func setContentMode(_ model: ImageViewModel?) {
switch model?.contentMode {
case .scaleToFill:
imageView.contentMode = .scaleToFill
break
case .scaleAspectFit:
imageView.contentMode = .scaleAspectFit
break
case .scaleAspectFill:
imageView.contentMode = .scaleAspectFill
break
case .redraw:
imageView.contentMode = .redraw
break
case .center:
imageView.contentMode = .center
break
case .top:
imageView.contentMode = .top
break
case .bottom:
imageView.contentMode = .bottom
break
case .left:
imageView.contentMode = .left
break
case .right:
imageView.contentMode = .right
break
case .topLeft:
imageView.contentMode = .topLeft
break
case .topRight:
imageView.contentMode = .topRight
break
case .bottomLeft:
imageView.contentMode = .bottomLeft
break
case .bottomRight:
imageView.contentMode = .bottomRight
break
default:
break
}
}
// MARK: - MVMCoreUIMoleculeViewProtocol functions

View File

@ -18,5 +18,6 @@ import Foundation
public init(headline: LabelModel) {
self.headline = headline
moleculeName = Self.identifier
}
}

View File

@ -22,8 +22,8 @@
@"stack" : [[MVMCoreViewControllerProgrammaticMappingObject alloc] initWithClass:[MoleculeStackTemplate class]],
@"centerMoleculeStack" : [[MVMCoreViewControllerProgrammaticMappingObject alloc] initWithClass:[MoleculeStackCenteredTemplate class]],
@"list" : [[MVMCoreViewControllerProgrammaticMappingObject alloc] initWithClass:[MoleculeListTemplate class]],
@"threeLayer" :
[[MVMCoreViewControllerProgrammaticMappingObject alloc] initWithClass:[ThreeLayerTemplate class]]
@"threeLayer": [[MVMCoreViewControllerProgrammaticMappingObject alloc] initWithClass:[ThreeLayerTemplate class]],
@"isaacLanding": [[MVMCoreViewControllerProgrammaticMappingObject alloc] initWithClass:[IsaacLandingTemplate class]]
} mutableCopy];
});
return viewControllerMapping;

View File

@ -0,0 +1,100 @@
//
// IsaacLandingTemplate.swift
// MVMCoreUI
//
// Created by Suresh, Kamlesh on 2/13/20.
// Copyright © 2020 Verizon Wireless. All rights reserved.
//
import Foundation
open class IsaacLandingTemplate: MoleculeListTemplate {
func parseTemplateJSON() throws {
}
@objc public override func parsePageJSON() throws {
guard let pageJSON = self.loadObject?.pageJSON else { return }
var listItems: [MoleculeListItemModel] = []
(pageJSON.arrayForKey("items") as? [[AnyHashable: Any]])?.forEach { (itemJson) in
if let item = getListItem(itemJson) {
listItems.append(item)
}
}
let template = ListPageTemplateModel(pageType: pageJSON.stringForkey(KeyPageType),
screenHeading: pageJSON.stringForkey(KeyScreenHeading),
molecules: listItems)
self.templateModel = template
}
func getListItem(_ moleculeJson: [AnyHashable: Any]) -> MoleculeListItemModel? {
guard let type = moleculeJson.optionalStringForKey("type") else {
return nil
}
if type == "rewards" {
return getRewardListItem(moleculeJson)
}
let textcolor = moleculeJson.optionalStringForKey("textColor")
var stackItems: [MoleculeStackItemModel] = []
let titleLabel = LabelModel(text: moleculeJson.stringForkey(KeyTitle))
titleLabel.fontName = "NHaasGroteskDSStd-75Bd"
titleLabel.textColor = textcolor
titleLabel.fontSize = (type == "topHeader") ? 70.0 : 25.0
let messageLabel = LabelModel(text: moleculeJson.stringForkey("message"))
messageLabel.fontStyle = "B2"
messageLabel.textColor = textcolor
let headlineBodyModel = HeadlineBodyModel(headline: titleLabel)
headlineBodyModel.body = messageLabel
if let linkMap = moleculeJson.optionalDictionaryForKey("link") {
do {
let linkDict: [String : Any] = ["title": linkMap.stringForkey(KeyTitle),
"action": linkMap]
let data = try JSONSerialization.data(withJSONObject: linkDict)
let decoder = JSONDecoder()
let linkModel = try decoder.decode(LinkModel.self, from: data)
linkModel.textColor = Color(uiColor: UIColor.mfGet(forHex: textcolor ?? "#FFFFFF"))
let headlineBodyLinkModel = HeadlineBodyLinkModel(headlineBody: headlineBodyModel,
link: linkModel)
stackItems.append(MoleculeStackItemModel(with: headlineBodyLinkModel))
} catch {
}
} else {
stackItems.append(MoleculeStackItemModel(with: headlineBodyModel))
}
if let imageurl = moleculeJson.optionalStringForKey("imageUrl") {
let imageModel = ImageViewModel(image: imageurl)
imageModel.height = moleculeJson.optionalCGFloatForKey("imageHeight") ?? 300
imageModel.imageFormat = "jpeg"
imageModel.contentMode = .scaleAspectFit
stackItems.append(MoleculeStackItemModel(with: imageModel))
}
let stack = MoleculeStackModel(molecules: stackItems)
let listItem = MoleculeListItemModel(with: stack)
let backgroudColorString = moleculeJson.optionalStringForKey("backgroundColor") ?? "#000000"
listItem.backgroundColor = Color(uiColor: UIColor.mfGet(forHex: backgroudColorString))
listItem.line = LineModel(type: .none)
return listItem
}
func getRewardListItem(_ moleculeJson: [AnyHashable: Any]) -> MoleculeListItemModel? {
return nil
}
}