mvcgen 0.1.14 → 0.1.18
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/mvcgen/filemanager.rb +1 -1
- data/lib/mvcgen/generator.rb +36 -33
- data/lib/mvcgen/version.rb +1 -1
- data/lib/templates/default/mvcspec.yml +1 -1
- data/lib/templates/default/podfile/Podfile +73 -0
- data/lib/templates/default/swift/AppDelegate.swift +181 -0
- data/lib/templates/default/swift/Assets.xcassets/AppIcon.appiconset/Contents.json +133 -0
- data/lib/templates/default/swift/Assets.xcassets/Back.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/Back.imageset/icons8-back-filled-100-2.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Contents.json +6 -0
- data/lib/templates/default/swift/Assets.xcassets/Down.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/Down.imageset/icons8-expand-arrow-filled-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Forward.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/Forward.imageset/icons8-forward-filled-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Key.imageset/Contents.json +1 -0
- data/lib/templates/default/swift/Assets.xcassets/Key.imageset/universal_Key.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Shopping-cart.imageset/Contents.json +1 -0
- data/lib/templates/default/swift/Assets.xcassets/Shopping-cart.imageset/universal_Shopping-cart.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Tick.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/Tick.imageset/icons8-Checkmark-96 (1).png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Up.imageset/Contents.json +22 -0
- data/lib/templates/default/swift/Assets.xcassets/Up.imageset/icons8-collapse-arrow-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Up.imageset/icons8-collapse-arrow-50.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Uruguay.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/Uruguay.imageset/icons8-uruguay-40.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Wallet.imageset/Contents.json +1 -0
- data/lib/templates/default/swift/Assets.xcassets/Wallet.imageset/universal_Wallet.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Welcome_001.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/Welcome_001.imageset/Icons_NotATour_Welcome_001.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Welcome_002.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/Welcome_002.imageset/Icons_NotATour_Welcome_002.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Welcome_003.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/Welcome_003.imageset/Icons_NotATour_Welcome_003.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Welcome_004.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/Welcome_004.imageset/Icons_NotATour_Welcome_004.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/alert_beach.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/alert_beach.imageset/icons8-beach-64.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/alert_nobaggage.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/alert_nobaggage.imageset/icons8-no-baggage-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/alert_signpost.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/alert_signpost.imageset/icons8-signpost-64.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/alert_sunbed.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/alert_sunbed.imageset/sunbed.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/arrow.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/arrow.imageset/arrow.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/baggage.imageset/Contents.json +22 -0
- data/lib/templates/default/swift/Assets.xcassets/baggage.imageset/baggage.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/baggage.imageset/baggage@2x.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/burger.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/burger.imageset/burger.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/calendar-white.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/calendar-white.imageset/icons8-calendar.pdf +70 -0
- data/lib/templates/default/swift/Assets.xcassets/calendar.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/calendar.imageset/calendar.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/dots.imageset/Contents.json +24 -0
- data/lib/templates/default/swift/Assets.xcassets/dots.imageset/dots.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/edit.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/edit.imageset/edit.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/emptylogin.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/emptylogin.imageset/empty state loging.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/envelope.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/envelope.imageset/icons8-envelope.pdf +70 -0
- data/lib/templates/default/swift/Assets.xcassets/expandSection.imageset/Contents.json +22 -0
- data/lib/templates/default/swift/Assets.xcassets/expandSection.imageset/icons8-expand-arrow-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/expandSection.imageset/icons8-expand-arrow-50.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/facebook.imageset/Contents.json +24 -0
- data/lib/templates/default/swift/Assets.xcassets/facebook.imageset/icons8-facebook-f.pdf +68 -0
- data/lib/templates/default/swift/Assets.xcassets/filter-white.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/filter-white.imageset/icons8-adjust (3).pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/filter.imageset/Contents.json +15 -0
- data/lib/templates/default/swift/Assets.xcassets/filter.imageset/filter.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/food.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/food.imageset/food.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/forgot-password.imageset/Contents.json +23 -0
- data/lib/templates/default/swift/Assets.xcassets/forgot-password.imageset/page-1.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/forgot-password.imageset/page-1@2x.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/forgot-password.imageset/page-1@3x.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/heart-active.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/heart-active.imageset/favortio activo.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/heart.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/heart.imageset/favorito inactivo.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/icons8-delete.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/icons8-delete.imageset/icons8-delete (3).pdf +69 -0
- data/lib/templates/default/swift/Assets.xcassets/lock.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/lock.imageset/icons8-lock.pdf +69 -0
- data/lib/templates/default/swift/Assets.xcassets/man-avatar.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/man-avatar.imageset/man-avatar.pdf +1149 -1
- data/lib/templates/default/swift/Assets.xcassets/new-notification.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/new-notification.imageset/icons8-filled-circle-filled-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/no-fav.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/no-fav.imageset/page-1@2x.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/notificaciones.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/notificaciones.imageset/notificaciones.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/notification.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/notification.imageset/icons8-notification-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/other.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/other.imageset/other.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/page-1.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/page-1.imageset/page-1@2x.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/page-3.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/page-3.imageset/page-1@2x.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/photo.imageset/Contents.json +24 -0
- data/lib/templates/default/swift/Assets.xcassets/photo.imageset/photo.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/plus-white.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/plus-white.imageset/icons8-plus-math-26.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/plus.imageset/+.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/plus.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/register.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/register.imageset/registro.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/search.imageset/Contents.json +15 -0
- data/lib/templates/default/swift/Assets.xcassets/search.imageset/search.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/settings.imageset/Contents.json +23 -0
- data/lib/templates/default/swift/Assets.xcassets/settings.imageset/icons8-settings-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/settings.imageset/icons8-settings-50.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/settings.imageset/icons8-settings-500.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/shape.imageset/Contents.json +23 -0
- data/lib/templates/default/swift/Assets.xcassets/shape.imageset/shape.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/shape.imageset/shape@2x.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/shape.imageset/shape@3x.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/signpost.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/signpost.imageset/icons8-signpost-50.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/stars.imageset/Contents.json +24 -0
- data/lib/templates/default/swift/Assets.xcassets/stars.imageset/stars.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/terms.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/terms.imageset/terminos y condiciones.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/tickets.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/tickets.imageset/tickets.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/user.imageset/Contents.json +22 -0
- data/lib/templates/default/swift/Assets.xcassets/user.imageset/icons8-account-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/user.imageset/icons8-account-50.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/visa.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/visa.imageset/visa.png +0 -0
- data/lib/templates/default/swift/Config/Config.swift +1 -1
- data/lib/templates/default/swift/Controllers/Login/ForgetPasswordVC.swift +125 -0
- data/lib/templates/default/swift/Controllers/Login/LoginVC.swift +244 -0
- data/lib/templates/default/swift/Controllers/Login/RegisterVC.swift +213 -0
- data/lib/templates/default/swift/Controllers/Notifications/Cells/NotificationCell.swift +51 -0
- data/lib/templates/default/swift/Controllers/Notifications/NotificationsVC.swift +164 -0
- data/lib/templates/default/swift/Controllers/OtherLogin/ForgetPasswordTVC.swift +98 -0
- data/lib/templates/default/swift/Controllers/OtherLogin/LoginTVC.swift +245 -0
- data/lib/templates/default/swift/Controllers/OtherLogin/OtherRegisterVC.swift +299 -0
- data/lib/templates/default/swift/Controllers/OtherLogin/SelectLanguageCell.swift +17 -0
- data/lib/templates/default/swift/Controllers/OtherLogin/SelectLanguageVC.swift +116 -0
- data/lib/templates/default/swift/Controllers/OtherLogin/TermsAndConditionsVC.swift +76 -0
- data/lib/templates/default/swift/Controllers/Profile/AboutUsVC.swift +93 -0
- data/lib/templates/default/swift/Controllers/Profile/Cells/AboutUsImageCell.swift +66 -0
- data/lib/templates/default/swift/Controllers/Profile/Cells/DescriptionCell.swift +16 -0
- data/lib/templates/default/swift/Controllers/Profile/Cells/DestinationCell.swift +35 -0
- data/lib/templates/default/swift/Controllers/Profile/Cells/DestinationCellView.xib +84 -0
- data/lib/templates/default/swift/Controllers/Profile/Cells/FavoriteCollectionCell.swift +24 -0
- data/lib/templates/default/swift/Controllers/Profile/Cells/ImagesCollectionViewCell.swift +15 -0
- data/lib/templates/default/swift/Controllers/Profile/ProfileContainerVC.swift +72 -0
- data/lib/templates/default/swift/Controllers/Profile/ProfileTVC.swift +581 -0
- data/lib/templates/default/swift/Controllers/Tutorial/TutorialVC.swift +121 -0
- data/lib/templates/default/swift/Extensions/ArrayDuplicates.swift +35 -0
- data/lib/templates/default/swift/Extensions/Buttons.swift +1 -1
- data/lib/templates/default/swift/Extensions/CustomCamera.swift +65 -0
- data/lib/templates/default/swift/Extensions/GradientView.swift +121 -0
- data/lib/templates/default/swift/Extensions/HideKeyboard.swift +22 -0
- data/lib/templates/default/swift/Extensions/Images.swift +82 -0
- data/lib/templates/default/swift/Extensions/InnerShadowExtension.swift +83 -0
- data/lib/templates/default/swift/Extensions/TableViewEmptyView.swift +30 -0
- data/lib/templates/default/swift/Extensions/TapEffectExtension.swift +48 -0
- data/lib/templates/default/swift/Extensions/{ColorHex.swift → UIColorExtensions.swift} +2 -2
- data/lib/templates/default/swift/Extensions/UnderlinedTextView.swift +61 -0
- data/lib/templates/default/swift/Extensions/UnderlinedWithIconTextField.swift +55 -0
- data/lib/templates/default/swift/Helper/APIHelper.swift +4 -4
- data/lib/templates/default/swift/Helper/APIManager.swift +81 -14
- data/lib/templates/default/swift/Helper/APIRequestBody.swift +1 -1
- data/lib/templates/default/swift/Helper/AWSManager.swift +1 -1
- data/lib/templates/default/swift/Helper/FilesManager.swift +1 -1
- data/lib/templates/default/swift/Helper/S3Manager.swift +1 -1
- data/lib/templates/default/swift/Helper/Utils.swift +3 -1
- data/lib/templates/default/swift/Info.plist +53 -0
- data/lib/templates/default/swift/Models/Country.swift +28 -0
- data/lib/templates/default/swift/Models/Managers/UserManager.swift +1 -1
- data/lib/templates/default/swift/Models/Notif.swift +71 -0
- data/lib/templates/default/swift/Models/Responses/BaseResponse.swift +1 -1
- data/lib/templates/default/swift/Models/Responses/NotificationResponse.swift +24 -0
- data/lib/templates/default/swift/Models/Responses/UserResponse.swift +1 -1
- data/lib/templates/default/swift/Models/Responses/UserSingupResponse.swift +1 -1
- data/lib/templates/default/swift/Models/User.swift +2 -2
- data/lib/templates/default/swift/UI/Storyboards/Home.storyboard +2113 -0
- data/lib/templates/default/swift/UI/Storyboards/Login.storyboard +814 -0
- data/lib/templates/default/swift/UI/Storyboards/OtherLogin.storyboard +1031 -0
- data/lib/templates/default/swift/UI/Views/EmptyTableView/EmptyTableLabelView.swift +18 -0
- data/lib/templates/default/swift/UI/Views/EmptyTableView/NoNotificationView.swift +16 -0
- data/lib/templates/default/swift/UI/Views/EmptyTableView/Xibs/EmptyTableLabelView.xib +72 -0
- data/lib/templates/default/swift/UI/Views/EmptyTableView/Xibs/NoNotificationsView.xib +61 -0
- metadata +176 -4
@@ -0,0 +1,83 @@
|
|
1
|
+
//
|
2
|
+
// InnerShadowExtension.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 UIView {
|
12
|
+
// different inner shadow styles
|
13
|
+
public enum innerShadowSide
|
14
|
+
{
|
15
|
+
case all, left, right, top, bottom, topAndLeft, topAndRight, bottomAndLeft, bottomAndRight, exceptLeft, exceptRight, exceptTop, exceptBottom
|
16
|
+
}
|
17
|
+
|
18
|
+
// define function to add inner shadow
|
19
|
+
public func addInnerShadow(onSide: innerShadowSide, shadowColor: UIColor, shadowSize: CGFloat, cornerRadius: CGFloat = 0.0, shadowOpacity: Float)
|
20
|
+
{
|
21
|
+
// define and set a shaow layer
|
22
|
+
let shadowLayer = CAShapeLayer()
|
23
|
+
shadowLayer.frame = bounds
|
24
|
+
shadowLayer.shadowColor = shadowColor.cgColor
|
25
|
+
shadowLayer.shadowOffset = CGSize(width: 0.0, height: 0.0)
|
26
|
+
shadowLayer.shadowOpacity = shadowOpacity
|
27
|
+
shadowLayer.shadowRadius = shadowSize
|
28
|
+
shadowLayer.fillRule = kCAFillRuleEvenOdd
|
29
|
+
|
30
|
+
// define shadow path
|
31
|
+
let shadowPath = CGMutablePath()
|
32
|
+
|
33
|
+
// define outer rectangle to restrict drawing area
|
34
|
+
let insetRect = bounds.insetBy(dx: -shadowSize * 2.0, dy: -shadowSize * 2.0)
|
35
|
+
|
36
|
+
// define inner rectangle for mask
|
37
|
+
let innerFrame: CGRect = { () -> CGRect in
|
38
|
+
switch onSide
|
39
|
+
{
|
40
|
+
case .all:
|
41
|
+
return CGRect(x: 0.0, y: 0.0, width: frame.size.width, height: frame.size.height)
|
42
|
+
case .left:
|
43
|
+
return CGRect(x: 0.0, y: -shadowSize * 2.0, width: frame.size.width + shadowSize * 2.0, height: frame.size.height + shadowSize * 4.0)
|
44
|
+
case .right:
|
45
|
+
return CGRect(x: -shadowSize * 2.0, y: -shadowSize * 2.0, width: frame.size.width + shadowSize * 2.0, height: frame.size.height + shadowSize * 4.0)
|
46
|
+
case .top:
|
47
|
+
return CGRect(x: -shadowSize * 2.0, y: 0.0, width: frame.size.width + shadowSize * 4.0, height: frame.size.height + shadowSize * 2.0)
|
48
|
+
case.bottom:
|
49
|
+
return CGRect(x: -shadowSize * 2.0, y: -shadowSize * 2.0, width: frame.size.width + shadowSize * 4.0, height: frame.size.height + shadowSize * 2.0)
|
50
|
+
case .topAndLeft:
|
51
|
+
return CGRect(x: 0.0, y: 0.0, width: frame.size.width + shadowSize * 2.0, height: frame.size.height + shadowSize * 2.0)
|
52
|
+
case .topAndRight:
|
53
|
+
return CGRect(x: -shadowSize * 2.0, y: 0.0, width: frame.size.width + shadowSize * 2.0, height: frame.size.height + shadowSize * 2.0)
|
54
|
+
case .bottomAndLeft:
|
55
|
+
return CGRect(x: 0.0, y: -shadowSize * 2.0, width: frame.size.width + shadowSize * 2.0, height: frame.size.height + shadowSize * 2.0)
|
56
|
+
case .bottomAndRight:
|
57
|
+
return CGRect(x: -shadowSize * 2.0, y: -shadowSize * 2.0, width: frame.size.width + shadowSize * 2.0, height: frame.size.height + shadowSize * 2.0)
|
58
|
+
case .exceptLeft:
|
59
|
+
return CGRect(x: -shadowSize * 2.0, y: 0.0, width: frame.size.width + shadowSize * 2.0, height: frame.size.height)
|
60
|
+
case .exceptRight:
|
61
|
+
return CGRect(x: 0.0, y: 0.0, width: frame.size.width + shadowSize * 2.0, height: frame.size.height)
|
62
|
+
case .exceptTop:
|
63
|
+
return CGRect(x: 0.0, y: -shadowSize * 2.0, width: frame.size.width, height: frame.size.height + shadowSize * 2.0)
|
64
|
+
case .exceptBottom:
|
65
|
+
return CGRect(x: 0.0, y: 0.0, width: frame.size.width, height: frame.size.height + shadowSize * 2.0)
|
66
|
+
}
|
67
|
+
}()
|
68
|
+
|
69
|
+
// add outer and inner rectangle to shadow path
|
70
|
+
shadowPath.addRect(insetRect)
|
71
|
+
shadowPath.addRect(innerFrame)
|
72
|
+
|
73
|
+
// set shadow path as show layer's
|
74
|
+
shadowLayer.path = shadowPath
|
75
|
+
|
76
|
+
// add shadow layer as a sublayer
|
77
|
+
layer.addSublayer(shadowLayer)
|
78
|
+
|
79
|
+
// hide outside drawing area
|
80
|
+
clipsToBounds = true
|
81
|
+
}
|
82
|
+
}
|
83
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
//
|
2
|
+
// TableViewEmptyView.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
|
+
|
12
|
+
extension UITableView {
|
13
|
+
|
14
|
+
func setEmptyTableLabelView(message: String, emptyIcon: String) {
|
15
|
+
|
16
|
+
let emptyTableLabelViewNib = UINib(nibName: "EmptyTableLabelView", bundle: nil)
|
17
|
+
let emptyTableLabelView = emptyTableLabelViewNib.instantiate(withOwner: nil, options: nil)[0] as! EmptyTableLabelView
|
18
|
+
emptyTableLabelView.label.text = message
|
19
|
+
emptyTableLabelView.iconImageView.image = UIImage(named: emptyIcon)
|
20
|
+
emptyTableLabelView.tag = 100
|
21
|
+
self.backgroundView = emptyTableLabelView
|
22
|
+
|
23
|
+
}
|
24
|
+
|
25
|
+
func hideEmptyTableLabelView(){
|
26
|
+
if let viewWithTag = self.viewWithTag(100) {
|
27
|
+
viewWithTag.isHidden = true
|
28
|
+
}
|
29
|
+
}
|
30
|
+
}
|
@@ -0,0 +1,48 @@
|
|
1
|
+
//
|
2
|
+
// TapEffectExtension.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 setUnselectedColors(backgroundView: UIView, label: UILabel) {
|
14
|
+
backgroundView.backgroundColor = UIColor.white
|
15
|
+
label.textColor = UIColor.black
|
16
|
+
}
|
17
|
+
|
18
|
+
func setSelectedColors(backgroundView: UIView, label: UILabel) {
|
19
|
+
backgroundView.backgroundColor = Colors.firstGradientColor
|
20
|
+
label.textColor = UIColor.white
|
21
|
+
}
|
22
|
+
|
23
|
+
func animateViewBounceAndZoom(viewToAnimate: UIView) {
|
24
|
+
|
25
|
+
scaleView(by: 0.8, viewToTransform: viewToAnimate)
|
26
|
+
|
27
|
+
UIView.animate(withDuration: 0.3/2, animations: {
|
28
|
+
self.scaleView(by: 1.1, viewToTransform: viewToAnimate)
|
29
|
+
}, completion: { finished in
|
30
|
+
UIView.animate(withDuration: 0.5/2, animations: {
|
31
|
+
self.resetViewScale(viewToTransform: viewToAnimate)
|
32
|
+
}, completion: { finished in
|
33
|
+
UIView.animate(withDuration: 0.3/2, animations: {
|
34
|
+
self.scaleView(by: 1.0, viewToTransform: viewToAnimate)
|
35
|
+
})
|
36
|
+
})
|
37
|
+
})
|
38
|
+
}
|
39
|
+
|
40
|
+
func scaleView(by scale: CGFloat, viewToTransform: UIView) {
|
41
|
+
|
42
|
+
viewToTransform.transform = CGAffineTransform.identity.scaledBy(x: scale, y: scale)
|
43
|
+
}
|
44
|
+
|
45
|
+
func resetViewScale(viewToTransform: UIView) {
|
46
|
+
viewToTransform.transform = CGAffineTransform.identity
|
47
|
+
}
|
48
|
+
}
|
@@ -0,0 +1,61 @@
|
|
1
|
+
//
|
2
|
+
// UnderlinedTextView.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
|
+
class UnderlinedTextView: UITextView {
|
12
|
+
|
13
|
+
var border: UIView!
|
14
|
+
var originalBorderFrame: CGRect!
|
15
|
+
var originalInsetBottom: CGFloat = 0.0
|
16
|
+
|
17
|
+
override init(frame: CGRect, textContainer: NSTextContainer?) {
|
18
|
+
super.init(frame: frame, textContainer: textContainer)
|
19
|
+
self.border = UIView()
|
20
|
+
self.originalBorderFrame = CGRect(origin: CGPoint(x: 0, y: frame.height - 1.5), size: CGSize(width: frame.width, height: 1.5))
|
21
|
+
addBottomBorderWithColor(color: UIColor.lightGray, width: 1.5)
|
22
|
+
}
|
23
|
+
|
24
|
+
required init?(coder aDecoder: NSCoder) {
|
25
|
+
|
26
|
+
super.init(coder: aDecoder)
|
27
|
+
self.border = UIView()
|
28
|
+
self.originalBorderFrame = CGRect(origin: CGPoint(x: 0, y: frame.height - 1.5), size: CGSize(width: frame.width, height: 1.5))
|
29
|
+
self.addObserver(self, forKeyPath: "contentOffset", options: .new, context: nil)
|
30
|
+
addBottomBorderWithColor(color: UIColor.lightGray, width: 1.5)
|
31
|
+
}
|
32
|
+
|
33
|
+
deinit {
|
34
|
+
removeObserver(self, forKeyPath: "contentOffset")
|
35
|
+
}
|
36
|
+
|
37
|
+
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
|
38
|
+
if keyPath == "contentOffset" {
|
39
|
+
border.frame = originalBorderFrame.offsetBy(dx: 0, dy: contentOffset.y)
|
40
|
+
|
41
|
+
}
|
42
|
+
}
|
43
|
+
|
44
|
+
func addBottomBorderWithColor(color: UIColor, width: CGFloat) {
|
45
|
+
border.backgroundColor = color
|
46
|
+
|
47
|
+
border.frame = CGRect(origin: CGPoint(x: 0, y: frame.height+contentOffset.y-width), size: CGSize(width: self.frame.width, height: width))
|
48
|
+
originalBorderFrame = CGRect(origin: CGPoint(x: 0, y: frame.height-width), size: CGSize(width: self.frame.width, height: width))
|
49
|
+
textContainerInset.bottom = originalInsetBottom + width
|
50
|
+
self.textInputView.addSubview(border)
|
51
|
+
}
|
52
|
+
|
53
|
+
func changeBorderColor(newColor: UIColor) {
|
54
|
+
border.removeFromSuperview()
|
55
|
+
|
56
|
+
addBottomBorderWithColor(color: newColor, width: 1.5)
|
57
|
+
//border.backgroundColor = newColor
|
58
|
+
self.originalBorderFrame = CGRect(origin: CGPoint(x: 0, y: frame.height - 1.0), size: CGSize(width: frame.width, height: 1.0))
|
59
|
+
// self.textInputView.addSubview(border)
|
60
|
+
}
|
61
|
+
}
|
@@ -0,0 +1,55 @@
|
|
1
|
+
//
|
2
|
+
// UITextFieldExtension.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
|
+
class UnderlinedWithIconTextField: UITextField {
|
12
|
+
|
13
|
+
var border = CALayer()
|
14
|
+
|
15
|
+
let padding = UIEdgeInsets(top: 0, left: 40, bottom: 0, right: 0)
|
16
|
+
|
17
|
+
func underlined(color: UIColor, width: CGFloat){
|
18
|
+
|
19
|
+
let newBorder = CALayer()
|
20
|
+
if let contains = self.layer.sublayers?.contains(border) {
|
21
|
+
if contains {
|
22
|
+
self.layer.replaceSublayer(border, with: newBorder)
|
23
|
+
}
|
24
|
+
}
|
25
|
+
|
26
|
+
newBorder.borderColor = color.cgColor
|
27
|
+
// TODO: check isnt trailling same width
|
28
|
+
newBorder.frame = CGRect(x: 0, y: self.frame.size.height - width, width: self.frame.size.width , height: width)
|
29
|
+
newBorder.borderWidth = width
|
30
|
+
self.layer.addSublayer(newBorder)
|
31
|
+
border = newBorder
|
32
|
+
self.layer.masksToBounds = true
|
33
|
+
}
|
34
|
+
|
35
|
+
func addLeftIcon(_ named: String) {
|
36
|
+
let image = UIImage(named: named)
|
37
|
+
let imageView = UIImageView()
|
38
|
+
|
39
|
+
var iconOriginalWidth = image!.size.width
|
40
|
+
if iconOriginalWidth > 15 {
|
41
|
+
iconOriginalWidth = 15
|
42
|
+
}
|
43
|
+
imageView.frame = CGRect(x: 0, y: 0, width: iconOriginalWidth + 30, height: image!.size.height)
|
44
|
+
imageView.image = image
|
45
|
+
imageView.contentMode = .scaleAspectFit
|
46
|
+
|
47
|
+
let leftView = UIView.init(frame: CGRect(x: 0, y: 0, width: iconOriginalWidth+30, height: image!.size.height))
|
48
|
+
leftView.addSubview(imageView)
|
49
|
+
imageView.bounds = imageView.frame.insetBy(dx: 15.0, dy: 0.0);
|
50
|
+
|
51
|
+
self.leftView = leftView
|
52
|
+
self.leftViewMode = UITextFieldViewMode.always
|
53
|
+
|
54
|
+
}
|
55
|
+
}
|
@@ -3,7 +3,7 @@
|
|
3
3
|
// MVCGEN
|
4
4
|
//
|
5
5
|
// Created by Daniel Martinez on 23/7/18.
|
6
|
-
// Copyright © 2018
|
6
|
+
// Copyright © 2018 Houlak. All rights reserved.
|
7
7
|
//
|
8
8
|
|
9
9
|
import Alamofire
|
@@ -23,7 +23,7 @@ class APIHelper {
|
|
23
23
|
lazy var errorBanner = NotificationBanner(title: "", subtitle: "", style: .danger)
|
24
24
|
|
25
25
|
func getHeaders() -> [String : String]? {
|
26
|
-
if let userId = UserDefaults.standard.value(forKey:
|
26
|
+
if let userId = UserDefaults.standard.value(forKey: UserDefaultsConstants.savedUserKey) as? String, let token = UserDefaults.standard.value(forKey: UserDefaultsConstants.userAuthTokenKey) as? String {
|
27
27
|
// Token stored in UserDefaults.
|
28
28
|
var userAuthB64 = "Basic "
|
29
29
|
let userAuth = "\(userId):\(token)"
|
@@ -63,8 +63,8 @@ class APIHelper {
|
|
63
63
|
case 300..<400:
|
64
64
|
// Bad auth error
|
65
65
|
print("error is \(error)")
|
66
|
-
|
67
|
-
|
66
|
+
let appDelegate: AppDelegate = UIApplication.shared.delegate as! AppDelegate
|
67
|
+
appDelegate.logout()
|
68
68
|
case 801:
|
69
69
|
break
|
70
70
|
default:
|
@@ -3,7 +3,7 @@
|
|
3
3
|
// MVCGEN
|
4
4
|
//
|
5
5
|
// Created by Daniel Martinez on 23/7/18.
|
6
|
-
// Copyright © 2018
|
6
|
+
// Copyright © 2018 Houlak. All rights reserved.
|
7
7
|
//
|
8
8
|
|
9
9
|
import Alamofire
|
@@ -43,13 +43,14 @@ class APIManager {
|
|
43
43
|
break
|
44
44
|
case false:
|
45
45
|
let errorCode = responseValue.errorCode
|
46
|
-
APIHelper.sharedInstance.
|
46
|
+
APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
|
47
|
+
APIHelper.sharedInstance.wsResponse(onError: errorCode)
|
47
48
|
completion(.failure)
|
48
49
|
break
|
49
50
|
}
|
50
51
|
}
|
51
52
|
case .failure(_):
|
52
|
-
APIHelper.sharedInstance.showErrorMessage(with: errorMsg, and: "")
|
53
|
+
APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
|
53
54
|
completion(.failure)
|
54
55
|
break
|
55
56
|
}
|
@@ -87,8 +88,8 @@ class APIManager {
|
|
87
88
|
// break
|
88
89
|
// case false:
|
89
90
|
// let errorCode = responseValue.errorCode
|
90
|
-
// APIHelper.sharedInstance.
|
91
|
-
//
|
91
|
+
// APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
|
92
|
+
// APIHelper.sharedInstance.wsResponse(onError: errorCode)
|
92
93
|
// break
|
93
94
|
// }
|
94
95
|
// }
|
@@ -96,7 +97,7 @@ class APIManager {
|
|
96
97
|
|
97
98
|
// }
|
98
99
|
// case .failure(_):
|
99
|
-
// APIHelper.sharedInstance.showErrorMessage(with: errorMsg, and: "")
|
100
|
+
// APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
|
100
101
|
// completion(.failure)
|
101
102
|
// break
|
102
103
|
// }
|
@@ -124,13 +125,14 @@ class APIManager {
|
|
124
125
|
break
|
125
126
|
case false:
|
126
127
|
let errorCode = responseValue.errorCode
|
127
|
-
APIHelper.sharedInstance.
|
128
|
+
APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
|
129
|
+
APIHelper.sharedInstance.wsResponse(onError: errorCode)
|
128
130
|
completion(.failure)
|
129
131
|
break
|
130
132
|
}
|
131
133
|
}
|
132
134
|
case .failure(_):
|
133
|
-
APIHelper.sharedInstance.showErrorMessage(with: errorMsg, and: "")
|
135
|
+
APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
|
134
136
|
completion(.failure)
|
135
137
|
break
|
136
138
|
}
|
@@ -150,13 +152,14 @@ class APIManager {
|
|
150
152
|
break
|
151
153
|
case false:
|
152
154
|
let errorCode = baseResponse.errorCode
|
153
|
-
APIHelper.sharedInstance.
|
155
|
+
APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
|
156
|
+
APIHelper.sharedInstance.wsResponse(onError: errorCode)
|
154
157
|
completion(.failure)
|
155
158
|
break
|
156
159
|
}
|
157
160
|
}
|
158
161
|
case .failure(_):
|
159
|
-
APIHelper.sharedInstance.showErrorMessage(with: errorMsg, and: "")
|
162
|
+
APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
|
160
163
|
completion(.failure)
|
161
164
|
break
|
162
165
|
}
|
@@ -176,13 +179,14 @@ class APIManager {
|
|
176
179
|
break
|
177
180
|
case false:
|
178
181
|
let errorCode = baseResponse.errorCode
|
179
|
-
APIHelper.sharedInstance.
|
182
|
+
APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
|
183
|
+
APIHelper.sharedInstance.wsResponse(onError: errorCode)
|
180
184
|
completion(.failure,nil)
|
181
185
|
break
|
182
186
|
}
|
183
187
|
}
|
184
188
|
case .failure(_):
|
185
|
-
APIHelper.sharedInstance.showErrorMessage(with: errorMsg,
|
189
|
+
APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
|
186
190
|
completion(.failure,nil)
|
187
191
|
break
|
188
192
|
}
|
@@ -202,16 +206,79 @@ class APIManager {
|
|
202
206
|
break
|
203
207
|
case false:
|
204
208
|
let errorCode = baseResponse.errorCode
|
205
|
-
APIHelper.sharedInstance.
|
209
|
+
APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
|
210
|
+
APIHelper.sharedInstance.wsResponse(onError: errorCode)
|
206
211
|
completion(.failure)
|
207
212
|
break
|
208
213
|
}
|
209
214
|
}
|
210
215
|
case .failure(_):
|
211
|
-
APIHelper.sharedInstance.showErrorMessage(with:
|
216
|
+
APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
|
212
217
|
completion(.failure)
|
213
218
|
break
|
214
219
|
}
|
215
220
|
}
|
216
221
|
}
|
222
|
+
|
223
|
+
// MARK: Notifications
|
224
|
+
|
225
|
+
func getNotifications(completion: @escaping(VoidResult, [Notif]) -> Void){
|
226
|
+
Alamofire.request(APIHelper.sharedInstance.servicesURL + Endpoints.getNotifications, method: .get, parameters: nil,
|
227
|
+
encoding: JSONEncoding.default,
|
228
|
+
headers: APIHelper.sharedInstance.getHeaders()).responseObject { (response: DataResponse<NotificationResponse>) in
|
229
|
+
switch response.result {
|
230
|
+
case .success(_):
|
231
|
+
|
232
|
+
if let notificationResponse = response.result.value {
|
233
|
+
switch notificationResponse.result {
|
234
|
+
case true:
|
235
|
+
completion(.success, notificationResponse.data ?? [])
|
236
|
+
case false:
|
237
|
+
let errorCode = notificationResponse.errorCode
|
238
|
+
APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
|
239
|
+
APIHelper.sharedInstance.wsResponse(onError: errorCode)
|
240
|
+
completion(.failure, [])
|
241
|
+
}
|
242
|
+
}
|
243
|
+
break
|
244
|
+
case .failure(_):
|
245
|
+
APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
|
246
|
+
completion(.failure, [])
|
247
|
+
break
|
248
|
+
}
|
249
|
+
}
|
250
|
+
}
|
251
|
+
|
252
|
+
func readNotifications(completion: @escaping(VoidResult) -> Void){
|
253
|
+
|
254
|
+
var parms: [String : Any] = [:]
|
255
|
+
|
256
|
+
// TODO check utc
|
257
|
+
parms["date"] = Date().string(custom: "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
|
258
|
+
|
259
|
+
Alamofire.request(APIHelper.sharedInstance.servicesURL + Endpoints.readNotifications, method: .post, parameters: parms,
|
260
|
+
encoding: JSONEncoding.default,
|
261
|
+
headers: APIHelper.sharedInstance.getHeaders()).responseObject { (response: DataResponse<BaseResponse>) in
|
262
|
+
switch response.result {
|
263
|
+
case .success(_):
|
264
|
+
|
265
|
+
if let baseResponse = response.result.value {
|
266
|
+
switch baseResponse.result {
|
267
|
+
case true:
|
268
|
+
completion(.success)
|
269
|
+
case false:
|
270
|
+
let errorCode = baseResponse.errorCode
|
271
|
+
APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
|
272
|
+
APIHelper.sharedInstance.wsResponse(onError: errorCode)
|
273
|
+
completion(.failure)
|
274
|
+
}
|
275
|
+
}
|
276
|
+
break
|
277
|
+
case .failure(_):
|
278
|
+
APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
|
279
|
+
completion(.failure)
|
280
|
+
break
|
281
|
+
}
|
282
|
+
}
|
283
|
+
}
|
217
284
|
}
|