mvcgen 0.1.14 → 0.1.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (191) hide show
  1. checksums.yaml +4 -4
  2. data/lib/mvcgen/filemanager.rb +1 -1
  3. data/lib/mvcgen/generator.rb +36 -33
  4. data/lib/mvcgen/version.rb +1 -1
  5. data/lib/templates/default/mvcspec.yml +1 -1
  6. data/lib/templates/default/podfile/Podfile +73 -0
  7. data/lib/templates/default/swift/AppDelegate.swift +181 -0
  8. data/lib/templates/default/swift/Assets.xcassets/AppIcon.appiconset/Contents.json +133 -0
  9. data/lib/templates/default/swift/Assets.xcassets/Back.imageset/Contents.json +21 -0
  10. data/lib/templates/default/swift/Assets.xcassets/Back.imageset/icons8-back-filled-100-2.png +0 -0
  11. data/lib/templates/default/swift/Assets.xcassets/Contents.json +6 -0
  12. data/lib/templates/default/swift/Assets.xcassets/Down.imageset/Contents.json +21 -0
  13. data/lib/templates/default/swift/Assets.xcassets/Down.imageset/icons8-expand-arrow-filled-100.png +0 -0
  14. data/lib/templates/default/swift/Assets.xcassets/Forward.imageset/Contents.json +21 -0
  15. data/lib/templates/default/swift/Assets.xcassets/Forward.imageset/icons8-forward-filled-100.png +0 -0
  16. data/lib/templates/default/swift/Assets.xcassets/Key.imageset/Contents.json +1 -0
  17. data/lib/templates/default/swift/Assets.xcassets/Key.imageset/universal_Key.pdf +0 -0
  18. data/lib/templates/default/swift/Assets.xcassets/Shopping-cart.imageset/Contents.json +1 -0
  19. data/lib/templates/default/swift/Assets.xcassets/Shopping-cart.imageset/universal_Shopping-cart.pdf +0 -0
  20. data/lib/templates/default/swift/Assets.xcassets/Tick.imageset/Contents.json +21 -0
  21. data/lib/templates/default/swift/Assets.xcassets/Tick.imageset/icons8-Checkmark-96 (1).png +0 -0
  22. data/lib/templates/default/swift/Assets.xcassets/Up.imageset/Contents.json +22 -0
  23. data/lib/templates/default/swift/Assets.xcassets/Up.imageset/icons8-collapse-arrow-100.png +0 -0
  24. data/lib/templates/default/swift/Assets.xcassets/Up.imageset/icons8-collapse-arrow-50.png +0 -0
  25. data/lib/templates/default/swift/Assets.xcassets/Uruguay.imageset/Contents.json +21 -0
  26. data/lib/templates/default/swift/Assets.xcassets/Uruguay.imageset/icons8-uruguay-40.png +0 -0
  27. data/lib/templates/default/swift/Assets.xcassets/Wallet.imageset/Contents.json +1 -0
  28. data/lib/templates/default/swift/Assets.xcassets/Wallet.imageset/universal_Wallet.pdf +0 -0
  29. data/lib/templates/default/swift/Assets.xcassets/Welcome_001.imageset/Contents.json +12 -0
  30. data/lib/templates/default/swift/Assets.xcassets/Welcome_001.imageset/Icons_NotATour_Welcome_001.pdf +0 -0
  31. data/lib/templates/default/swift/Assets.xcassets/Welcome_002.imageset/Contents.json +12 -0
  32. data/lib/templates/default/swift/Assets.xcassets/Welcome_002.imageset/Icons_NotATour_Welcome_002.pdf +0 -0
  33. data/lib/templates/default/swift/Assets.xcassets/Welcome_003.imageset/Contents.json +12 -0
  34. data/lib/templates/default/swift/Assets.xcassets/Welcome_003.imageset/Icons_NotATour_Welcome_003.pdf +0 -0
  35. data/lib/templates/default/swift/Assets.xcassets/Welcome_004.imageset/Contents.json +12 -0
  36. data/lib/templates/default/swift/Assets.xcassets/Welcome_004.imageset/Icons_NotATour_Welcome_004.pdf +0 -0
  37. data/lib/templates/default/swift/Assets.xcassets/alert_beach.imageset/Contents.json +21 -0
  38. data/lib/templates/default/swift/Assets.xcassets/alert_beach.imageset/icons8-beach-64.png +0 -0
  39. data/lib/templates/default/swift/Assets.xcassets/alert_nobaggage.imageset/Contents.json +21 -0
  40. data/lib/templates/default/swift/Assets.xcassets/alert_nobaggage.imageset/icons8-no-baggage-100.png +0 -0
  41. data/lib/templates/default/swift/Assets.xcassets/alert_signpost.imageset/Contents.json +21 -0
  42. data/lib/templates/default/swift/Assets.xcassets/alert_signpost.imageset/icons8-signpost-64.png +0 -0
  43. data/lib/templates/default/swift/Assets.xcassets/alert_sunbed.imageset/Contents.json +21 -0
  44. data/lib/templates/default/swift/Assets.xcassets/alert_sunbed.imageset/sunbed.png +0 -0
  45. data/lib/templates/default/swift/Assets.xcassets/arrow.imageset/Contents.json +21 -0
  46. data/lib/templates/default/swift/Assets.xcassets/arrow.imageset/arrow.pdf +0 -0
  47. data/lib/templates/default/swift/Assets.xcassets/baggage.imageset/Contents.json +22 -0
  48. data/lib/templates/default/swift/Assets.xcassets/baggage.imageset/baggage.png +0 -0
  49. data/lib/templates/default/swift/Assets.xcassets/baggage.imageset/baggage@2x.png +0 -0
  50. data/lib/templates/default/swift/Assets.xcassets/burger.imageset/Contents.json +21 -0
  51. data/lib/templates/default/swift/Assets.xcassets/burger.imageset/burger.pdf +0 -0
  52. data/lib/templates/default/swift/Assets.xcassets/calendar-white.imageset/Contents.json +12 -0
  53. data/lib/templates/default/swift/Assets.xcassets/calendar-white.imageset/icons8-calendar.pdf +70 -0
  54. data/lib/templates/default/swift/Assets.xcassets/calendar.imageset/Contents.json +12 -0
  55. data/lib/templates/default/swift/Assets.xcassets/calendar.imageset/calendar.pdf +0 -0
  56. data/lib/templates/default/swift/Assets.xcassets/dots.imageset/Contents.json +24 -0
  57. data/lib/templates/default/swift/Assets.xcassets/dots.imageset/dots.pdf +0 -0
  58. data/lib/templates/default/swift/Assets.xcassets/edit.imageset/Contents.json +12 -0
  59. data/lib/templates/default/swift/Assets.xcassets/edit.imageset/edit.pdf +0 -0
  60. data/lib/templates/default/swift/Assets.xcassets/emptylogin.imageset/Contents.json +12 -0
  61. data/lib/templates/default/swift/Assets.xcassets/emptylogin.imageset/empty state loging.pdf +0 -0
  62. data/lib/templates/default/swift/Assets.xcassets/envelope.imageset/Contents.json +12 -0
  63. data/lib/templates/default/swift/Assets.xcassets/envelope.imageset/icons8-envelope.pdf +70 -0
  64. data/lib/templates/default/swift/Assets.xcassets/expandSection.imageset/Contents.json +22 -0
  65. data/lib/templates/default/swift/Assets.xcassets/expandSection.imageset/icons8-expand-arrow-100.png +0 -0
  66. data/lib/templates/default/swift/Assets.xcassets/expandSection.imageset/icons8-expand-arrow-50.png +0 -0
  67. data/lib/templates/default/swift/Assets.xcassets/facebook.imageset/Contents.json +24 -0
  68. data/lib/templates/default/swift/Assets.xcassets/facebook.imageset/icons8-facebook-f.pdf +68 -0
  69. data/lib/templates/default/swift/Assets.xcassets/filter-white.imageset/Contents.json +12 -0
  70. data/lib/templates/default/swift/Assets.xcassets/filter-white.imageset/icons8-adjust (3).pdf +0 -0
  71. data/lib/templates/default/swift/Assets.xcassets/filter.imageset/Contents.json +15 -0
  72. data/lib/templates/default/swift/Assets.xcassets/filter.imageset/filter.pdf +0 -0
  73. data/lib/templates/default/swift/Assets.xcassets/food.imageset/Contents.json +21 -0
  74. data/lib/templates/default/swift/Assets.xcassets/food.imageset/food.png +0 -0
  75. data/lib/templates/default/swift/Assets.xcassets/forgot-password.imageset/Contents.json +23 -0
  76. data/lib/templates/default/swift/Assets.xcassets/forgot-password.imageset/page-1.png +0 -0
  77. data/lib/templates/default/swift/Assets.xcassets/forgot-password.imageset/page-1@2x.png +0 -0
  78. data/lib/templates/default/swift/Assets.xcassets/forgot-password.imageset/page-1@3x.png +0 -0
  79. data/lib/templates/default/swift/Assets.xcassets/heart-active.imageset/Contents.json +12 -0
  80. data/lib/templates/default/swift/Assets.xcassets/heart-active.imageset/favortio activo.pdf +0 -0
  81. data/lib/templates/default/swift/Assets.xcassets/heart.imageset/Contents.json +12 -0
  82. data/lib/templates/default/swift/Assets.xcassets/heart.imageset/favorito inactivo.pdf +0 -0
  83. data/lib/templates/default/swift/Assets.xcassets/icons8-delete.imageset/Contents.json +12 -0
  84. data/lib/templates/default/swift/Assets.xcassets/icons8-delete.imageset/icons8-delete (3).pdf +69 -0
  85. data/lib/templates/default/swift/Assets.xcassets/lock.imageset/Contents.json +12 -0
  86. data/lib/templates/default/swift/Assets.xcassets/lock.imageset/icons8-lock.pdf +69 -0
  87. data/lib/templates/default/swift/Assets.xcassets/man-avatar.imageset/Contents.json +12 -0
  88. data/lib/templates/default/swift/Assets.xcassets/man-avatar.imageset/man-avatar.pdf +1149 -1
  89. data/lib/templates/default/swift/Assets.xcassets/new-notification.imageset/Contents.json +21 -0
  90. data/lib/templates/default/swift/Assets.xcassets/new-notification.imageset/icons8-filled-circle-filled-100.png +0 -0
  91. data/lib/templates/default/swift/Assets.xcassets/no-fav.imageset/Contents.json +21 -0
  92. data/lib/templates/default/swift/Assets.xcassets/no-fav.imageset/page-1@2x.png +0 -0
  93. data/lib/templates/default/swift/Assets.xcassets/notificaciones.imageset/Contents.json +12 -0
  94. data/lib/templates/default/swift/Assets.xcassets/notificaciones.imageset/notificaciones.pdf +0 -0
  95. data/lib/templates/default/swift/Assets.xcassets/notification.imageset/Contents.json +21 -0
  96. data/lib/templates/default/swift/Assets.xcassets/notification.imageset/icons8-notification-100.png +0 -0
  97. data/lib/templates/default/swift/Assets.xcassets/other.imageset/Contents.json +21 -0
  98. data/lib/templates/default/swift/Assets.xcassets/other.imageset/other.png +0 -0
  99. data/lib/templates/default/swift/Assets.xcassets/page-1.imageset/Contents.json +21 -0
  100. data/lib/templates/default/swift/Assets.xcassets/page-1.imageset/page-1@2x.png +0 -0
  101. data/lib/templates/default/swift/Assets.xcassets/page-3.imageset/Contents.json +21 -0
  102. data/lib/templates/default/swift/Assets.xcassets/page-3.imageset/page-1@2x.png +0 -0
  103. data/lib/templates/default/swift/Assets.xcassets/photo.imageset/Contents.json +24 -0
  104. data/lib/templates/default/swift/Assets.xcassets/photo.imageset/photo.pdf +0 -0
  105. data/lib/templates/default/swift/Assets.xcassets/plus-white.imageset/Contents.json +21 -0
  106. data/lib/templates/default/swift/Assets.xcassets/plus-white.imageset/icons8-plus-math-26.png +0 -0
  107. data/lib/templates/default/swift/Assets.xcassets/plus.imageset/+.pdf +0 -0
  108. data/lib/templates/default/swift/Assets.xcassets/plus.imageset/Contents.json +12 -0
  109. data/lib/templates/default/swift/Assets.xcassets/register.imageset/Contents.json +12 -0
  110. data/lib/templates/default/swift/Assets.xcassets/register.imageset/registro.pdf +0 -0
  111. data/lib/templates/default/swift/Assets.xcassets/search.imageset/Contents.json +15 -0
  112. data/lib/templates/default/swift/Assets.xcassets/search.imageset/search.pdf +0 -0
  113. data/lib/templates/default/swift/Assets.xcassets/settings.imageset/Contents.json +23 -0
  114. data/lib/templates/default/swift/Assets.xcassets/settings.imageset/icons8-settings-100.png +0 -0
  115. data/lib/templates/default/swift/Assets.xcassets/settings.imageset/icons8-settings-50.png +0 -0
  116. data/lib/templates/default/swift/Assets.xcassets/settings.imageset/icons8-settings-500.png +0 -0
  117. data/lib/templates/default/swift/Assets.xcassets/shape.imageset/Contents.json +23 -0
  118. data/lib/templates/default/swift/Assets.xcassets/shape.imageset/shape.png +0 -0
  119. data/lib/templates/default/swift/Assets.xcassets/shape.imageset/shape@2x.png +0 -0
  120. data/lib/templates/default/swift/Assets.xcassets/shape.imageset/shape@3x.png +0 -0
  121. data/lib/templates/default/swift/Assets.xcassets/signpost.imageset/Contents.json +21 -0
  122. data/lib/templates/default/swift/Assets.xcassets/signpost.imageset/icons8-signpost-50.png +0 -0
  123. data/lib/templates/default/swift/Assets.xcassets/stars.imageset/Contents.json +24 -0
  124. data/lib/templates/default/swift/Assets.xcassets/stars.imageset/stars.pdf +0 -0
  125. data/lib/templates/default/swift/Assets.xcassets/terms.imageset/Contents.json +12 -0
  126. data/lib/templates/default/swift/Assets.xcassets/terms.imageset/terminos y condiciones.pdf +0 -0
  127. data/lib/templates/default/swift/Assets.xcassets/tickets.imageset/Contents.json +12 -0
  128. data/lib/templates/default/swift/Assets.xcassets/tickets.imageset/tickets.pdf +0 -0
  129. data/lib/templates/default/swift/Assets.xcassets/user.imageset/Contents.json +22 -0
  130. data/lib/templates/default/swift/Assets.xcassets/user.imageset/icons8-account-100.png +0 -0
  131. data/lib/templates/default/swift/Assets.xcassets/user.imageset/icons8-account-50.png +0 -0
  132. data/lib/templates/default/swift/Assets.xcassets/visa.imageset/Contents.json +21 -0
  133. data/lib/templates/default/swift/Assets.xcassets/visa.imageset/visa.png +0 -0
  134. data/lib/templates/default/swift/Config/Config.swift +1 -1
  135. data/lib/templates/default/swift/Controllers/Login/ForgetPasswordVC.swift +125 -0
  136. data/lib/templates/default/swift/Controllers/Login/LoginVC.swift +244 -0
  137. data/lib/templates/default/swift/Controllers/Login/RegisterVC.swift +213 -0
  138. data/lib/templates/default/swift/Controllers/Notifications/Cells/NotificationCell.swift +51 -0
  139. data/lib/templates/default/swift/Controllers/Notifications/NotificationsVC.swift +164 -0
  140. data/lib/templates/default/swift/Controllers/OtherLogin/ForgetPasswordTVC.swift +98 -0
  141. data/lib/templates/default/swift/Controllers/OtherLogin/LoginTVC.swift +245 -0
  142. data/lib/templates/default/swift/Controllers/OtherLogin/OtherRegisterVC.swift +299 -0
  143. data/lib/templates/default/swift/Controllers/OtherLogin/SelectLanguageCell.swift +17 -0
  144. data/lib/templates/default/swift/Controllers/OtherLogin/SelectLanguageVC.swift +116 -0
  145. data/lib/templates/default/swift/Controllers/OtherLogin/TermsAndConditionsVC.swift +76 -0
  146. data/lib/templates/default/swift/Controllers/Profile/AboutUsVC.swift +93 -0
  147. data/lib/templates/default/swift/Controllers/Profile/Cells/AboutUsImageCell.swift +66 -0
  148. data/lib/templates/default/swift/Controllers/Profile/Cells/DescriptionCell.swift +16 -0
  149. data/lib/templates/default/swift/Controllers/Profile/Cells/DestinationCell.swift +35 -0
  150. data/lib/templates/default/swift/Controllers/Profile/Cells/DestinationCellView.xib +84 -0
  151. data/lib/templates/default/swift/Controllers/Profile/Cells/FavoriteCollectionCell.swift +24 -0
  152. data/lib/templates/default/swift/Controllers/Profile/Cells/ImagesCollectionViewCell.swift +15 -0
  153. data/lib/templates/default/swift/Controllers/Profile/ProfileContainerVC.swift +72 -0
  154. data/lib/templates/default/swift/Controllers/Profile/ProfileTVC.swift +581 -0
  155. data/lib/templates/default/swift/Controllers/Tutorial/TutorialVC.swift +121 -0
  156. data/lib/templates/default/swift/Extensions/ArrayDuplicates.swift +35 -0
  157. data/lib/templates/default/swift/Extensions/Buttons.swift +1 -1
  158. data/lib/templates/default/swift/Extensions/CustomCamera.swift +65 -0
  159. data/lib/templates/default/swift/Extensions/GradientView.swift +121 -0
  160. data/lib/templates/default/swift/Extensions/HideKeyboard.swift +22 -0
  161. data/lib/templates/default/swift/Extensions/Images.swift +82 -0
  162. data/lib/templates/default/swift/Extensions/InnerShadowExtension.swift +83 -0
  163. data/lib/templates/default/swift/Extensions/TableViewEmptyView.swift +30 -0
  164. data/lib/templates/default/swift/Extensions/TapEffectExtension.swift +48 -0
  165. data/lib/templates/default/swift/Extensions/{ColorHex.swift → UIColorExtensions.swift} +2 -2
  166. data/lib/templates/default/swift/Extensions/UnderlinedTextView.swift +61 -0
  167. data/lib/templates/default/swift/Extensions/UnderlinedWithIconTextField.swift +55 -0
  168. data/lib/templates/default/swift/Helper/APIHelper.swift +4 -4
  169. data/lib/templates/default/swift/Helper/APIManager.swift +81 -14
  170. data/lib/templates/default/swift/Helper/APIRequestBody.swift +1 -1
  171. data/lib/templates/default/swift/Helper/AWSManager.swift +1 -1
  172. data/lib/templates/default/swift/Helper/FilesManager.swift +1 -1
  173. data/lib/templates/default/swift/Helper/S3Manager.swift +1 -1
  174. data/lib/templates/default/swift/Helper/Utils.swift +3 -1
  175. data/lib/templates/default/swift/Info.plist +53 -0
  176. data/lib/templates/default/swift/Models/Country.swift +28 -0
  177. data/lib/templates/default/swift/Models/Managers/UserManager.swift +1 -1
  178. data/lib/templates/default/swift/Models/Notif.swift +71 -0
  179. data/lib/templates/default/swift/Models/Responses/BaseResponse.swift +1 -1
  180. data/lib/templates/default/swift/Models/Responses/NotificationResponse.swift +24 -0
  181. data/lib/templates/default/swift/Models/Responses/UserResponse.swift +1 -1
  182. data/lib/templates/default/swift/Models/Responses/UserSingupResponse.swift +1 -1
  183. data/lib/templates/default/swift/Models/User.swift +2 -2
  184. data/lib/templates/default/swift/UI/Storyboards/Home.storyboard +2113 -0
  185. data/lib/templates/default/swift/UI/Storyboards/Login.storyboard +814 -0
  186. data/lib/templates/default/swift/UI/Storyboards/OtherLogin.storyboard +1031 -0
  187. data/lib/templates/default/swift/UI/Views/EmptyTableView/EmptyTableLabelView.swift +18 -0
  188. data/lib/templates/default/swift/UI/Views/EmptyTableView/NoNotificationView.swift +16 -0
  189. data/lib/templates/default/swift/UI/Views/EmptyTableView/Xibs/EmptyTableLabelView.xib +72 -0
  190. data/lib/templates/default/swift/UI/Views/EmptyTableView/Xibs/NoNotificationsView.xib +61 -0
  191. metadata +176 -4
@@ -0,0 +1,121 @@
1
+ //
2
+ // TutorialVC.swift
3
+ // MVCGEN
4
+ //
5
+ // Created by Daniel Martinez on 23/7/18.
6
+ // Copyright © 2018 Houlak. All rights reserved.
7
+ //
8
+
9
+ import UIKit
10
+ import paper_onboarding
11
+
12
+ class TutorialVC: UIViewController {
13
+
14
+ @IBOutlet weak var onboarding: PaperOnboarding!
15
+ @IBOutlet weak var skipButton: UIButton!
16
+
17
+ override func viewDidLoad() {
18
+ super.viewDidLoad()
19
+ skipButton.isHidden = true
20
+
21
+ // Uncomment next line to setup `PaperOnboarding` from code
22
+ setupPaperOnboardingView()
23
+
24
+ }
25
+
26
+ private func setupPaperOnboardingView() {
27
+ let onboarding = PaperOnboarding()
28
+ onboarding.dataSource = self
29
+ onboarding.delegate = self
30
+ onboarding.translatesAutoresizingMaskIntoConstraints = false
31
+ view.addSubview(onboarding)
32
+
33
+ // Add constraints
34
+ for attribute: NSLayoutAttribute in [.left, .right, .top, .bottom] {
35
+ let constraint = NSLayoutConstraint(item: onboarding,
36
+ attribute: attribute,
37
+ relatedBy: .equal,
38
+ toItem: view,
39
+ attribute: attribute,
40
+ multiplier: 1,
41
+ constant: 0)
42
+ view.addConstraint(constraint)
43
+ }
44
+ self.view.bringSubview(toFront: skipButton);
45
+ }
46
+
47
+ }
48
+
49
+ // MARK: Actions
50
+
51
+ extension TutorialVC {
52
+
53
+ @IBAction func skipButtonTapped(_ sender: UIButton) {
54
+ print(#function)
55
+ }
56
+
57
+ }
58
+
59
+ // MARK: PaperOnboardingDelegate
60
+ extension TutorialVC: PaperOnboardingDelegate {
61
+
62
+ func onboardingWillTransitonToIndex(_ index: Int) {
63
+ skipButton.isHidden = index == 3 ? false : true
64
+ }
65
+
66
+ func onboardingDidTransitonToIndex(_ index: Int) {
67
+
68
+ }
69
+
70
+ func onboardingConfigurationItem(_ item: OnboardingContentViewItem, index: Int) {
71
+
72
+ // item.titleLabel?.backgroundColor = .redColor()
73
+ // item.descriptionLabel?.backgroundColor = .redColor()
74
+ // item.imageView = ...
75
+ }
76
+
77
+ }
78
+
79
+ // MARK: PaperOnboardingDataSource
80
+ extension TutorialVC: PaperOnboardingDataSource {
81
+
82
+ func onboardingItem(at index: Int) -> OnboardingItemInfo {
83
+ let titleFont = UIFont(name: "Quicksand-Bold", size: 30.0) ?? UIFont.boldSystemFont(ofSize: 30.0)
84
+ let descriptionFont = UIFont(name: "Quicksand-Medium", size: 22.0) ?? UIFont.systemFont(ofSize: 22.0)
85
+ let welcomeLabel = NSLocalizedString("WELCOME", comment: "")
86
+
87
+ let list = [
88
+ OnboardingItemInfo(informationImage: UIImage(named: "Welcome_001")!,
89
+ title: welcomeLabel,
90
+ description: NSLocalizedString("If you like to travel comfortably ...", comment: ""),
91
+ pageIcon: UIImage(named: "Tick")!,
92
+ color: Colors.firstGradientColor,
93
+ titleColor: UIColor.white, descriptionColor: UIColor.white, titleFont: titleFont, descriptionFont: descriptionFont),
94
+ OnboardingItemInfo(informationImage: UIImage(named: "Welcome_002")!,
95
+ title: "",
96
+ description: NSLocalizedString("... with everything arranged ...", comment: ""),
97
+ pageIcon: UIImage(named: "Tick")!,
98
+ color: Colors.secondGradientColor,
99
+ titleColor: UIColor.white, descriptionColor: UIColor.white, titleFont: titleFont, descriptionFont: descriptionFont),
100
+ OnboardingItemInfo(informationImage: UIImage(named: "Welcome_003")!,
101
+ title: "",
102
+ description: NSLocalizedString("... with everything planned ...", comment: ""),
103
+ pageIcon: UIImage(named: "Tick")!,
104
+ color: Colors.thirdGradientColor,
105
+ titleColor: UIColor.white, descriptionColor: UIColor.white, titleFont: titleFont, descriptionFont: descriptionFont),
106
+ OnboardingItemInfo(informationImage: UIImage(named: "Welcome_004")!,
107
+ title: "",
108
+ description: NSLocalizedString("... then don't travel with us!", comment: ""),
109
+ pageIcon: UIImage(named: "Tick")!,
110
+ color: Colors.textColor,
111
+ titleColor: UIColor.white, descriptionColor: UIColor.white, titleFont: titleFont, descriptionFont: descriptionFont),
112
+ ]
113
+ return list[index]
114
+ }
115
+
116
+ func onboardingItemsCount() -> Int {
117
+ return 4
118
+ }
119
+
120
+ }
121
+
@@ -0,0 +1,35 @@
1
+ //
2
+ // ArrayDuplicates.swift
3
+ // MVCGEN
4
+ //
5
+ // Created by Daniel Martinez on 23/7/18.
6
+ // Copyright © 2018 Houlak. All rights reserved.
7
+ //
8
+
9
+ /*
10
+ Extension for Array that will compare two elements and put an element into an array if it is NOT a duplicate.
11
+ The returned array will be the filtered list that contains only unique values.
12
+ Example:
13
+ // Use the .filterDuplicates function on an array of beacons to create a new array of only unique UUID's
14
+ let beaconRegions: [iBeaconItem] = iBeacons.filterDuplicates { $0.uuid == $1.uuid && $0.uuid == $1.uuid }
15
+ */
16
+
17
+ extension Array {
18
+
19
+ func filterDuplicates(includeElement: @escaping (_ lhs: Element, _ rhs: Element) -> Bool) -> [Element] {
20
+
21
+ var results = [Element]()
22
+
23
+ forEach { (element) in
24
+
25
+ let existingElements = results.filter {
26
+ return includeElement(element, $0)
27
+ }
28
+
29
+ if existingElements.count == 0 {
30
+ results.append(element)
31
+ }
32
+ }
33
+ return results
34
+ }
35
+ }
@@ -3,7 +3,7 @@
3
3
  // MVCGEN
4
4
  //
5
5
  // Created by Daniel Martinez on 23/7/18.
6
- // Copyright © 2018 DanielMartinez. All rights reserved.
6
+ // Copyright © 2018 Houlak. All rights reserved.
7
7
  //
8
8
 
9
9
  import UIKit
@@ -0,0 +1,65 @@
1
+ //
2
+ // CustomCamera.swift
3
+ // MVCGEN
4
+ //
5
+ // Created by Daniel Martinez on 23/7/18.
6
+ // Copyright © 2018 Houlak. All rights reserved.
7
+ //
8
+
9
+ import UIKit
10
+ import MobileCoreServices
11
+ import DKImagePickerController
12
+
13
+ open class CustomCamera: UIImagePickerController, DKImagePickerControllerCameraProtocol, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
14
+
15
+ var didCancel: (() -> Void)?
16
+ var didFinishCapturingImage: ((_ image: UIImage, _ metadata: [AnyHashable : Any]?) -> Void)?
17
+ var didFinishCapturingVideo: ((_ videoURL: URL) -> Void)?
18
+
19
+ open override func viewDidLoad() {
20
+ super.viewDidLoad()
21
+
22
+ self.delegate = self
23
+ self.sourceType = .camera
24
+ self.mediaTypes = [kUTTypeImage as String, kUTTypeMovie as String]
25
+ }
26
+
27
+ // MARK: - DKImagePickerControllerCameraProtocol
28
+
29
+ public func setDidCancel(block: @escaping () -> Void) {
30
+ self.didCancel = block
31
+ }
32
+
33
+ public func setDidFinishCapturingImage(block: @escaping (UIImage, [AnyHashable : Any]?) -> Void) {
34
+ self.didFinishCapturingImage = block
35
+ }
36
+
37
+ public func setDidFinishCapturingVideo(block: @escaping (URL) -> Void) {
38
+ self.didFinishCapturingVideo = block
39
+ }
40
+
41
+ // MARK: - UIImagePickerControllerDelegate methods
42
+
43
+ open func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
44
+
45
+ let mediaType = info[UIImagePickerControllerMediaType] as! String
46
+ let metadata = info[UIImagePickerControllerMediaMetadata] as! [AnyHashable : Any]
47
+
48
+ if mediaType == kUTTypeImage as String {
49
+
50
+ let image = info[UIImagePickerControllerOriginalImage] as! UIImage
51
+ self.didFinishCapturingImage?(image, metadata)
52
+
53
+ } else if mediaType == kUTTypeMovie as String {
54
+
55
+ let videoURL = info[UIImagePickerControllerMediaURL] as! URL
56
+ self.didFinishCapturingVideo?(videoURL)
57
+ }
58
+ }
59
+
60
+ open func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
61
+ self.didCancel?()
62
+ }
63
+
64
+ }
65
+
@@ -0,0 +1,121 @@
1
+ //
2
+ // GradientView.swift
3
+ // MVCGEN
4
+ //
5
+ // Created by Daniel Martinez on 23/7/18.
6
+ // Copyright © 2018 Houlak. All rights reserved.
7
+ //
8
+
9
+ import Foundation
10
+ import UIKit
11
+
12
+ typealias GradientPoints = (startPoint: CGPoint, endPoint: CGPoint)
13
+
14
+ enum GradientOrientation {
15
+ case topRightBottomLeft
16
+ case topLeftBottomRight
17
+ case horizontal
18
+ case vertical
19
+
20
+ var startPoint: CGPoint {
21
+ return points.startPoint
22
+ }
23
+
24
+ var endPoint: CGPoint {
25
+ return points.endPoint
26
+ }
27
+
28
+ var points: GradientPoints {
29
+ switch self {
30
+ case .topRightBottomLeft:
31
+ return (CGPoint.init(x: 0.0, y: 1.0), CGPoint.init(x: 1.0, y: 0.0))
32
+ case .topLeftBottomRight:
33
+ return (CGPoint.init(x: 0.0, y: 0.0), CGPoint.init(x: 1, y: 1))
34
+ case .horizontal:
35
+ return (CGPoint.init(x: 0.0, y: 0.5), CGPoint.init(x: 1.0, y: 0.5))
36
+ case .vertical:
37
+ return (CGPoint.init(x: 0.0, y: 0.0), CGPoint.init(x: 0.0, y: 1.0))
38
+ }
39
+ }
40
+ }
41
+
42
+ extension UIView {
43
+
44
+ func applyGradient(withColours colours: [UIColor], cornerRadius: CGFloat = 0, locations: [NSNumber]? = nil) {
45
+ let gradient: CAGradientLayer = CAGradientLayer()
46
+ gradient.cornerRadius = cornerRadius
47
+ gradient.frame = self.bounds
48
+ gradient.colors = colours.map { $0.cgColor }
49
+ gradient.locations = locations
50
+
51
+ self.layer.insertSublayer(gradient, at: 0)
52
+ }
53
+
54
+ func applyGradient(withColours colours: [UIColor], gradientOrientation orientation: GradientOrientation, cornerRadius: CGFloat = 0) {
55
+ let gradient: CAGradientLayer = CAGradientLayer()
56
+ gradient.cornerRadius = cornerRadius
57
+ gradient.frame = self.bounds
58
+ gradient.colors = colours.map { $0.cgColor }
59
+ gradient.backgroundColor = UIColor.black.cgColor
60
+ gradient.startPoint = orientation.startPoint
61
+ gradient.endPoint = orientation.endPoint
62
+
63
+ self.layer.insertSublayer(gradient, at: 0)
64
+ }
65
+
66
+ func applyGradient(withColours colours: [UIColor], alpha: CGFloat, angle: Double!) {
67
+
68
+ let gradient: CAGradientLayer = CAGradientLayer()
69
+ gradient.name = "gradientLayer"
70
+ let rect = CGRect(x: 0, y: 0, width: 375, height: 165)
71
+ gradient.frame = rect
72
+ gradient.colors = colours.map { $0.cgColor }
73
+ let x: Double! = angle / 360.0
74
+ let a = pow(sinf(Float(2.0 * Double.pi * ((x + 0.75) / 2.0))),2.0);
75
+ let b = pow(sinf(Float(2 * Double.pi * ((x+0.0)/2))),2);
76
+ let c = pow(sinf(Float(2 * Double.pi * ((x+0.25)/2))),2);
77
+ let d = pow(sinf(Float(2 * Double.pi * ((x+0.5)/2))),2);
78
+ gradient.endPoint = CGPoint(x: CGFloat(c),y: CGFloat(d))
79
+ gradient.startPoint = CGPoint(x: CGFloat(a),y:CGFloat(b))
80
+ self.alpha = alpha
81
+ self.layer.insertSublayer(gradient, at: 0)
82
+ }
83
+
84
+ func applyGradientItinerary(withColours colours: [UIColor], alpha: CGFloat, angle: Double!) {
85
+
86
+ let gradient: CAGradientLayer = CAGradientLayer()
87
+ gradient.name = "gradientLayer"
88
+ gradient.frame = self.bounds
89
+ gradient.colors = colours.map { $0.cgColor }
90
+ let x: Double! = angle / 360.0
91
+ let a = pow(sinf(Float(2.0 * Double.pi * ((x + 0.75) / 2.0))),2.0);
92
+ let b = pow(sinf(Float(2 * Double.pi * ((x+0.0)/2))),2);
93
+ let c = pow(sinf(Float(2 * Double.pi * ((x+0.25)/2))),2);
94
+ let d = pow(sinf(Float(2 * Double.pi * ((x+0.5)/2))),2);
95
+ gradient.endPoint = CGPoint(x: CGFloat(c),y: CGFloat(d))
96
+ gradient.startPoint = CGPoint(x: CGFloat(a),y:CGFloat(b))
97
+ self.alpha = alpha
98
+ self.layer.insertSublayer(gradient, at: 0)
99
+ }
100
+
101
+ func applyGradient(withColours colours: [UIColor], rect: CGRect) {
102
+
103
+ let gradient: CAGradientLayer = CAGradientLayer()
104
+ gradient.name = "gradientLayer"
105
+ //let rect = CGRect(x: 0, y: 0, width: 375, height: 165)
106
+ gradient.frame = rect
107
+ gradient.colors = colours.map { $0.cgColor }
108
+
109
+ /*let a = rect.minX
110
+ let b = rect.minY
111
+ let c = rect.maxX
112
+ let d = rect.maxY*/
113
+ //gradient.endPoint = CGPoint(x: 10,y: 5)
114
+ //gradient.endPoint = CGPoint(x: CGFloat(c),y: CGFloat(d))
115
+ //gradient.startPoint = CGPoint(x: CGFloat(a),y:CGFloat(b))
116
+ //gradient.startPoint = CGPoint(x: 0,y:0)
117
+ //gradient.backgroundColor = UIColor.black.cgColor
118
+ self.layer.insertSublayer(gradient, at: 0)
119
+ }
120
+
121
+ }
@@ -0,0 +1,22 @@
1
+ //
2
+ // HideKeyboard.swift
3
+ // MVCGEN
4
+ //
5
+ // Created by Daniel Martinez on 23/7/18.
6
+ // Copyright © 2018 Houlak. All rights reserved.
7
+ //
8
+
9
+ import UIKit
10
+
11
+ extension UIViewController {
12
+
13
+ func hideKeyboardWhenTappedAround() {
14
+ let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard))
15
+ view.addGestureRecognizer(tap)
16
+
17
+ }
18
+
19
+ @objc func dismissKeyboard() {
20
+ view.endEditing(true)
21
+ }
22
+ }
@@ -0,0 +1,82 @@
1
+ //
2
+ // Images.swift
3
+ // MVCGEN
4
+ //
5
+ // Created by Daniel Martinez on 23/7/18.
6
+ // Copyright © 2018 Houlak. All rights reserved.
7
+ //
8
+
9
+ #if os(iOS) || os(tvOS) || os(watchOS)
10
+ import UIKit.UIImage
11
+ typealias Image = UIImage
12
+ #elseif os(OSX)
13
+ import AppKit.NSImage
14
+ typealias Image = NSImage
15
+ #endif
16
+
17
+ enum Asset: String {
18
+ case logo = "logo"
19
+ case banks = "Banks"
20
+ case hotels = "Hotels"
21
+ case key = "Key"
22
+ case shoppingCart = "Shopping-cart"
23
+ case stores = "Stores"
24
+ case wallet = "Wallet"
25
+ case tick = "Tick"
26
+ case userTestPhoto = "photo"
27
+
28
+ var image: Image {
29
+ let bundle = Bundle(for: BundleToken.self)
30
+ #if os(iOS) || os(tvOS)
31
+ let image = Image(named: rawValue, in: bundle, compatibleWith: nil)
32
+ #elseif os(OSX)
33
+ let image = bundle.image(forResource: rawValue)
34
+ #elseif os(watchOS)
35
+ let image = Image(named: rawValue)
36
+ #endif
37
+ guard let result = image else { fatalError("Unable to load image \(rawValue).") }
38
+ return result
39
+ }
40
+ }
41
+
42
+ extension Image {
43
+ convenience init!(asset: Asset) {
44
+ #if os(iOS) || os(tvOS)
45
+ let bundle = Bundle(for: BundleToken.self)
46
+ self.init(named: asset.rawValue, in: bundle, compatibleWith: nil)
47
+ #elseif os(OSX) || os(watchOS)
48
+ self.init(named: asset.rawValue)
49
+ #endif
50
+ }
51
+ }
52
+
53
+ private final class BundleToken {}
54
+
55
+ extension UIImage{
56
+ func resize(targetSize: CGSize) -> UIImage {
57
+
58
+ let size = self.size
59
+
60
+ let widthRatio = targetSize.width / self.size.width
61
+ let heightRatio = targetSize.height / self.size.height
62
+
63
+ // Figure out what our orientation is, and use that to form the rectangle
64
+ var newSize: CGSize
65
+ if(widthRatio > heightRatio) {
66
+ newSize = CGSize(width: size.width * heightRatio, height: size.height * heightRatio)
67
+ } else {
68
+ newSize = CGSize(width: size.width * widthRatio, height: size.height * widthRatio)
69
+ }
70
+
71
+ // This is the rect that we've calculated out and this is what is actually used below
72
+ let rect = CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height)
73
+
74
+ // Actually do the resizing to the rect using the ImageContext stuff
75
+ UIGraphicsBeginImageContextWithOptions(newSize, false, 1.0)
76
+ self.draw(in: rect)
77
+ let newImage = UIGraphicsGetImageFromCurrentImageContext()
78
+ UIGraphicsEndImageContext()
79
+
80
+ return newImage!
81
+ }
82
+ }