FLEXShortcutsFactory+Defaults.m 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. //
  2. // FLEXShortcutsFactory+Defaults.m
  3. // FLEX
  4. //
  5. // Created by Tanner Bennett on 8/29/19.
  6. // Copyright © 2019 Flipboard. All rights reserved.
  7. //
  8. #import "FLEXShortcutsFactory+Defaults.h"
  9. #import "FLEXShortcut.h"
  10. #import <objc/runtime.h>
  11. #pragma mark - Views
  12. @implementation FLEXShortcutsFactory (Views)
  13. + (void)load {
  14. // Only available since iOS 3.2, but we never supported iOS 3, so who cares
  15. NSArray *ivars = @[@"_gestureRecognizers"];
  16. NSArray *methods = @[@"sizeToFit", @"setNeedsLayout", @"removeFromSuperview"];
  17. // UIView
  18. self.append.ivars(ivars).methods(methods).properties(@[
  19. @"frame", @"bounds", @"center", @"transform",
  20. @"backgroundColor", @"alpha", @"opaque", @"hidden",
  21. @"clipsToBounds", @"userInteractionEnabled", @"layer",
  22. @"superview", @"subviews"
  23. ]).forClass(UIView.class);
  24. // UILabel
  25. self.append.ivars(ivars).methods(methods).properties(@[
  26. @"text", @"attributedText", @"font", @"frame",
  27. @"textColor", @"textAlignment", @"numberOfLines",
  28. @"lineBreakMode", @"enabled", @"backgroundColor",
  29. @"alpha", @"hidden", @"preferredMaxLayoutWidth",
  30. @"superview", @"subviews"
  31. ]).forClass(UILabel.class);
  32. // UIWindow
  33. self.append.ivars(ivars).properties(@[
  34. @"rootViewController", @"windowLevel", @"keyWindow",
  35. @"frame", @"bounds", @"center", @"transform",
  36. @"backgroundColor", @"alpha", @"opaque", @"hidden",
  37. @"clipsToBounds", @"userInteractionEnabled", @"layer",
  38. @"subviews"
  39. ]).forClass(UIWindow.class);
  40. if (@available(iOS 13, *)) {
  41. self.append.properties(@[@"windowScene"]).forClass(UIWindow.class);
  42. }
  43. ivars = @[@"_targetActions", @"_gestureRecognizers"];
  44. // UIControl
  45. self.append.ivars(ivars).methods(methods).properties(@[
  46. @"enabled", @"allTargets", @"frame",
  47. @"backgroundColor", @"hidden", @"clipsToBounds",
  48. @"userInteractionEnabled", @"superview", @"subviews"
  49. ]).forClass(UIControl.class);
  50. // UIButton
  51. self.append.ivars(ivars).properties(@[
  52. @"titleLabel", @"font", @"imageView", @"tintColor",
  53. @"currentTitle", @"currentImage", @"enabled", @"frame",
  54. @"superview", @"subviews"
  55. ]).forClass(UIButton.class);
  56. }
  57. @end
  58. #pragma mark - View Controllers
  59. @implementation FLEXShortcutsFactory (ViewControllers)
  60. + (void)load {
  61. // UIViewController
  62. self.append
  63. .properties(@[
  64. @"viewIfLoaded", @"title", @"navigationItem", @"toolbarItems", @"tabBarItem",
  65. @"childViewControllers", @"navigationController", @"tabBarController", @"splitViewController",
  66. @"parentViewController", @"presentedViewController", @"presentingViewController",
  67. ]).methods(@[@"view"]).forClass(UIViewController.class);
  68. }
  69. @end
  70. #pragma mark - UIImage
  71. @implementation FLEXShortcutsFactory (UIImage)
  72. + (void)load {
  73. self.append.methods(@[
  74. @"CGImage", @"CIImage"
  75. ]).properties(@[
  76. @"scale", @"size", @"capInsets",
  77. @"alignmentRectInsets", @"duration", @"images"
  78. ]).forClass(UIImage.class);
  79. if (@available(iOS 13, *)) {
  80. self.append.properties(@[@"symbolImage"]);
  81. }
  82. }
  83. @end
  84. #pragma mark - NSBundle
  85. @implementation FLEXShortcutsFactory (NSBundle)
  86. + (void)load {
  87. self.append.properties(@[
  88. @"bundleIdentifier", @"principalClass",
  89. @"infoDictionary", @"bundlePath",
  90. @"executablePath", @"loaded"
  91. ]).forClass(NSBundle.class);
  92. }
  93. @end
  94. #pragma mark - Classes
  95. @implementation FLEXShortcutsFactory (Classes)
  96. + (void)load {
  97. self.append.methods(@[@"new", @"alloc"]).forClass(objc_getMetaClass("NSObject"));
  98. }
  99. @end
  100. #pragma mark - Activities
  101. @implementation FLEXShortcutsFactory (Activities)
  102. + (void)load {
  103. self.append.properties(@[
  104. @"item", @"placeholderItem", @"activityType"
  105. ]).forClass(UIActivityItemProvider.class);
  106. self.append.properties(@[
  107. @"activityItems", @"applicationActivities", @"excludedActivityTypes", @"completionHandler"
  108. ]).forClass(UIActivityViewController.class);
  109. }
  110. @end