FLEXShortcutsFactory+Defaults.m 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  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. // UIVIew
  17. self.append.ivars(ivars).properties(@[
  18. @"frame", @"bounds", @"center", @"transform",
  19. @"backgroundColor", @"alpha", @"opaque", @"hidden",
  20. @"clipsToBounds", @"userInteractionEnabled", @"layer",
  21. @"superview", @"subviews"
  22. ]).forClass(UIView.class);
  23. // UILabel
  24. self.append.ivars(ivars).properties(@[
  25. @"text", @"attributedText", @"font", @"frame",
  26. @"textColor", @"textAlignment", @"numberOfLines",
  27. @"lineBreakMode", @"enabled", @"backgroundColor",
  28. @"alpha", @"hidden", @"preferredMaxLayoutWidth",
  29. @"superview", @"subviews"
  30. ]).forClass(UILabel.class);
  31. // UIWindow
  32. self.append.ivars(ivars).properties(@[
  33. @"rootViewController", @"windowLevel", @"keyWindow",
  34. @"frame", @"bounds", @"center", @"transform",
  35. @"backgroundColor", @"alpha", @"opaque", @"hidden",
  36. @"clipsToBounds", @"userInteractionEnabled", @"layer",
  37. @"subviews"
  38. ]).forClass(UIWindow.class);
  39. if (@available(iOS 13, *)) {
  40. self.append.properties(@[@"windowScene"]).forClass(UIWindow.class);
  41. }
  42. ivars = @[@"_targetActions", @"_gestureRecognizers"];
  43. // UIControl
  44. self.append.ivars(ivars).properties(@[
  45. @"enabled", @"allTargets", @"frame",
  46. @"backgroundColor", @"hidden", @"clipsToBounds",
  47. @"userInteractionEnabled", @"superview", @"subviews"
  48. ]).forClass(UIControl.class);
  49. // UIButton
  50. self.append.ivars(ivars).properties(@[
  51. @"titleLabel", @"font", @"imageView", @"tintColor",
  52. @"currentTitle", @"currentImage", @"enabled", @"frame",
  53. @"superview", @"subviews"
  54. ]).forClass(UIButton.class);
  55. }
  56. @end
  57. #pragma mark - View Controllers
  58. @implementation FLEXShortcutsFactory (ViewControllers)
  59. + (void)load {
  60. // UIViewController
  61. self.append
  62. .properties(@[@"view", @"title", @"navigationItem"])
  63. .forClass(UIViewController.class);
  64. }
  65. @end
  66. #pragma mark - UIImage
  67. @implementation FLEXShortcutsFactory (UIImage)
  68. + (void)load {
  69. self.append.methods(@[
  70. @"CGImage", @"CIImage"
  71. ]).properties(@[
  72. @"scale", @"size", @"capInsets",
  73. @"alignmentRectInsets", @"duration", @"images"
  74. ]).forClass(UIImage.class);
  75. if (@available(iOS 13, *)) {
  76. self.append.properties(@[@"symbolImage"]);
  77. }
  78. }
  79. @end
  80. #pragma mark - NSBundle
  81. @implementation FLEXShortcutsFactory (NSBundle)
  82. + (void)load {
  83. self.append.properties(@[
  84. @"bundleIdentifier", @"principalClass",
  85. @"infoDictionary", @"bundlePath",
  86. @"executablePath", @"loaded"
  87. ]).forClass(NSBundle.class);
  88. }
  89. @end
  90. #pragma mark - Classes
  91. @implementation FLEXShortcutsFactory (Classes)
  92. + (void)load {
  93. self.append.methods(@[@"new", @"alloc"]).forClass(objc_getMetaClass("NSObject"));
  94. }
  95. @end
  96. #pragma mark - Activities
  97. @implementation FLEXShortcutsFactory (Activities)
  98. + (void)load {
  99. self.append.properties(@[
  100. @"item", @"placeholderItem", @"activityType"
  101. ]).forClass(UIActivityItemProvider.class);
  102. self.append.properties(@[
  103. @"activityItems", @"applicationActivities", @"excludedActivityTypes", @"completionHandler"
  104. ]).forClass(UIActivityViewController.class);
  105. }
  106. @end