diff --git a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/TextEntryField.swift b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/TextEntryField.swift index 76b70b80..1fa2140e 100644 --- a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/TextEntryField.swift +++ b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/TextEntryField.swift @@ -200,6 +200,7 @@ import UIKit open override func reset() { super.reset() + textField.isSecureTextEntry = false textField.font = Styler.Font.RegularBodyLarge.getFont() } @@ -365,6 +366,12 @@ import UIKit setupTextFieldToolbar() if isSelected { startEditing() } + + //Added to override text when view is reloaded. + if let text = model.text, !text.isEmpty { + regexTextFieldOutputIfAvailable() + } + } } diff --git a/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift b/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift index 511fb4dc..e8c8446f 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift @@ -624,9 +624,6 @@ public typealias ActionBlock = () -> () } else if !MVMCoreGetterUtility.fequal(a: Float(standardFontSize), b: 0.0), let sizeObject = sizeObject ?? MFStyler.sizeObjectGeneric(forCurrentDevice: standardFontSize) { font = font.updateSize(sizeObject.getValueBased(onSize: size)) } - - // Provide the label additional size information to help calculate its intrinsic content. - preferredMaxLayoutWidth = Styler.maxAvailableLayoutWidth(size: size) } @objc public func setFont(_ font: UIFont, scale: Bool) { @@ -688,7 +685,7 @@ public typealias ActionBlock = () -> () static func getTextAttachmentImage(name: String = "externalLink", dimension: CGFloat) -> NSTextAttachment { let imageAttachment = NSTextAttachment() - imageAttachment.image = MVMCoreUIUtility.imageNamed(name) + imageAttachment.image = MVMCoreCache.shared()?.getImageFromRegisteredBundles(name) imageAttachment.bounds = CGRect(x: 0, y: 0, width: dimension, height: dimension) return imageAttachment diff --git a/MVMCoreUI/Atomic/Atoms/Views/WebView.swift b/MVMCoreUI/Atomic/Atoms/Views/WebView.swift index 3de42935..e6708055 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/WebView.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/WebView.swift @@ -16,8 +16,8 @@ import WebKit var webviewModel: WebViewModel? { return model as? WebViewModel } - var webView: WKWebView? - var overLayer = MVMCoreUICommonViewsUtility.commonView() + open var webView: WKWebView? + open var overLayer = MVMCoreUICommonViewsUtility.commonView() public let loadingSpinner = MFLoadingSpinner(frame: .zero) var delegateObject: MVMCoreUIDelegateObject? var webViewHeight: NSLayoutConstraint? diff --git a/MVMCoreUI/Atomic/MoleculeObjectMapping.swift b/MVMCoreUI/Atomic/MoleculeObjectMapping.swift index 3dfed18d..f868169d 100644 --- a/MVMCoreUI/Atomic/MoleculeObjectMapping.swift +++ b/MVMCoreUI/Atomic/MoleculeObjectMapping.swift @@ -9,9 +9,6 @@ import Foundation @objcMembers public class MoleculeObjectMapping: NSObject { - - public var moleculeMapping: [String: MoleculeViewProtocol.Type] = [:] - /// Returns the mapping object stored in the singleton public static func shared() -> Self? { return MVMCoreActionUtility.initializerClassCheck(CoreUIObject.sharedInstance()?.moleculeMap, classToVerify: self) as? Self @@ -19,18 +16,17 @@ import Foundation /// Registers the model with the model registry and the view with the mapper. public func register(viewClass: V.Type, viewModelClass: M.Type) { - try? ModelRegistry.register(viewModelClass) - moleculeMapping.updateValue(viewClass, forKey: viewModelClass.identifier) + try? ModelRegistry.register(handler: viewClass, for: viewModelClass) } /// Returns the type of molecule view for the given model public func getMoleculeClass(_ model: MoleculeModelProtocol) -> MoleculeViewProtocol.Type? { - return moleculeMapping[model.moleculeName] + return ModelRegistry.getHandler(model) as? MoleculeViewProtocol.Type } /// Creates a molecule with the given model. public func createMolecule(_ model: MoleculeModelProtocol, delegateObject: MVMCoreUIDelegateObject? = nil, additionalData: [AnyHashable: Any]? = nil) -> MoleculeViewProtocol? { - guard let type = moleculeMapping[model.moleculeName] else { return nil } + guard let type = getMoleculeClass(model) else { return nil } return type.init(model: model, delegateObject, additionalData) } @@ -286,3 +282,4 @@ import Foundation } } } + diff --git a/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableIconWithRightCaretAllTextLinks.swift b/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableIconWithRightCaretAllTextLinks.swift index 93d1526f..fcd18f68 100644 --- a/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableIconWithRightCaretAllTextLinks.swift +++ b/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/LeftVariable/ListLeftVariableIconWithRightCaretAllTextLinks.swift @@ -12,7 +12,7 @@ //-------------------------------------------------- public let leftImage = LoadImageView(pinnedEdges: .all) - public let eyebrowHeadlineBodyLink = EyebrowHeadlineBodyLink() + public let eyebrowHeadlineBodyLink = EyebrowHeadlineBodyLink(spacing: 2.0) public let rightLabel = Label(fontStyle: .RegularBodySmall) public lazy var rightLabelStackItem: StackItem = { diff --git a/MVMCoreUI/Atomic/Molecules/VerticalCombinationViews/EyebrowHeadlineBodyLink.swift b/MVMCoreUI/Atomic/Molecules/VerticalCombinationViews/EyebrowHeadlineBodyLink.swift index ca76f0fb..a25426d7 100644 --- a/MVMCoreUI/Atomic/Molecules/VerticalCombinationViews/EyebrowHeadlineBodyLink.swift +++ b/MVMCoreUI/Atomic/Molecules/VerticalCombinationViews/EyebrowHeadlineBodyLink.swift @@ -22,6 +22,16 @@ get { return model as? EyebrowHeadlineBodyLinkModel } } + //-------------------------------------------------- + // MARK: - Initialization + //-------------------------------------------------- + + public convenience init(spacing: CGFloat) { + self.init(frame: .zero) + stack.stackModel?.spacing = spacing + stack.restack() + } + //-------------------------------------------------- // MARK: - MFViewProtocol //-------------------------------------------------- diff --git a/MVMCoreUI/Atomic/Organisms/Stack.swift b/MVMCoreUI/Atomic/Organisms/Stack.swift index 29646f2e..e2772f5d 100644 --- a/MVMCoreUI/Atomic/Organisms/Stack.swift +++ b/MVMCoreUI/Atomic/Organisms/Stack.swift @@ -199,7 +199,7 @@ open class Stack: Container where T: (StackModelProtocol & MoleculeModelProto } var name = "stack<" for case let item in model.molecules { - if let moleculeClass = MoleculeObjectMapping.shared()?.moleculeMapping[item.moleculeName], + if let moleculeClass = MoleculeObjectMapping.shared()?.getMoleculeClass(item), let nameForReuse = moleculeClass.nameForReuse(with: item, delegateObject) { name.append(nameForReuse + ",") } else { diff --git a/MVMCoreUI/Atomic/Protocols/MoleculeViewProtocol.swift b/MVMCoreUI/Atomic/Protocols/MoleculeViewProtocol.swift index a8600c79..da90798d 100644 --- a/MVMCoreUI/Atomic/Protocols/MoleculeViewProtocol.swift +++ b/MVMCoreUI/Atomic/Protocols/MoleculeViewProtocol.swift @@ -9,7 +9,7 @@ import UIKit import MVMCore.MVMCoreViewProtocol -public protocol MoleculeViewProtocol: UIView { +public protocol MoleculeViewProtocol: UIView, ModelHandlerProtocol { /// Initializes the view with the model init(model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) @@ -31,6 +31,7 @@ public protocol MoleculeViewProtocol: UIView { } extension MoleculeViewProtocol { + /// Calls set with model public init(model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { self.init(frame: .zero) diff --git a/MVMCoreUI/BaseControllers/ViewController.swift b/MVMCoreUI/BaseControllers/ViewController.swift index ecb4089a..a2d82952 100644 --- a/MVMCoreUI/BaseControllers/ViewController.swift +++ b/MVMCoreUI/BaseControllers/ViewController.swift @@ -461,7 +461,7 @@ import UIKit open func handleOpenPage(for requestParameters: MVMCoreRequestParameters, actionInformation: [AnyHashable: Any]?, additionalData: [AnyHashable: Any]?) { addFormParams(requestParameters) requestParameters.parentPageType = loadObject?.pageJSON?.optionalStringForKey("parentPageType") - MVMCoreActionHandler.defaultHandleOpenPage(for: requestParameters, additionalData: additionalData, delegateObject: delegateObject()) + MVMCoreActionHandler.defaultHandleOpenPage(for: requestParameters, actionInformation: actionInformation, additionalData: additionalData, delegateObject: delegateObject()) } open func logAction(withActionInformation actionInformation: [AnyHashable: Any]?, additionalData: [AnyHashable: Any]?) { diff --git a/MVMCoreUI/Utility/MVMCoreUIUtility.h b/MVMCoreUI/Utility/MVMCoreUIUtility.h index 74b19d0e..6852e936 100644 --- a/MVMCoreUI/Utility/MVMCoreUIUtility.h +++ b/MVMCoreUI/Utility/MVMCoreUIUtility.h @@ -16,7 +16,7 @@ NS_ASSUME_NONNULL_BEGIN #pragma mark - Getters -//Returns localized imageName +// Returns localized imageName + (nullable NSString *)localizedImageName:(nullable NSString *)imageName; // The bundle for this framework diff --git a/MVMCoreUI/Utility/MVMCoreUIUtility.m b/MVMCoreUI/Utility/MVMCoreUIUtility.m index fad2378c..dd059fed 100644 --- a/MVMCoreUI/Utility/MVMCoreUIUtility.m +++ b/MVMCoreUI/Utility/MVMCoreUIUtility.m @@ -23,24 +23,14 @@ return [NSBundle bundleWithIdentifier:@"com.vzw.MVMCoreUI"]; } -+ (BOOL)userPrefersSpanish { - // This should be enough for us to look at what the user prefers. - NSString *preference = [[[[NSLocale preferredLanguages] objectAtIndex:0] substringToIndex:2] lowercaseString]; - return [preference isEqualToString:@"es"] || [preference isEqualToString:@"es-mx"]; -} - + (nullable NSString *)hardcodedStringWithKey:(nonnull NSString *)key { - // If the app language is not english... force load from the english file anyway. - if ([MVMCoreUIUtility userPrefersSpanish]) { - return [[NSBundle bundleWithPath:[[MVMCoreUIUtility bundleForMVMCoreUI] pathForResource:@"es" ofType:@"lproj"]] localizedStringForKey:key value:@"" table:nil]; - } else { - return [[NSBundle bundleWithPath:[[MVMCoreUIUtility bundleForMVMCoreUI] pathForResource:@"en" ofType:@"lproj"]] localizedStringForKey:key value:@"" table:nil]; - } + // Redirect key with relevant module. + return [MVMCoreGetterUtility hardcodedStringWithKey:key bundle:[MVMCoreUIUtility bundleForMVMCoreUI]]; } + (nullable NSString *)localizedImageName:(nullable NSString *)imageName { if (imageName.length > 0) { - if ([MVMCoreUIUtility userPrefersSpanish]) { + if ([MVMCoreGetterUtility userPrefersSpanish]) { imageName = [NSString stringWithFormat:@"%@_es", imageName]; } else { imageName = [NSString stringWithFormat:@"%@_en", imageName];