mvcgen 0.1.14 → 0.1.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+ }