// // SBRScriptPolicy.m // App // // Created by James Magahern on 10/15/21. // #import "SBRScriptPolicy.h" // For icon drawing #import @implementation SBRScriptPolicy + (NSString *)titleForPolicyType:(SBRScriptOriginPolicyType)policyType { switch (policyType) { case SBRScriptOriginPolicyTypeAlpha: return @"Alpha"; case SBRScriptOriginPolicyTypeBravo: return @"Bravo"; case SBRScriptOriginPolicyTypeCharlie: return @"Charlie"; case SBRScriptOriginPolicyTypeDelta: return @"Delta"; case SBRScriptOriginPolicyTypeEcho: return @"Echo"; } } + (NSString *)localizedDescriptionForPolicyType:(SBRScriptOriginPolicyType)policyType { switch (policyType) { case SBRScriptOriginPolicyTypeAlpha: return @"All scripts blocked."; case SBRScriptOriginPolicyTypeBravo: return @"Scripts on page are allowed."; case SBRScriptOriginPolicyTypeCharlie: return @"Allow scripts from the same security origin."; case SBRScriptOriginPolicyTypeDelta: return @"Allow scripts from common and host CDNs."; case SBRScriptOriginPolicyTypeEcho: return @"All scripts are allowed."; } } + (UIImage *)iconRepresentationForPolicyType:(SBRScriptOriginPolicyType)policyType withSize:(CGSize)size { UIFont *font = [UIFont boldSystemFontOfSize:size.height - 2]; NSDictionary *attrs = @{ NSFontAttributeName : font, NSForegroundColorAttributeName : [UIColor whiteColor] }; const CGRect rect = (CGRect) { .origin = CGPointZero, .size = size }; UIGraphicsBeginImageContextWithOptions(size, NO, UIScreen.mainScreen.scale); UIBezierPath *backgroundPath = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:4.0]; [backgroundPath fill]; NSString *character = @""; switch (policyType) { case SBRScriptOriginPolicyTypeAlpha: character = @"𝝰"; break; case SBRScriptOriginPolicyTypeBravo: character = @"𝝱"; break; case SBRScriptOriginPolicyTypeCharlie: character = @"𝝲"; break; case SBRScriptOriginPolicyTypeDelta: character = @"𝝳"; break; case SBRScriptOriginPolicyTypeEcho: character = @"𝝴"; break; } const CGSize charSize = [character sizeWithAttributes:attrs]; const CGRect charRect = (CGRect) { .origin = (CGPoint) { .x = (size.width - charSize.width) / 2, .y = -(charSize.height - size.height) / 2, }, .size = charSize }; [character drawInRect:charRect withAttributes:attrs]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; } + (BOOL)supportsSecureCoding { return YES; } - (instancetype)initWithSecurityOrigin:(NSString *)origin policyType:(SBRScriptOriginPolicyType)policyType { if (self = [super init]) { _origin = [origin copy]; _policyType = policyType; } return self; } - (instancetype)initWithCoder:(NSCoder *)coder { NSString *origin = [coder decodeObjectForKey:@"origin"]; NSNumber *policyTypeNumber = [coder decodeObjectForKey:@"policyType"]; return [self initWithSecurityOrigin:origin policyType:[policyTypeNumber integerValue]]; } - (void)encodeWithCoder:(NSCoder *)coder { [coder encodeObject:_origin forKey:@"origin"]; [coder encodeObject:[NSNumber numberWithInteger:_policyType] forKey:@"policyType"]; } @end