Merge branch 'develop' into feature/molecule_radio_button
This commit is contained in:
commit
d89b3522ee
@ -604,8 +604,8 @@ public typealias CoreObjectActionLoadPresentDelegate = MVMCoreActionDelegateProt
|
||||
performAction = wButtonDelegate.button?(wSelf, shouldPerformActionWithMap: actionMap, additionalData: additionalData) ?? false
|
||||
}
|
||||
|
||||
if let wDelegate = weakDelegate as? CoreObjectActionLoadPresentDelegate, performAction {
|
||||
MVMCoreActionHandler.shared()?.handleAction(with: actionMap, additionalData: additionalData, delegate: wDelegate)
|
||||
if performAction {
|
||||
MVMCoreActionHandler.shared()?.handleAction(with: actionMap, additionalData: additionalData, delegate: weakDelegate as? CoreObjectActionLoadPresentDelegate)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -243,7 +243,7 @@ import UIKit
|
||||
// Gifs aren't supported by default and need special handling
|
||||
MVMCoreCache.shared()?.getGif(imageName, useWidth: width != nil, widthForS7: width?.intValue ?? 0, useHeight: height != nil, heightForS7: height?.intValue ?? 0, format: format, localFallbackImageName: fallbackImageName, completionHandler: finishedLoadingBlock)
|
||||
} else {
|
||||
MVMCoreCache.shared()?.getImage(imageName, useWidth: width != nil, widthForS7: width?.intValue ?? 0, useHeight: height != nil, heightForS7: height?.intValue ?? 0, localFallbackImageName: fallbackImageName, completionHandler: finishedLoadingBlock)
|
||||
MVMCoreCache.shared()?.getImage(imageName, useWidth: width != nil, widthForS7: width?.intValue ?? 0, useHeight: height != nil, heightForS7: height?.intValue ?? 0, format: format, localFallbackImageName: fallbackImageName, completionHandler: finishedLoadingBlock)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@ -68,7 +68,7 @@ static const CGFloat CheckBoxHeightWidth = 18.0;
|
||||
NSString *checkedColorHex = [json string:@"checkedColor"];
|
||||
NSString *unCheckedColorHex = [json string:@"unCheckedColor"];
|
||||
|
||||
UIColor *checkedColor = checkedColorHex ? [UIColor mfGetColorForHex:checkedColorHex]: [UIColor blackColor];
|
||||
UIColor *checkedColor = checkedColorHex ? [UIColor mfGetColorForHex:checkedColorHex]: [UIColor clearColor];
|
||||
UIColor *unCheckedColor = unCheckedColorHex ? [UIColor mfGetColorForHex:unCheckedColorHex]: [UIColor clearColor];
|
||||
|
||||
[self setupWithCheckedColor:checkedColor
|
||||
@ -183,6 +183,7 @@ static const CGFloat CheckBoxHeightWidth = 18.0;
|
||||
- (instancetype)initWithCoder:(NSCoder *)coder {
|
||||
self = [super initWithCoder:coder];
|
||||
if (self) {
|
||||
[self setupView];
|
||||
[self setupWithCheckedColor:[UIColor whiteColor] unCheckColor:[UIColor whiteColor] text:nil];
|
||||
[self addAccessibleProperties];
|
||||
}
|
||||
@ -192,6 +193,7 @@ static const CGFloat CheckBoxHeightWidth = 18.0;
|
||||
- (instancetype)initWithFrame:(CGRect)frame {
|
||||
self = [super initWithFrame:frame];
|
||||
if (self) {
|
||||
[self setupView];
|
||||
[self setupWithCheckedColor:[UIColor whiteColor] unCheckColor:[UIColor whiteColor] text:nil];
|
||||
[self addAccessibleProperties];
|
||||
}
|
||||
@ -241,9 +243,7 @@ static const CGFloat CheckBoxHeightWidth = 18.0;
|
||||
[self.checkMark.widthAnchor constraintEqualToAnchor:self.checkedSquare.widthAnchor multiplier:.4].active = YES;
|
||||
[self.checkMark.heightAnchor constraintEqualToAnchor:self.checkedSquare.heightAnchor multiplier:.4].active = YES;
|
||||
[self.checkMark.centerXAnchor constraintEqualToAnchor:self.checkedSquare.centerXAnchor].active = YES;
|
||||
[self.checkMark.centerYAnchor constraintEqualToAnchor:self.checkedSquare.centerYAnchor].active = YES;
|
||||
} else {
|
||||
[self.checkedSquare addSubview:self.checkMark];
|
||||
[self.checkMark.centerYAnchor constraintEqualToAnchor:self.checkedSquare.centerYAnchor].active = YES;
|
||||
}
|
||||
|
||||
//label
|
||||
|
||||
@ -25,6 +25,9 @@
|
||||
// true while panning
|
||||
@property (nonatomic) BOOL panning;
|
||||
|
||||
//set pannable percentage 0 to 1
|
||||
@property (nonatomic) CGFloat pannablePercentage;
|
||||
|
||||
// can be used to keep track of if we are ..
|
||||
@property (nonatomic) BOOL interactive;
|
||||
|
||||
|
||||
@ -8,8 +8,6 @@
|
||||
|
||||
#import "MFTabBarInteractor.h"
|
||||
|
||||
static CGFloat pannablePercentage = 0.15;
|
||||
|
||||
typedef NS_ENUM(NSUInteger, MFTabBarPanningDirection) {
|
||||
MFTabBarPanningDirectionLeft,
|
||||
MFTabBarPanningDirectionRight
|
||||
@ -33,6 +31,7 @@ typedef NS_ENUM(NSUInteger, MFTabBarPanningDirection) {
|
||||
|
||||
- (nullable instancetype)initWithViewController:(nullable UIViewController *)viewController delegate:(nullable id<MFSwipeNavigationProtocol>)delegate {
|
||||
if (self = [super init]) {
|
||||
self.pannablePercentage = 0.15;
|
||||
self.panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)];
|
||||
[viewController.view addGestureRecognizer:self.panGesture];
|
||||
self.delegate = delegate;
|
||||
@ -48,8 +47,8 @@ typedef NS_ENUM(NSUInteger, MFTabBarPanningDirection) {
|
||||
|
||||
// Simulates an edge gesture by only accepting pans at the edge of the screen. Needed because edge gesture doesn't work nicely with extended menus such as on ipad.
|
||||
CGRect frame = pan.view.frame;
|
||||
CGRect pannableFrameLeft = CGRectMake(frame.origin.x, frame.origin.y, frame.size.width*pannablePercentage, frame.size.height);
|
||||
CGRect pannableFrameRight = CGRectMake(frame.origin.x + frame.size.width*(1-pannablePercentage), frame.origin.y, frame.size.width*pannablePercentage, frame.size.height);
|
||||
CGRect pannableFrameLeft = CGRectMake(frame.origin.x, frame.origin.y, frame.size.width*self.pannablePercentage, frame.size.height);
|
||||
CGRect pannableFrameRight = CGRectMake(frame.origin.x + frame.size.width*(1-self.pannablePercentage), frame.origin.y, frame.size.width*self.pannablePercentage, frame.size.height);
|
||||
|
||||
switch (pan.state) {
|
||||
case UIGestureRecognizerStateBegan:
|
||||
|
||||
@ -193,13 +193,7 @@ static NSString * const COLLECTION_CELL_ID = @"cell";
|
||||
[label layoutIfNeeded];
|
||||
label.baselineAdjustment = UIBaselineAdjustmentAlignCenters;
|
||||
|
||||
//set up cell acceessibility label
|
||||
cell.isAccessibilityElement = NO;
|
||||
cell.contentView.isAccessibilityElement = YES;
|
||||
|
||||
NSString *accLabel = [title stringByAppendingString:[MVMCoreUIUtility hardcodedStringWithKey:@"AccTab"]];
|
||||
cell.contentView.accessibilityLabel = accLabel;
|
||||
[cell.contentView setAccessibilityHint:[MVMCoreUIUtility hardcodedStringWithKey:@"AccTabHint"]];
|
||||
[self setCellAccessibility:cell title:label.text isSelected:NO indexPath:indexPath];
|
||||
|
||||
if (indexPath.row == self.selectedIndex) {
|
||||
label.textColor = [UIColor mfTomatoRed];
|
||||
@ -404,20 +398,27 @@ static NSString * const COLLECTION_CELL_ID = @"cell";
|
||||
[cell layoutIfNeeded];
|
||||
}
|
||||
|
||||
//setup selected tab accessibility
|
||||
NSString *string = label.text;
|
||||
NSString *accLabel = [string stringByAppendingString:[MVMCoreUIUtility hardcodedStringWithKey:@"toptabbar_tab_selected"]];
|
||||
cell.contentView.accessibilityLabel = accLabel;
|
||||
[cell.contentView setAccessibilityHint:nil];
|
||||
|
||||
self.selectedIndex = indexPath.row;
|
||||
if ([self.delegate respondsToSelector:@selector(topTabbar:titleForItemAtIndex:)]){
|
||||
[self.delegate topTabbar:self didSelectItemAtIndex:indexPath.row];
|
||||
}
|
||||
|
||||
[self setCellAccessibility:cell title:label.text isSelected:YES indexPath:indexPath];
|
||||
}
|
||||
|
||||
- (void)reloadData {
|
||||
[self.collectionView reloadData];
|
||||
}
|
||||
|
||||
- (void)setCellAccessibility:(UICollectionViewCell *)cell title:(NSString *)title isSelected:(BOOL)isSelected indexPath:(NSIndexPath *)indexPath {
|
||||
cell.isAccessibilityElement = NO;
|
||||
cell.contentView.isAccessibilityElement = YES;
|
||||
NSString *accKey = isSelected ? @"toptabbar_tab_selected" : @"AccTab";
|
||||
NSString *accLabel = [title stringByAppendingString:[MVMCoreUIUtility hardcodedStringWithKey:accKey]];
|
||||
NSString *accString = [accLabel stringByAppendingString:[NSString stringWithFormat:[MVMCoreUIUtility hardcodedStringWithKey:@"AccTabIndex"], indexPath.row + 1, [self.datasource numberOfTopTabbarItems:self]]];
|
||||
cell.contentView.accessibilityLabel = accString;
|
||||
NSString *accHint = isSelected ? nil : [MVMCoreUIUtility hardcodedStringWithKey:@"AccTabHint"];
|
||||
[cell.contentView setAccessibilityHint:accHint];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@ -13,6 +13,7 @@
|
||||
#import "NSLayoutConstraint+MFConvenience.h"
|
||||
#import "MVMCoreUISplitViewController.h"
|
||||
@import MVMCore.MVMCoreDispatchUtility;
|
||||
#import <MVMCoreUI/MVMCoreUIUtility.h>
|
||||
|
||||
CGFloat const PaddingDefault = 24;
|
||||
CGFloat const PaddingDefaultHorizontalSpacing = 32;
|
||||
@ -947,7 +948,8 @@ CGFloat const LabelWithInternalButtonLineSpace = 2;
|
||||
if ([times containsObject:@"DD"]) {
|
||||
[timeString appendString:[NSString stringWithFormat:@"%02ld",days]];
|
||||
if (timeUnit == MFTimeFormatNormal) {
|
||||
NSString *dayUnit = (days <= 1) ? @" day": @" days";
|
||||
NSString *dayKey = (days <= 1) ? @"CountDownDay": @"CountDownDays";
|
||||
NSString *dayUnit = [MVMCoreUIUtility hardcodedStringWithKey:dayKey];
|
||||
[timeString appendString:dayUnit];
|
||||
} else if (timeUnit == MFTimeFormatColon && ![[times lastObject] isEqualToString:@"DD"]) {
|
||||
[timeString appendString:@" : "];
|
||||
@ -962,7 +964,8 @@ CGFloat const LabelWithInternalButtonLineSpace = 2;
|
||||
}
|
||||
[timeString appendString:[NSString stringWithFormat:@"%02d",hours]];
|
||||
if (timeUnit == MFTimeFormatNormal) {
|
||||
NSString *hourUnit = (hours <= 1) ? @" hour": @" hours";
|
||||
NSString *hourKey = (hours <= 1) ? @"CountDownHour": @"CountDownHours";
|
||||
NSString *hourUnit = [MVMCoreUIUtility hardcodedStringWithKey:hourKey];
|
||||
[timeString appendString:hourUnit];
|
||||
} else if (timeUnit == MFTimeFormatColon && ![[times lastObject] isEqualToString:@"HH"]) {
|
||||
[timeString appendString:@" : "];
|
||||
@ -981,7 +984,8 @@ CGFloat const LabelWithInternalButtonLineSpace = 2;
|
||||
}
|
||||
[timeString appendString:[NSString stringWithFormat:@"%02d",minutes]];
|
||||
if (timeUnit == MFTimeFormatNormal) {
|
||||
NSString *minuteUnit = (minutes <= 1) ? @" min": @" mins";
|
||||
NSString *minKey = (minutes <= 1) ? @"CountDownMin": @"CountDownMins";
|
||||
NSString *minuteUnit = [MVMCoreUIUtility hardcodedStringWithKey:minKey];
|
||||
[timeString appendString:minuteUnit];
|
||||
} else if (timeUnit == MFTimeFormatColon && ![[times lastObject] isEqualToString:@"MM"]) {
|
||||
[timeString appendString:@" : "];
|
||||
@ -1005,7 +1009,8 @@ CGFloat const LabelWithInternalButtonLineSpace = 2;
|
||||
}
|
||||
[timeString appendString:[NSString stringWithFormat:@"%02d",seconds]];
|
||||
if (timeUnit == MFTimeFormatNormal) {
|
||||
NSString *secondUnit = (seconds <= 1) ? @" sec": @" secs";
|
||||
NSString *secondKey = (seconds <= 1) ? @"CountDownSec": @"CountDownSecs";
|
||||
NSString *secondUnit = [MVMCoreUIUtility hardcodedStringWithKey:secondKey];
|
||||
[timeString appendString:secondUnit];
|
||||
}
|
||||
}
|
||||
|
||||
@ -11,6 +11,7 @@
|
||||
// Tab
|
||||
"AccTab" = ", tab";
|
||||
"AccTabHint" = "Double tap to select.";
|
||||
"AccTabIndex" = ", %ld of %ld";
|
||||
// top alert
|
||||
"toptabbar_tab_selected" = ", tab, Selected";
|
||||
"AccTopAlertClosed" = "Top alert notification is closed.";
|
||||
@ -39,3 +40,12 @@
|
||||
"AccOn" = "on";
|
||||
"AccOff" = "off";
|
||||
"AccToggleHint" = "double tap to toggle";
|
||||
//Styler
|
||||
"CountDownDay" = " day";
|
||||
"CountDownHour" = " hour";
|
||||
"CountDownMin" = " min";
|
||||
"CountDownSec" = " sec";
|
||||
"CountDownDays" = " days";
|
||||
"CountDownHours" = " hours";
|
||||
"CountDownMins" = " mins";
|
||||
"CountDownSecs" = " secs";
|
||||
|
||||
@ -10,6 +10,7 @@
|
||||
// Tab
|
||||
"AccTab" = ", pestaña";
|
||||
"AccTabHint" = "Toca dos veces para seleccionar.";
|
||||
"AccTabIndex" = ", %ld de %ld";
|
||||
// top alert
|
||||
"toptabbar_tab_selected" = ", pestaña, Seleccionado";
|
||||
"AccTopAlertClosed" = "La notificación de alerta máxima está desactivada.";
|
||||
@ -38,3 +39,12 @@
|
||||
"AccOn" = "encendido";
|
||||
"AccOff" = "apagado";
|
||||
"AccToggleHint" = "toca dos veces para alternar";
|
||||
//Styler
|
||||
"CountDownDay" = " día";
|
||||
"CountDownHour" = " hora";
|
||||
"CountDownMin" = " min";
|
||||
"CountDownSec" = " seg";
|
||||
"CountDownDays" = " días";
|
||||
"CountDownHours" = " horas";
|
||||
"CountDownMins" = " min";
|
||||
"CountDownSecs" = " seg";
|
||||
|
||||
@ -10,6 +10,7 @@
|
||||
// Tab
|
||||
"AccTab" = ", pestaña";
|
||||
"AccTabHint" = "Toca dos veces para seleccionar.";
|
||||
"AccTabIndex" = ", %ld de %ld";
|
||||
// top alert
|
||||
"toptabbar_tab_selected" = ", pestaña, Seleccionado";
|
||||
"AccTopAlertClosed" = "La notificación de alerta máxima está desactivada.";
|
||||
@ -38,3 +39,12 @@
|
||||
"AccOn" = "encendido";
|
||||
"AccOff" = "apagado";
|
||||
"AccToggleHint" = "toca dos veces para alternar";
|
||||
//Styler
|
||||
"CountDownDay" = " día";
|
||||
"CountDownHour" = " hora";
|
||||
"CountDownMin" = " min";
|
||||
"CountDownSec" = " seg";
|
||||
"CountDownDays" = " días";
|
||||
"CountDownHours" = " horas";
|
||||
"CountDownMins" = " min";
|
||||
"CountDownSecs" = " seg";
|
||||
|
||||
Loading…
Reference in New Issue
Block a user