├── .gitignore ├── CleanTalk ├── CleanTalk.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcuserdata │ │ │ └── olegsehelin.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ │ └── olegsehelin.xcuserdatad │ │ └── xcschemes │ │ ├── CleanTalk.xcscheme │ │ └── xcschememanagement.plist ├── CleanTalk │ ├── CleanTalk.entitlements │ └── CleanTalk │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ ├── 80*80-1.png │ │ │ ├── 80*80.png │ │ │ ├── Contents.json │ │ │ ├── Icon-60@2x-1.png │ │ │ ├── Icon-60@2x.png │ │ │ ├── Icon-76.png │ │ │ ├── Icon-76@2x.png │ │ │ ├── cleantalk-logo-no-alpha.png │ │ │ ├── defaultIcon@2x copy-1.png │ │ │ ├── defaultIcon@2x copy-2.png │ │ │ ├── defaultIcon@2x copy-3.png │ │ │ ├── defaultIcon@2x copy-4.png │ │ │ ├── defaultIcon@2x copy-5.png │ │ │ ├── defaultIcon@2x copy-6.png │ │ │ ├── defaultIcon@2x copy.png │ │ │ ├── defaultIcon@2x-1.png │ │ │ ├── defaultIcon@2x-2.png │ │ │ ├── defaultIcon@2x-3.png │ │ │ └── defaultIcon@2x.png │ │ ├── Base.lproj │ │ └── LaunchScreen.storyboard │ │ ├── DataClasses │ │ ├── Constants.swift │ │ ├── DispatcherCore │ │ │ ├── AbstractDispatcher.swift │ │ │ ├── AbstractRequest.swift │ │ │ ├── AbstractResponse.swift │ │ │ ├── AlamofireDispatcher.swift │ │ │ └── Enums.swift │ │ ├── Models │ │ │ ├── ChangeStatusModel.swift │ │ │ ├── DetailStatisticModel.swift │ │ │ ├── LoginModel.swift │ │ │ ├── ServiceModel.swift │ │ │ └── StatisticModel.swift │ │ ├── ModelsManager.swift │ │ └── Requests │ │ │ ├── ChangeStatusRequest.swift │ │ │ ├── DetailStatsRequest.swift │ │ │ ├── LoginRequest.swift │ │ │ └── MainStatsRequest.swift │ │ ├── Info.plist │ │ ├── Resources │ │ ├── defaultIcon@2x.png │ │ └── logo_iphone@2x.png │ │ ├── ViewControllers │ │ ├── CTDetailsViewController │ │ │ ├── CTDetailsCell │ │ │ │ ├── Base.lproj │ │ │ │ │ └── CTDetailsCell.xib │ │ │ │ ├── CTDetailsCell.swift │ │ │ │ ├── en.lproj │ │ │ │ │ └── CTDetailsCell.strings │ │ │ │ └── ru.lproj │ │ │ │ │ └── CTDetailsCell.strings │ │ │ ├── CTDetailsViewController.swift │ │ │ └── en.lproj │ │ │ │ └── CTDetailsViewController.xib │ │ ├── CTLoginViewController │ │ │ ├── Base.lproj │ │ │ │ ├── CTLoginViewController~ipad.xib │ │ │ │ └── CTLoginViewController~iphone.xib │ │ │ ├── CTLoginViewController.swift │ │ │ ├── en.lproj │ │ │ │ ├── CTLoginViewController~ipad.strings │ │ │ │ └── CTLoginViewController~iphone.strings │ │ │ └── ru.lproj │ │ │ │ ├── CTLoginViewController~ipad.strings │ │ │ │ └── CTLoginViewController~iphone.strings │ │ ├── CTSFWViewController │ │ │ ├── CTSFWCell │ │ │ │ ├── Base.lproj │ │ │ │ │ └── CTSFWCell.xib │ │ │ │ ├── CTSFWCell.swift │ │ │ │ ├── en.lproj │ │ │ │ │ └── CTSFWCell.strings │ │ │ │ └── ru.lproj │ │ │ │ │ └── CTSFWCell.strings │ │ │ ├── CTSFWViewController.swift │ │ │ └── CTSFWViewController.xib │ │ └── CTStatisticViewController │ │ │ ├── Base.lproj │ │ │ └── CTStatisticViewController.xib │ │ │ ├── CTStatisticCell │ │ │ ├── Base.lproj │ │ │ │ └── CTStatisticCell.xib │ │ │ ├── CTStatisticCell.swift │ │ │ ├── en.lproj │ │ │ │ └── CTStatisticCell.strings │ │ │ └── ru.lproj │ │ │ │ └── CTStatisticCell.strings │ │ │ ├── CTStatisticViewController.swift │ │ │ ├── en.lproj │ │ │ └── CTStatisticViewController.strings │ │ │ └── ru.lproj │ │ │ └── CTStatisticViewController.strings │ │ ├── en.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Localizable.strings │ │ └── ru.lproj │ │ ├── LaunchScreen.strings │ │ └── Localizable.strings ├── Podfile ├── Podfile.lock └── Pods │ ├── Alamofire │ ├── LICENSE │ ├── README.md │ └── Source │ │ ├── AFError.swift │ │ ├── Alamofire.swift │ │ ├── DispatchQueue+Alamofire.swift │ │ ├── MultipartFormData.swift │ │ ├── NetworkReachabilityManager.swift │ │ ├── Notifications.swift │ │ ├── ParameterEncoding.swift │ │ ├── Request.swift │ │ ├── Response.swift │ │ ├── ResponseSerialization.swift │ │ ├── Result.swift │ │ ├── ServerTrustPolicy.swift │ │ ├── SessionDelegate.swift │ │ ├── SessionManager.swift │ │ ├── TaskDelegate.swift │ │ ├── Timeline.swift │ │ └── Validation.swift │ ├── AlamofireObjectMapper │ ├── AlamofireObjectMapper │ │ └── AlamofireObjectMapper.swift │ ├── LICENSE │ └── README.md │ ├── Manifest.lock │ ├── ObjectMapper │ ├── LICENSE │ ├── README-CN.md │ └── Sources │ │ ├── CustomDateFormatTransform.swift │ │ ├── DataTransform.swift │ │ ├── DateFormatterTransform.swift │ │ ├── DateTransform.swift │ │ ├── DictionaryTransform.swift │ │ ├── EnumOperators.swift │ │ ├── EnumTransform.swift │ │ ├── FromJSON.swift │ │ ├── HexColorTransform.swift │ │ ├── ISO8601DateTransform.swift │ │ ├── ImmutableMappable.swift │ │ ├── Map.swift │ │ ├── MapError.swift │ │ ├── Mappable.swift │ │ ├── Mapper.swift │ │ ├── NSDecimalNumberTransform.swift │ │ ├── Operators.swift │ │ ├── ToJSON.swift │ │ ├── TransformOf.swift │ │ ├── TransformOperators.swift │ │ ├── TransformType.swift │ │ └── URLTransform.swift │ ├── Pods.xcodeproj │ └── project.pbxproj │ ├── SDWebImage │ ├── LICENSE │ ├── README.md │ └── SDWebImage │ │ ├── NSData+ImageContentType.h │ │ ├── NSData+ImageContentType.m │ │ ├── NSImage+WebCache.h │ │ ├── NSImage+WebCache.m │ │ ├── SDImageCache.h │ │ ├── SDImageCache.m │ │ ├── SDImageCacheConfig.h │ │ ├── SDImageCacheConfig.m │ │ ├── SDWebImageCompat.h │ │ ├── SDWebImageCompat.m │ │ ├── SDWebImageDecoder.h │ │ ├── SDWebImageDecoder.m │ │ ├── SDWebImageDownloader.h │ │ ├── SDWebImageDownloader.m │ │ ├── SDWebImageDownloaderOperation.h │ │ ├── SDWebImageDownloaderOperation.m │ │ ├── SDWebImageManager.h │ │ ├── SDWebImageManager.m │ │ ├── SDWebImageOperation.h │ │ ├── SDWebImagePrefetcher.h │ │ ├── SDWebImagePrefetcher.m │ │ ├── UIButton+WebCache.h │ │ ├── UIButton+WebCache.m │ │ ├── UIImage+GIF.h │ │ ├── UIImage+GIF.m │ │ ├── UIImage+MultiFormat.h │ │ ├── UIImage+MultiFormat.m │ │ ├── UIImageView+HighlightedWebCache.h │ │ ├── UIImageView+HighlightedWebCache.m │ │ ├── UIImageView+WebCache.h │ │ ├── UIImageView+WebCache.m │ │ ├── UIView+WebCache.h │ │ ├── UIView+WebCache.m │ │ ├── UIView+WebCacheOperation.h │ │ └── UIView+WebCacheOperation.m │ ├── SnapKit │ ├── LICENSE │ ├── README.md │ └── Source │ │ ├── Constraint.swift │ │ ├── ConstraintAttributes.swift │ │ ├── ConstraintConfig.swift │ │ ├── ConstraintConstantTarget.swift │ │ ├── ConstraintDSL.swift │ │ ├── ConstraintDescription.swift │ │ ├── ConstraintInsetTarget.swift │ │ ├── ConstraintInsets.swift │ │ ├── ConstraintItem.swift │ │ ├── ConstraintLayoutGuide+Extensions.swift │ │ ├── ConstraintLayoutGuide.swift │ │ ├── ConstraintLayoutGuideDSL.swift │ │ ├── ConstraintLayoutSupport.swift │ │ ├── ConstraintLayoutSupportDSL.swift │ │ ├── ConstraintMaker.swift │ │ ├── ConstraintMakerEditable.swift │ │ ├── ConstraintMakerExtendable.swift │ │ ├── ConstraintMakerFinalizable.swift │ │ ├── ConstraintMakerPriortizable.swift │ │ ├── ConstraintMakerRelatable.swift │ │ ├── ConstraintMultiplierTarget.swift │ │ ├── ConstraintOffsetTarget.swift │ │ ├── ConstraintPriorityTarget.swift │ │ ├── ConstraintRelatableTarget.swift │ │ ├── ConstraintRelation.swift │ │ ├── ConstraintView+Extensions.swift │ │ ├── ConstraintView.swift │ │ ├── ConstraintViewDSL.swift │ │ ├── Debugging.swift │ │ ├── LayoutConstraint.swift │ │ ├── LayoutConstraintItem.swift │ │ └── UILayoutSupport+Extensions.swift │ └── Target Support Files │ ├── Alamofire │ ├── Alamofire-dummy.m │ ├── Alamofire-prefix.pch │ ├── Alamofire-umbrella.h │ ├── Alamofire.modulemap │ ├── Alamofire.xcconfig │ └── Info.plist │ ├── AlamofireObjectMapper │ ├── AlamofireObjectMapper-dummy.m │ ├── AlamofireObjectMapper-prefix.pch │ ├── AlamofireObjectMapper-umbrella.h │ ├── AlamofireObjectMapper.modulemap │ ├── AlamofireObjectMapper.xcconfig │ └── Info.plist │ ├── ObjectMapper │ ├── Info.plist │ ├── ObjectMapper-dummy.m │ ├── ObjectMapper-prefix.pch │ ├── ObjectMapper-umbrella.h │ ├── ObjectMapper.modulemap │ └── ObjectMapper.xcconfig │ ├── Pods-CleanTalk │ ├── Info.plist │ ├── Pods-CleanTalk-acknowledgements.markdown │ ├── Pods-CleanTalk-acknowledgements.plist │ ├── Pods-CleanTalk-dummy.m │ ├── Pods-CleanTalk-frameworks.sh │ ├── Pods-CleanTalk-resources.sh │ ├── Pods-CleanTalk-umbrella.h │ ├── Pods-CleanTalk.debug.xcconfig │ ├── Pods-CleanTalk.modulemap │ └── Pods-CleanTalk.release.xcconfig │ ├── SDWebImage │ ├── Info.plist │ ├── SDWebImage-dummy.m │ ├── SDWebImage-prefix.pch │ ├── SDWebImage-umbrella.h │ ├── SDWebImage.modulemap │ └── SDWebImage.xcconfig │ └── SnapKit │ ├── Info.plist │ ├── SnapKit-dummy.m │ ├── SnapKit-prefix.pch │ ├── SnapKit-umbrella.h │ ├── SnapKit.modulemap │ └── SnapKit.xcconfig └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | Expressions.xcexplist 2 | *.xcuserdata 3 | *.xcuserstate 4 | *.xcscheme 5 | *.DS_Store 6 | 7 | # Xcode 8 | build/* 9 | *.pbxuser 10 | !default.pbxuser 11 | *.mode1v3 12 | !default.mode1v3 13 | *.mode2v3 14 | !default.mode2v3 15 | *.perspectivev3 16 | !default.perspectivev3 17 | *.xcworkspace 18 | !default.xcworkspace 19 | xcuserdata 20 | profile 21 | *.moved-aside 22 | 23 | # Pods 24 | Pods/* -------------------------------------------------------------------------------- /CleanTalk/CleanTalk.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk.xcodeproj/project.xcworkspace/xcuserdata/olegsehelin.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CleanTalk/ios-app/de096735b399cfaafbb5d674092a8eeb766fc2b7/CleanTalk/CleanTalk.xcodeproj/project.xcworkspace/xcuserdata/olegsehelin.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /CleanTalk/CleanTalk.xcodeproj/xcuserdata/olegsehelin.xcuserdatad/xcschemes/CleanTalk.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk.xcodeproj/xcuserdata/olegsehelin.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | CleanTalk.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 8A36C6A31E40B63D004D92CA 16 | 17 | primary 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | aps-environment 6 | development 7 | 8 | 9 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/80*80-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CleanTalk/ios-app/de096735b399cfaafbb5d674092a8eeb766fc2b7/CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/80*80-1.png -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/80*80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CleanTalk/ios-app/de096735b399cfaafbb5d674092a8eeb766fc2b7/CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/80*80.png -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "defaultIcon@2x.png", 5 | "idiom" : "iphone", 6 | "scale" : "2x", 7 | "size" : "20x20" 8 | }, 9 | { 10 | "filename" : "defaultIcon@2x copy.png", 11 | "idiom" : "iphone", 12 | "scale" : "3x", 13 | "size" : "20x20" 14 | }, 15 | { 16 | "filename" : "defaultIcon@2x copy-1.png", 17 | "idiom" : "iphone", 18 | "scale" : "2x", 19 | "size" : "29x29" 20 | }, 21 | { 22 | "filename" : "defaultIcon@2x copy-4.png", 23 | "idiom" : "iphone", 24 | "scale" : "3x", 25 | "size" : "29x29" 26 | }, 27 | { 28 | "filename" : "80*80-1.png", 29 | "idiom" : "iphone", 30 | "scale" : "2x", 31 | "size" : "40x40" 32 | }, 33 | { 34 | "filename" : "Icon-60@2x-1.png", 35 | "idiom" : "iphone", 36 | "scale" : "3x", 37 | "size" : "40x40" 38 | }, 39 | { 40 | "filename" : "Icon-60@2x.png", 41 | "idiom" : "iphone", 42 | "scale" : "2x", 43 | "size" : "60x60" 44 | }, 45 | { 46 | "filename" : "defaultIcon@2x copy-5.png", 47 | "idiom" : "iphone", 48 | "scale" : "3x", 49 | "size" : "60x60" 50 | }, 51 | { 52 | "filename" : "defaultIcon@2x copy-3.png", 53 | "idiom" : "ipad", 54 | "scale" : "1x", 55 | "size" : "20x20" 56 | }, 57 | { 58 | "filename" : "defaultIcon@2x-2.png", 59 | "idiom" : "ipad", 60 | "scale" : "2x", 61 | "size" : "20x20" 62 | }, 63 | { 64 | "filename" : "defaultIcon@2x copy-6.png", 65 | "idiom" : "ipad", 66 | "scale" : "1x", 67 | "size" : "29x29" 68 | }, 69 | { 70 | "filename" : "defaultIcon@2x copy-2.png", 71 | "idiom" : "ipad", 72 | "scale" : "2x", 73 | "size" : "29x29" 74 | }, 75 | { 76 | "filename" : "defaultIcon@2x-1.png", 77 | "idiom" : "ipad", 78 | "scale" : "1x", 79 | "size" : "40x40" 80 | }, 81 | { 82 | "filename" : "80*80.png", 83 | "idiom" : "ipad", 84 | "scale" : "2x", 85 | "size" : "40x40" 86 | }, 87 | { 88 | "filename" : "Icon-76.png", 89 | "idiom" : "ipad", 90 | "scale" : "1x", 91 | "size" : "76x76" 92 | }, 93 | { 94 | "filename" : "Icon-76@2x.png", 95 | "idiom" : "ipad", 96 | "scale" : "2x", 97 | "size" : "76x76" 98 | }, 99 | { 100 | "filename" : "defaultIcon@2x-3.png", 101 | "idiom" : "ipad", 102 | "scale" : "2x", 103 | "size" : "83.5x83.5" 104 | }, 105 | { 106 | "filename" : "cleantalk-logo-no-alpha.png", 107 | "idiom" : "ios-marketing", 108 | "scale" : "1x", 109 | "size" : "1024x1024" 110 | } 111 | ], 112 | "info" : { 113 | "author" : "xcode", 114 | "version" : 1 115 | } 116 | } 117 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/Icon-60@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CleanTalk/ios-app/de096735b399cfaafbb5d674092a8eeb766fc2b7/CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/Icon-60@2x-1.png -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CleanTalk/ios-app/de096735b399cfaafbb5d674092a8eeb766fc2b7/CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/Icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CleanTalk/ios-app/de096735b399cfaafbb5d674092a8eeb766fc2b7/CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/Icon-76.png -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CleanTalk/ios-app/de096735b399cfaafbb5d674092a8eeb766fc2b7/CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/cleantalk-logo-no-alpha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CleanTalk/ios-app/de096735b399cfaafbb5d674092a8eeb766fc2b7/CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/cleantalk-logo-no-alpha.png -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/defaultIcon@2x copy-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CleanTalk/ios-app/de096735b399cfaafbb5d674092a8eeb766fc2b7/CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/defaultIcon@2x copy-1.png -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/defaultIcon@2x copy-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CleanTalk/ios-app/de096735b399cfaafbb5d674092a8eeb766fc2b7/CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/defaultIcon@2x copy-2.png -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/defaultIcon@2x copy-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CleanTalk/ios-app/de096735b399cfaafbb5d674092a8eeb766fc2b7/CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/defaultIcon@2x copy-3.png -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/defaultIcon@2x copy-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CleanTalk/ios-app/de096735b399cfaafbb5d674092a8eeb766fc2b7/CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/defaultIcon@2x copy-4.png -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/defaultIcon@2x copy-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CleanTalk/ios-app/de096735b399cfaafbb5d674092a8eeb766fc2b7/CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/defaultIcon@2x copy-5.png -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/defaultIcon@2x copy-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CleanTalk/ios-app/de096735b399cfaafbb5d674092a8eeb766fc2b7/CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/defaultIcon@2x copy-6.png -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/defaultIcon@2x copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CleanTalk/ios-app/de096735b399cfaafbb5d674092a8eeb766fc2b7/CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/defaultIcon@2x copy.png -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/defaultIcon@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CleanTalk/ios-app/de096735b399cfaafbb5d674092a8eeb766fc2b7/CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/defaultIcon@2x-1.png -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/defaultIcon@2x-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CleanTalk/ios-app/de096735b399cfaafbb5d674092a8eeb766fc2b7/CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/defaultIcon@2x-2.png -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/defaultIcon@2x-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CleanTalk/ios-app/de096735b399cfaafbb5d674092a8eeb766fc2b7/CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/defaultIcon@2x-3.png -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/defaultIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CleanTalk/ios-app/de096735b399cfaafbb5d674092a8eeb766fc2b7/CleanTalk/CleanTalk/CleanTalk/Assets.xcassets/AppIcon.appiconset/defaultIcon@2x.png -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/DataClasses/Constants.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Constants.swift 3 | // CleanTalk 4 | // 5 | // Created by Oleg Sehelin on 1/31/17. 6 | // Copyright © 2017 Oleg Sehelin. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | public enum StatisticType : Int { 12 | case enabledSpamToday = 100 13 | case enabledSpamYesterday 14 | case enabledSpamWeek 15 | case disabledSpamToday 16 | case disabledSpamYesterday 17 | case disabledSpamWeek 18 | case enabledFirewallToday 19 | case enabledFirewallYesterday 20 | case enabledFirewallWeek 21 | } 22 | 23 | struct Constants { 24 | struct URL { 25 | static let apiURL = "https://cleantalk.org/" 26 | static let registrationURL = "https://cleantalk.org/register" 27 | static let passwordURL = "https://cleantalk.org/my/reset_password" 28 | } 29 | 30 | struct Defines { 31 | static let alreadyLogin = "user_login" 32 | static let sessionId = "app_session_id" 33 | static let timeInterval = "timestamp" 34 | static let deviceToken = "device_token" 35 | static let lastLogin = "last_login" 36 | static let success = "success" 37 | static let requests = "requests" 38 | } 39 | 40 | struct Service { 41 | static let serviceName = "servicename" 42 | static let serviceIcon = "favicon_url" 43 | static let serviceId = "service_id" 44 | static let serviceStatToday = "today" 45 | static let serviceStatYesterday = "yesterday" 46 | static let serviceStatWeek = "week" 47 | static let serviceKey = "services" 48 | static let serviceAuthKey = "auth_key" 49 | } 50 | 51 | struct Statistic { 52 | static let statSpam = "spam" 53 | static let statAllow = "allow" 54 | static let statSfw = "sfw" 55 | } 56 | 57 | struct DetailStatistic { 58 | static let detailStatDate = "datetime" 59 | static let detailStatApproved = "approved" 60 | static let detailStatEmail = "sender_email" 61 | static let detailStatUser = "sender_nickname" 62 | static let detailStatType = "type" 63 | static let detailStatMessage = "message" 64 | static let detailStatRequestId = "request_id" 65 | static let detailStatAllow = "allow" 66 | } 67 | 68 | struct Update { 69 | static let updateComment = "comment" 70 | static let updateReceived = "received" 71 | } 72 | 73 | struct SFW { 74 | static let sfwIP = "ip" 75 | static let sfwCountry = "country" 76 | static let sfwPassed = "allow" 77 | static let sfwTotal = "total" 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/DataClasses/DispatcherCore/AbstractDispatcher.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AbstractDispatcher.swift 3 | // HelpAround 4 | // 5 | // Created by Oleg Sehelin on 2/2/17. 6 | // Copyright © 2017 Oleg Sehelin. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import ObjectMapper 11 | 12 | public class AbstractDispatcher { 13 | 14 | required public init() { 15 | 16 | } 17 | 18 | final public func run(request: AbstractRequest, keyPath: String?, completion: @escaping (Response) -> Void) { 19 | runRequest(request: request, keyPath: keyPath) { response in 20 | switch response { 21 | case .success(let data): 22 | if let dictionary = data as? [String : AnyObject] { 23 | if let responseObject = request.response(object: dictionary) { 24 | completion(Response.success(responseObject)) 25 | return 26 | } 27 | } 28 | let error: Error = DispatcherDataError.parseError(data) 29 | completion(Response.error(error)) 30 | case .error(let error): 31 | completion(Response.error(error)) 32 | } 33 | } 34 | } 35 | 36 | final public func run(request: AbstractRequest, keyPath: String?, completion: @escaping (Response<[T]>) -> Void) { 37 | runRequest(request: request, keyPath: keyPath) { response in 38 | switch response { 39 | case .success(let data): 40 | var error: Error 41 | if keyPath == nil { 42 | if let array = data as? [[String : Any]] { 43 | if let responseObject = request.response(object: array) { 44 | completion(Response.success(responseObject)) 45 | return 46 | } 47 | } 48 | error = DispatcherDataError.parseError(data) 49 | } else if let dictionary = data as? [String : Any], let array = dictionary[keyPath!] as? [[String : Any]] { 50 | if let responseObject = request.response(object: array) { 51 | completion(Response.success(responseObject)) 52 | return 53 | } 54 | } 55 | error = DispatcherDataError.parseError(data) 56 | completion(Response.error(error)) 57 | case .error(let error): 58 | completion(Response.error(error)) 59 | } 60 | } 61 | 62 | } 63 | 64 | public func runRequest(request: AbstractRequest, keyPath: String?, completion: @escaping (Response) -> Void) { 65 | preconditionFailure("Override in subclass") 66 | } 67 | 68 | } 69 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/DataClasses/DispatcherCore/AbstractRequest.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AbstractRequest.swift 3 | // HelpAround 4 | // 5 | // Created by Oleg Sehelin on 2/2/17. 6 | // Copyright © 2017 Oleg Sehelin. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import ObjectMapper 11 | import Alamofire 12 | 13 | public class AbstractRequest { 14 | 15 | public typealias ResponseType = T 16 | public var serverURL : String 17 | public var encodingType: ParameterEncoding = URLEncoding.httpBody 18 | 19 | public init () { 20 | serverURL = Constants.URL.apiURL 21 | } 22 | 23 | func urlString() -> String { 24 | preconditionFailure("Override this in subclasses") 25 | } 26 | 27 | func urlParameters() -> [String : String]? { 28 | return nil 29 | } 30 | 31 | func parameters() -> [String : Any]? { 32 | return nil 33 | } 34 | 35 | public func fullUrlString() -> String { 36 | var fullUrlString : String = urlString() 37 | if let urlParameters = urlParameters() { 38 | var parametersArray : [String] = [String]() 39 | for (key, value) in urlParameters { 40 | parametersArray.append(key + "=" + value) 41 | } 42 | 43 | let parametersString = parametersArray.joined(separator: "&") 44 | 45 | fullUrlString = fullUrlString + "?" + parametersString 46 | } 47 | 48 | return fullUrlString 49 | } 50 | 51 | public func method() -> RequestMethod { 52 | preconditionFailure("Override this in subclasses") 53 | } 54 | 55 | public func headers() -> [String: String]? { 56 | return ["Content-Type" : "application/json", "Accept" : "application/json"] 57 | } 58 | 59 | 60 | public func response(object: [String : AnyObject]) -> ResponseType? { 61 | return Mapper().map(JSONObject: object) 62 | } 63 | 64 | public func response(object: [[String : Any]]) -> [ResponseType]? { 65 | return Mapper().mapArray(JSONArray: object) 66 | } 67 | 68 | } 69 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/DataClasses/DispatcherCore/AbstractResponse.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HARAbstractModel.swift 3 | // HelpAround 4 | // 5 | // Created by Oleg Sehelin on 2/2/17. 6 | // Copyright © 2017 Oleg Sehelin. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import ObjectMapper 11 | 12 | public class AbstractResponse: Mappable { 13 | 14 | public required init?(map: Map) { 15 | 16 | } 17 | 18 | public init() { 19 | 20 | } 21 | 22 | public func mapping(map: Map) { 23 | preconditionFailure("Override this in subclasses") 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/DataClasses/DispatcherCore/AlamofireDispatcher.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // RequestDispatcher 4 | // 5 | // Created by Oleg Sehelin on 2/2/17. 6 | // Copyright © 2017 Oleg Sehelin. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import ObjectMapper 11 | import Alamofire 12 | 13 | class AlamofireDispatcher: AbstractDispatcher { 14 | 15 | static let shared = AlamofireDispatcher() 16 | 17 | required public init() { 18 | super.init() 19 | } 20 | 21 | override func runRequest(request: AbstractRequest, keyPath: String?, completion: @escaping (Response) -> Void) { 22 | Alamofire.request(request.serverURL + request.fullUrlString(), method: HTTPMethod(rawValue: request.method().rawValue)!, parameters: request.parameters(), encoding: request.encodingType, headers: request.headers()).responseJSON { response in 23 | switch response.result { 24 | case .success(let data): 25 | completion(Response.success(data)) 26 | case .failure(let error): 27 | completion(Response.error(error)) 28 | } 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/DataClasses/DispatcherCore/Enums.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Enums.swift 3 | // RequestDispatcher 4 | // 5 | // Created by Oleg Sehelin on 2/2/17. 6 | // Copyright © 2017 Oleg Sehelin. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import Alamofire 11 | 12 | //MARK: HTTP methods 13 | public enum RequestMethod: String { 14 | case options = "OPTIONS" 15 | case get = "GET" 16 | case head = "HEAD" 17 | case post = "POST" 18 | case put = "PUT" 19 | case patch = "PATCH" 20 | case delete = "DELETE" 21 | case trace = "TRACE" 22 | case connect = "CONNECT" 23 | } 24 | 25 | //MARK: Errors 26 | public enum Response { 27 | case success(T) 28 | case error(Error) 29 | } 30 | 31 | public enum DispatcherDataError : Error { 32 | case parseError(Any) 33 | } 34 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/DataClasses/Models/ChangeStatusModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChangeStatusModel.swift 3 | // CleanTalk 4 | // 5 | // Created by Oleg Sehelin on 2/9/17. 6 | // Copyright © 2017 Oleg Sehelin. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import ObjectMapper 11 | 12 | class ChangeStatusModel: AbstractResponse { 13 | var comment: String? 14 | var received: NSNumber? 15 | 16 | public override func mapping(map: Map) { 17 | comment <- map[Constants.Update.updateComment] 18 | received <- map[Constants.Update.updateReceived] 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/DataClasses/Models/DetailStatisticModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DetailStatisticModel.swift 3 | // CleanTalk 4 | // 5 | // Created by Oleg Sehelin on 2/2/17. 6 | // Copyright © 2017 Oleg Sehelin. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import ObjectMapper 11 | 12 | class DetailStatisticModel: AbstractResponse { 13 | var date: String? 14 | var sender: String? 15 | var email: String? 16 | var type: String? 17 | var message: String? 18 | var approved: String = "2" 19 | var allow: String? 20 | var requestId: String? 21 | var sfwIp: String? 22 | var sfwCountry: String? 23 | var sfwPassed: String? 24 | var sfwTotal: String? 25 | 26 | public override func mapping(map: Map) { 27 | date <- map[Constants.DetailStatistic.detailStatDate] 28 | sender <- map[Constants.DetailStatistic.detailStatUser] 29 | email <- map[Constants.DetailStatistic.detailStatEmail] 30 | type <- map[Constants.DetailStatistic.detailStatType] 31 | message <- map[Constants.DetailStatistic.detailStatMessage] 32 | approved <- map[Constants.DetailStatistic.detailStatApproved] 33 | allow <- map[Constants.DetailStatistic.detailStatAllow] 34 | requestId <- map[Constants.DetailStatistic.detailStatRequestId] 35 | sfwIp <- map[Constants.SFW.sfwIP] 36 | sfwCountry <- map[Constants.SFW.sfwCountry] 37 | sfwPassed <- map[Constants.SFW.sfwPassed] 38 | sfwTotal <- map[Constants.SFW.sfwTotal] 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/DataClasses/Models/LoginModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LoginModel.swift 3 | // CleanTalk 4 | // 5 | // Created by Oleg Sehelin on 2/2/17. 6 | // Copyright © 2017 Oleg Sehelin. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import ObjectMapper 11 | 12 | class LoginModel: AbstractResponse { 13 | var success: Int? 14 | var sessionId: String? 15 | 16 | public override func mapping(map: Map) { 17 | success <- map[Constants.Defines.success] 18 | sessionId <- map[Constants.Defines.sessionId] 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/DataClasses/Models/ServiceModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StatisticModel.swift 3 | // CleanTalk 4 | // 5 | // Created by Oleg Sehelin on 2/2/17. 6 | // Copyright © 2017 Oleg Sehelin. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import ObjectMapper 11 | 12 | class ServiceModel: AbstractResponse { 13 | var siteName: String? 14 | var siteIcon: String? 15 | var detailStats: [DetailStatisticModel]? 16 | var serviceId: Int? 17 | var statsToday: StatisticModel? 18 | var statsYesterday: StatisticModel? 19 | var statsWeek: StatisticModel? 20 | var authKey: String = "" 21 | 22 | public override func mapping(map: Map) { 23 | siteName <- map[Constants.Service.serviceName] 24 | siteIcon <- map[Constants.Service.serviceIcon] 25 | serviceId <- (map[Constants.Service.serviceId], IntTransform()) 26 | statsToday <- map[Constants.Service.serviceStatToday] 27 | statsYesterday <- map[Constants.Service.serviceStatYesterday] 28 | statsWeek <- map[Constants.Service.serviceStatWeek] 29 | authKey <- map[Constants.Service.serviceAuthKey] 30 | } 31 | 32 | func checkIfNeedToShowSFWView() -> Bool { 33 | return self.statsToday?.sfw != nil || self.statsYesterday?.sfw != nil || self.statsWeek?.sfw != nil 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/DataClasses/Models/StatisticModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StatisticModel.swift 3 | // CleanTalk 4 | // 5 | // Created by Oleg Sehelin on 2/2/17. 6 | // Copyright © 2017 Oleg Sehelin. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import ObjectMapper 11 | 12 | public class IntTransform: TransformType { 13 | 14 | public typealias Object = Int 15 | public typealias JSON = Any? 16 | 17 | public init() {} 18 | 19 | public func transformFromJSON(_ value: Any?) -> Int? { 20 | 21 | var result: Int? 22 | 23 | guard let json = value else { 24 | return result 25 | } 26 | 27 | if json is Int { 28 | result = (json as! Int) 29 | } 30 | if json is String { 31 | result = Int(json as! String) 32 | } 33 | 34 | return result 35 | } 36 | 37 | public func transformToJSON(_ value: Int?) -> Any?? { 38 | 39 | guard let object = value else { 40 | return nil 41 | } 42 | 43 | return String(object) 44 | } 45 | } 46 | 47 | class StatisticModel: AbstractResponse { 48 | var spam: Int? 49 | var allow: Int? 50 | var sfw: Int? 51 | 52 | public override func mapping(map: Map) { 53 | spam <- (map[Constants.Statistic.statSpam], IntTransform()) 54 | allow <- (map[Constants.Statistic.statAllow], IntTransform()) 55 | sfw <- (map[Constants.Statistic.statSfw], IntTransform()) 56 | } 57 | 58 | } 59 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/DataClasses/ModelsManager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ModelsManager.swift 3 | // CleanTalk 4 | // 5 | // Created by Oleg Sehelin on 2/2/17. 6 | // Copyright © 2017 Oleg Sehelin. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ModelsManager: NSObject { 12 | static let shared = ModelsManager() 13 | 14 | public var loginModel: LoginModel? 15 | public var statisticModelsList: [ServiceModel]? 16 | 17 | func showAlertMessage(withError error:Error?) { 18 | let alert = UIAlertView(title: NSLocalizedString("ERROR", comment: ""), message: error?.localizedDescription ?? NSLocalizedString("ERROR_MESSAGE", comment: ""), delegate: self, cancelButtonTitle: "Ok") 19 | alert.show() 20 | } 21 | 22 | func getSessionId() -> String? { 23 | return self.loginModel?.sessionId 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/DataClasses/Requests/ChangeStatusRequest.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChangeStatusRequest.swift 3 | // CleanTalk 4 | // 5 | // Created by Oleg Sehelin on 2/9/17. 6 | // Copyright © 2017 Oleg Sehelin. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import Alamofire 11 | 12 | class ChangeStatusRequest: AbstractRequest { 13 | var authKey: String = "" 14 | var messageId: String = "" 15 | var status: Bool = false 16 | 17 | override init () { 18 | super.init() 19 | self.serverURL = "https://moderate.cleantalk.org/api2.0" 20 | self.encodingType = JSONEncoding.default 21 | } 22 | 23 | override func urlString() -> String { 24 | return "" 25 | } 26 | 27 | override func parameters() -> [String : Any]? { 28 | let parameters = [ 29 | "method_name": "send_feedback", 30 | "auth_key": authKey, 31 | "feedback" : messageId + (self.status == true ? "1" : "0") 32 | ] 33 | 34 | return parameters 35 | } 36 | 37 | public override func method() -> RequestMethod { 38 | return .post 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/DataClasses/Requests/DetailStatsRequest.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DetailStatsRequest.swift 3 | // CleanTalk 4 | // 5 | // Created by Oleg Sehelin on 2/2/17. 6 | // Copyright © 2017 Oleg Sehelin. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class DetailStatsRequest: AbstractRequest { 12 | 13 | public var sessionId: String? 14 | public var time: String? 15 | public var serviceId: String? 16 | public var days: String? 17 | public var index:Int = 0 18 | public var allow:Bool = false 19 | public var isSpamRequest: Bool = true 20 | 21 | override func urlString() -> String { 22 | return self.isSpamRequest == true ? "my/show_requests?app_mode=1" : "my/show_sfw?app_mode=1" 23 | } 24 | 25 | override func parameters() -> [String : Any]? { 26 | var parameters = [ 27 | "start_from": self.time ?? "", 28 | "service_id" : self.serviceId ?? "", 29 | "app_session_id" : self.sessionId ?? "" 30 | ] 31 | 32 | if let day = self.days { 33 | parameters["days"] = day 34 | } 35 | 36 | if self.isSpamRequest == true { 37 | parameters["allow"] = self.allow == true ? "1" : "0" 38 | } 39 | 40 | return parameters 41 | } 42 | 43 | override func headers() -> [String : String]? { 44 | return nil 45 | } 46 | 47 | public override func method() -> RequestMethod { 48 | return .post 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/DataClasses/Requests/LoginRequest.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LoginRequest.swift 3 | // CleanTalk 4 | // 5 | // Created by Oleg Sehelin on 2/2/17. 6 | // Copyright © 2017 Oleg Sehelin. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class LoginRequest: AbstractRequest { 12 | public var login: String? 13 | public var password: String? 14 | public var deviceToken: String? 15 | 16 | override func urlString() -> String { 17 | return "my/session?app_mode=1" 18 | } 19 | 20 | override func parameters() -> [String : Any]? { 21 | let parameters = [ 22 | "login": login ?? "", 23 | "password": password ?? "", 24 | "app_device_token": deviceToken != nil ? deviceToken!.lowercased() : "" 25 | ] 26 | 27 | return parameters 28 | } 29 | 30 | override func headers() -> [String : String]? { 31 | return nil 32 | } 33 | 34 | public override func method() -> RequestMethod { 35 | return .post 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/DataClasses/Requests/MainStatsRequest.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MainStatsRequest.swift 3 | // CleanTalk 4 | // 5 | // Created by Oleg Sehelin on 2/2/17. 6 | // Copyright © 2017 Oleg Sehelin. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class MainStatsRequest: AbstractRequest { 12 | 13 | public var pageNumber: Int? = 1 14 | public var sessionId: String? 15 | 16 | override func urlString() -> String { 17 | return "my/main?app_mode=1&all_results=1" 18 | } 19 | 20 | override func parameters() -> [String : Any]? { 21 | let parameters = [ 22 | "app_session_id": self.sessionId ?? "" 23 | ] 24 | 25 | return parameters 26 | } 27 | 28 | override func headers() -> [String : String]? { 29 | return nil 30 | } 31 | 32 | public override func method() -> RequestMethod { 33 | return .post 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | CleanTalk 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(MARKETING_VERSION) 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | LSRequiresIPhoneOS 24 | 25 | NSAppTransportSecurity 26 | 27 | NSAllowsArbitraryLoads 28 | 29 | 30 | UILaunchStoryboardName 31 | LaunchScreen 32 | UIRequiredDeviceCapabilities 33 | 34 | armv7 35 | 36 | UIRequiresFullScreen 37 | 38 | UIStatusBarHidden 39 | 40 | UISupportedInterfaceOrientations 41 | 42 | UIInterfaceOrientationPortrait 43 | 44 | UISupportedInterfaceOrientations~ipad 45 | 46 | UIInterfaceOrientationPortrait 47 | UIInterfaceOrientationPortraitUpsideDown 48 | UIInterfaceOrientationLandscapeLeft 49 | UIInterfaceOrientationLandscapeRight 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/Resources/defaultIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CleanTalk/ios-app/de096735b399cfaafbb5d674092a8eeb766fc2b7/CleanTalk/CleanTalk/CleanTalk/Resources/defaultIcon@2x.png -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/Resources/logo_iphone@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CleanTalk/ios-app/de096735b399cfaafbb5d674092a8eeb766fc2b7/CleanTalk/CleanTalk/CleanTalk/Resources/logo_iphone@2x.png -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/ViewControllers/CTDetailsViewController/CTDetailsCell/en.lproj/CTDetailsCell.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "UILabel"; text = "Type:"; ObjectID = "05P-Lr-bO7"; */ 3 | "05P-Lr-bO7.text" = "Type:"; 4 | 5 | /* Class = "UILabel"; text = "Label"; ObjectID = "Hzf-3b-b3F"; */ 6 | "Hzf-3b-b3F.text" = "Label"; 7 | 8 | /* Class = "UIButton"; normalTitle = "Button"; ObjectID = "Ost-us-iRl"; */ 9 | "Ost-us-iRl.normalTitle" = "Button"; 10 | 11 | /* Class = "UILabel"; text = "Label"; ObjectID = "S7E-p9-8LJ"; */ 12 | "S7E-p9-8LJ.text" = "Label"; 13 | 14 | /* Class = "UILabel"; text = "Status:"; ObjectID = "eOc-Nm-osq"; */ 15 | "eOc-Nm-osq.text" = "Status:"; 16 | 17 | /* Class = "UILabel"; text = "Label"; ObjectID = "gr6-fp-K3m"; */ 18 | "gr6-fp-K3m.text" = "Label"; 19 | 20 | /* Class = "UILabel"; text = "Sender:"; ObjectID = "gwV-wO-6it"; */ 21 | "gwV-wO-6it.text" = "Sender:"; 22 | 23 | /* Class = "UILabel"; text = "Label"; ObjectID = "o9D-iG-jZO"; */ 24 | "o9D-iG-jZO.text" = "Label"; 25 | 26 | /* Class = "UILabel"; text = "Label"; ObjectID = "psd-7J-M0h"; */ 27 | "psd-7J-M0h.text" = "Label"; 28 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/ViewControllers/CTDetailsViewController/CTDetailsCell/ru.lproj/CTDetailsCell.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "UILabel"; text = "Type:"; ObjectID = "05P-Lr-bO7"; */ 3 | "05P-Lr-bO7.text" = "Тип:"; 4 | 5 | /* Class = "UILabel"; text = "Label"; ObjectID = "Hzf-3b-b3F"; */ 6 | "Hzf-3b-b3F.text" = "Label"; 7 | 8 | /* Class = "UIButton"; normalTitle = "Button"; ObjectID = "Ost-us-iRl"; */ 9 | "Ost-us-iRl.normalTitle" = "Button"; 10 | 11 | /* Class = "UILabel"; text = "Label"; ObjectID = "S7E-p9-8LJ"; */ 12 | "S7E-p9-8LJ.text" = "Label"; 13 | 14 | /* Class = "UILabel"; text = "Status:"; ObjectID = "eOc-Nm-osq"; */ 15 | "eOc-Nm-osq.text" = "Статус:"; 16 | 17 | /* Class = "UILabel"; text = "Label"; ObjectID = "gr6-fp-K3m"; */ 18 | "gr6-fp-K3m.text" = "Label"; 19 | 20 | /* Class = "UILabel"; text = "Sender:"; ObjectID = "gwV-wO-6it"; */ 21 | "gwV-wO-6it.text" = "Отправитель:"; 22 | 23 | /* Class = "UILabel"; text = "Label"; ObjectID = "o9D-iG-jZO"; */ 24 | "o9D-iG-jZO.text" = "Label"; 25 | 26 | /* Class = "UILabel"; text = "Label"; ObjectID = "psd-7J-M0h"; */ 27 | "psd-7J-M0h.text" = "Label"; 28 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/ViewControllers/CTDetailsViewController/CTDetailsViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CTDetailsViewController.swift 3 | // CleanTalk 4 | // 5 | // Created by Oleg Sehelin on 2/8/17. 6 | // Copyright © 2017 Oleg Sehelin. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | let kDetailsCellHeight = 105.0 12 | 13 | class CTDetailsViewController: UIViewController { 14 | 15 | @IBOutlet fileprivate weak var tableView: UITableView! 16 | var dataSource: [DetailStatisticModel] = [] 17 | var authKey: String = "" 18 | 19 | override func viewDidLoad() { 20 | super.viewDidLoad() 21 | self.navigationController?.navigationBar.tintColor = UIColor.black 22 | self.title = "Blacklist Review" 23 | // Do any additional setup after loading the view. 24 | 25 | self.tableView.register(UINib(nibName: "CTDetailsCell", bundle: nil), forCellReuseIdentifier: "Details Cell") 26 | 27 | self.tableView.estimatedRowHeight = CGFloat(kDetailsCellHeight) 28 | self.tableView.rowHeight = UITableView.automaticDimension 29 | } 30 | 31 | override func didReceiveMemoryWarning() { 32 | super.didReceiveMemoryWarning() 33 | // Dispose of any resources that can be recreated. 34 | } 35 | } 36 | 37 | extension CTDetailsViewController: UITableViewDataSource { 38 | func numberOfSections(in tableView: UITableView) -> Int { 39 | return 1 40 | } 41 | 42 | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 43 | return self.dataSource.count 44 | } 45 | 46 | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 47 | let cell = tableView.dequeueReusableCell(withIdentifier: "Details Cell", for: indexPath) as! CTDetailsCell 48 | cell.delegate = self 49 | cell.tag = indexPath.row 50 | cell.updateCellWithModel(model: self.dataSource[indexPath.row]) 51 | 52 | return cell 53 | } 54 | } 55 | 56 | extension CTDetailsViewController: CTDetailCellDelegate { 57 | func updateStatusForMessage(_ messageId: String, status: Bool, cellIndex: Int) { 58 | let alert = UIAlertController(title: NSLocalizedString("REPORTED_TITLE", comment: ""), message: nil, preferredStyle: .alert) 59 | 60 | let okAction = UIAlertAction(title: NSLocalizedString("REPORTED_YES", comment: ""), style: .default, handler: { result in 61 | let request = ChangeStatusRequest() 62 | request.messageId = messageId 63 | request.status = status 64 | request.authKey = self.authKey 65 | 66 | AlamofireDispatcher.shared.run(request: request, keyPath: nil) { (responce: Response) in 67 | switch responce { 68 | case .success(let model): 69 | if model.received?.intValue == 1 { 70 | let detailsModel = self.dataSource[cellIndex] 71 | detailsModel.approved = status == true ? "1" : "0" 72 | let indexPath = IndexPath(item: cellIndex, section: 0) 73 | self.tableView.reloadRows(at: [indexPath], with: .none) 74 | } 75 | case .error(let error): 76 | ModelsManager.shared.showAlertMessage(withError: error) 77 | } 78 | } 79 | }) 80 | 81 | let cancelAction = UIAlertAction(title: NSLocalizedString("REPORTED_NO", comment: ""), style: .default, handler: { result in 82 | alert.dismiss(animated: true, completion: nil) 83 | let indexPath = IndexPath(item: cellIndex, section: 0) 84 | self.tableView.reloadRows(at: [indexPath], with: .none) 85 | }) 86 | 87 | alert.addAction(okAction) 88 | alert.addAction(cancelAction) 89 | self.navigationController?.present(alert, animated: true, completion: nil) 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/ViewControllers/CTDetailsViewController/en.lproj/CTDetailsViewController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/ViewControllers/CTLoginViewController/CTLoginViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CTLoginViewController.swift 3 | // CleanTalk 4 | // 5 | // Created by Oleg Sehelin on 1/31/17. 6 | // Copyright © 2017 Oleg Sehelin. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class CTLoginViewController: UIViewController { 12 | 13 | override var prefersStatusBarHidden: Bool { 14 | return true 15 | } 16 | 17 | @IBOutlet fileprivate weak var passwordTextFiled: UITextField! 18 | @IBOutlet fileprivate weak var emailTextFiled: UITextField! 19 | @IBOutlet fileprivate weak var activityIndicator: UIActivityIndicatorView! 20 | 21 | override func viewDidLoad() { 22 | super.viewDidLoad() 23 | 24 | // Do any additional setup after loading the view. 25 | } 26 | 27 | override func viewWillAppear(_ animated: Bool) { 28 | super.viewWillAppear(animated) 29 | self.navigationController?.isNavigationBarHidden = true 30 | 31 | 32 | if let text = UserDefaults.standard.value(forKey: Constants.Defines.lastLogin) as? String { 33 | self.emailTextFiled.text = text 34 | } 35 | } 36 | 37 | override func didReceiveMemoryWarning() { 38 | super.didReceiveMemoryWarning() 39 | // Dispose of any resources that can be recreated. 40 | } 41 | 42 | fileprivate func openURLFromString(string: String) { 43 | let url = URL(string:string)! 44 | if UIApplication.shared.canOpenURL(url) { 45 | UIApplication.shared.openURL(url) 46 | } 47 | } 48 | 49 | //MARK - Buttons 50 | @IBAction func loginPressed() { 51 | if let email = self.emailTextFiled.text, let password = self.passwordTextFiled.text { 52 | self.activityIndicator.startAnimating() 53 | 54 | let request = LoginRequest() 55 | request.login = email 56 | request.password = password 57 | request.deviceToken = UserDefaults.standard.value(forKey: Constants.Defines.deviceToken) as? String 58 | 59 | AlamofireDispatcher.shared.run(request: request, keyPath: nil) { (response: Response) in 60 | switch response { 61 | case .success(let model): 62 | ModelsManager.shared.loginModel = model 63 | if model.success == 1 { 64 | UserDefaults.standard.setValue(model.sessionId, forKey: Constants.Defines.sessionId) 65 | UserDefaults.standard.setValue(true, forKey: Constants.Defines.alreadyLogin) 66 | let statisticVC = CTStatisticViewController(nibName: "CTStatisticViewController", bundle: nil) 67 | self.navigationController?.pushViewController(statisticVC, animated: true) 68 | self.activityIndicator.stopAnimating() 69 | } else { 70 | self.activityIndicator.stopAnimating() 71 | ModelsManager.shared.showAlertMessage(withError: nil) 72 | } 73 | case .error: 74 | self.activityIndicator.stopAnimating() 75 | ModelsManager.shared.showAlertMessage(withError: nil) 76 | } 77 | } 78 | } 79 | } 80 | 81 | @IBAction func registerPressed() { 82 | self.openURLFromString(string: Constants.URL.registrationURL) 83 | } 84 | 85 | @IBAction func resetPasswordPressed() { 86 | self.openURLFromString(string: Constants.URL.passwordURL) 87 | } 88 | 89 | } 90 | 91 | extension CTLoginViewController: UITextFieldDelegate { 92 | 93 | func textFieldShouldReturn(_ textField: UITextField) -> Bool { 94 | textField.resignFirstResponder() 95 | if textField.isEqual(self.emailTextFiled) { 96 | self.passwordTextFiled.becomeFirstResponder() 97 | } 98 | 99 | return true 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/ViewControllers/CTLoginViewController/en.lproj/CTLoginViewController~ipad.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "UIButton"; normalTitle = "Reset password"; ObjectID = "AMb-hb-OrQ"; */ 3 | "AMb-hb-OrQ.normalTitle" = "Reset password"; 4 | 5 | /* Class = "UILabel"; text = "Email:"; ObjectID = "EBN-TO-NwM"; */ 6 | "EBN-TO-NwM.text" = "Email:"; 7 | 8 | /* Class = "UILabel"; text = "Password:"; ObjectID = "Oed-xi-VYa"; */ 9 | "Oed-xi-VYa.text" = "Password:"; 10 | 11 | /* Class = "UIButton"; normalTitle = "Get an account"; ObjectID = "PtQ-El-Msx"; */ 12 | "PtQ-El-Msx.normalTitle" = "Get an account"; 13 | 14 | /* Class = "UIButton"; normalTitle = "Login"; ObjectID = "dmk-Ab-4mb"; */ 15 | "dmk-Ab-4mb.normalTitle" = "Login"; 16 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/ViewControllers/CTLoginViewController/en.lproj/CTLoginViewController~iphone.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "UIButton"; normalTitle = "Reset password"; ObjectID = "MBP-An-9gc"; */ 3 | "MBP-An-9gc.normalTitle" = "Reset password"; 4 | 5 | /* Class = "UILabel"; text = "Password:"; ObjectID = "cNX-ln-lXU"; */ 6 | "cNX-ln-lXU.text" = "Password:"; 7 | 8 | /* Class = "UIButton"; normalTitle = "Login"; ObjectID = "hnI-LR-eqO"; */ 9 | "hnI-LR-eqO.normalTitle" = "Login"; 10 | 11 | /* Class = "UIButton"; normalTitle = "Get an account"; ObjectID = "o7K-Ji-kNt"; */ 12 | "o7K-Ji-kNt.normalTitle" = "Get an account"; 13 | 14 | /* Class = "UILabel"; text = "Email:"; ObjectID = "ypG-WX-6JL"; */ 15 | "ypG-WX-6JL.text" = "Email:"; 16 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/ViewControllers/CTLoginViewController/ru.lproj/CTLoginViewController~ipad.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "UIButton"; normalTitle = "Reset password"; ObjectID = "AMb-hb-OrQ"; */ 3 | "AMb-hb-OrQ.normalTitle" = "Reset password"; 4 | 5 | /* Class = "UILabel"; text = "Email:"; ObjectID = "EBN-TO-NwM"; */ 6 | "EBN-TO-NwM.text" = "Email:"; 7 | 8 | /* Class = "UILabel"; text = "Password:"; ObjectID = "Oed-xi-VYa"; */ 9 | "Oed-xi-VYa.text" = "Password:"; 10 | 11 | /* Class = "UIButton"; normalTitle = "Get an account"; ObjectID = "PtQ-El-Msx"; */ 12 | "PtQ-El-Msx.normalTitle" = "Get an account"; 13 | 14 | /* Class = "UIButton"; normalTitle = "Login"; ObjectID = "dmk-Ab-4mb"; */ 15 | "dmk-Ab-4mb.normalTitle" = "Login"; 16 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/ViewControllers/CTLoginViewController/ru.lproj/CTLoginViewController~iphone.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "UIButton"; normalTitle = "Reset password"; ObjectID = "MBP-An-9gc"; */ 3 | "MBP-An-9gc.normalTitle" = "Новый пароль"; 4 | 5 | /* Class = "UILabel"; text = "Password:"; ObjectID = "cNX-ln-lXU"; */ 6 | "cNX-ln-lXU.text" = "Пароль:"; 7 | 8 | /* Class = "UIButton"; normalTitle = "Login"; ObjectID = "hnI-LR-eqO"; */ 9 | "hnI-LR-eqO.normalTitle" = "Войти"; 10 | 11 | /* Class = "UIButton"; normalTitle = "Get an account"; ObjectID = "o7K-Ji-kNt"; */ 12 | "o7K-Ji-kNt.normalTitle" = "Новый пользователь"; 13 | 14 | /* Class = "UILabel"; text = "Email:"; ObjectID = "ypG-WX-6JL"; */ 15 | "ypG-WX-6JL.text" = "Логин:"; 16 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/ViewControllers/CTSFWViewController/CTSFWCell/CTSFWCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CTSFWCell.swift 3 | // CleanTalk 4 | // 5 | // Created by Oleg Sehelin on 2/9/17. 6 | // Copyright © 2017 Oleg Sehelin. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class CTSFWCell: UITableViewCell { 12 | 13 | @IBOutlet fileprivate weak var flagLabel: UILabel! 14 | @IBOutlet fileprivate weak var dateLabel: UILabel! 15 | @IBOutlet fileprivate weak var countryLabel: UILabel! 16 | @IBOutlet fileprivate weak var ipLabel: UILabel! 17 | @IBOutlet fileprivate weak var totalLabel: UILabel! 18 | @IBOutlet fileprivate weak var passedLabel: UILabel! 19 | 20 | override func awakeFromNib() { 21 | super.awakeFromNib() 22 | // Initialization code 23 | } 24 | 25 | override func setSelected(_ selected: Bool, animated: Bool) { 26 | super.setSelected(selected, animated: animated) 27 | 28 | // Configure the view for the selected state 29 | } 30 | 31 | func updateCellWithModel(dataModel: DetailStatisticModel?) { 32 | if let model = dataModel, let code = model.sfwCountry { 33 | self.flagLabel.text = self.flag(countryCode: code) 34 | self.countryLabel.text = self.countryName(from: code) 35 | self.dateLabel.text = model.date 36 | self.ipLabel.text = model.sfwIp 37 | self.totalLabel.text = model.sfwTotal 38 | self.passedLabel.text = model.sfwPassed 39 | } 40 | } 41 | 42 | //MARK: - Helpers 43 | fileprivate func flag(countryCode: String) -> String { 44 | let base = UnicodeScalar("🇦").value - UnicodeScalar("A").value 45 | 46 | var string = "" 47 | countryCode.uppercased().unicodeScalars.forEach { 48 | if let scala = UnicodeScalar(base + $0.value) { 49 | string.append(String(describing: scala)) 50 | } 51 | } 52 | 53 | return string 54 | } 55 | 56 | fileprivate func countryName(from countryCode: String) -> String { 57 | if let name = (Locale.current as NSLocale).displayName(forKey: .countryCode, value: countryCode) { 58 | return name 59 | } else { 60 | return countryCode 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/ViewControllers/CTSFWViewController/CTSFWCell/en.lproj/CTSFWCell.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "UILabel"; text = "Passed:"; ObjectID = "2gF-1s-iJ2"; */ 3 | "2gF-1s-iJ2.text" = "Passed:"; 4 | 5 | /* Class = "UILabel"; text = "Label"; ObjectID = "67S-bb-BEf"; */ 6 | "67S-bb-BEf.text" = "Label"; 7 | 8 | /* Class = "UILabel"; text = "IP:"; ObjectID = "7qE-jy-jkT"; */ 9 | "7qE-jy-jkT.text" = "IP:"; 10 | 11 | /* Class = "UILabel"; text = "Hits:"; ObjectID = "8Ss-BX-egD"; */ 12 | "8Ss-BX-egD.text" = "Hits:"; 13 | 14 | /* Class = "UILabel"; text = "Label"; ObjectID = "ChI-Rp-awQ"; */ 15 | "ChI-Rp-awQ.text" = "Label"; 16 | 17 | /* Class = "UILabel"; text = "Label"; ObjectID = "GhP-Ag-zN3"; */ 18 | "GhP-Ag-zN3.text" = "Label"; 19 | 20 | /* Class = "UILabel"; text = "192.168.123.234"; ObjectID = "YLN-HY-xta"; */ 21 | "YLN-HY-xta.text" = "192.168.123.234"; 22 | 23 | /* Class = "UILabel"; text = "L"; ObjectID = "dWh-c1-jI2"; */ 24 | "dWh-c1-jI2.text" = "L"; 25 | 26 | /* Class = "UILabel"; text = "Label"; ObjectID = "kgp-SA-mrn"; */ 27 | "kgp-SA-mrn.text" = "Label"; 28 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/ViewControllers/CTSFWViewController/CTSFWCell/ru.lproj/CTSFWCell.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "UILabel"; text = "Passed:"; ObjectID = "2gF-1s-iJ2"; */ 3 | "2gF-1s-iJ2.text" = "Разрешённые запросы:"; 4 | 5 | /* Class = "UILabel"; text = "Label"; ObjectID = "67S-bb-BEf"; */ 6 | "67S-bb-BEf.text" = "Label"; 7 | 8 | /* Class = "UILabel"; text = "IP:"; ObjectID = "7qE-jy-jkT"; */ 9 | "7qE-jy-jkT.text" = "IP:"; 10 | 11 | /* Class = "UILabel"; text = "Hits:"; ObjectID = "8Ss-BX-egD"; */ 12 | "8Ss-BX-egD.text" = "Запросы:"; 13 | 14 | /* Class = "UILabel"; text = "Label"; ObjectID = "ChI-Rp-awQ"; */ 15 | "ChI-Rp-awQ.text" = "Label"; 16 | 17 | /* Class = "UILabel"; text = "Label"; ObjectID = "GhP-Ag-zN3"; */ 18 | "GhP-Ag-zN3.text" = "Label"; 19 | 20 | /* Class = "UILabel"; text = "192.168.123.234"; ObjectID = "YLN-HY-xta"; */ 21 | "YLN-HY-xta.text" = "192.168.123.234"; 22 | 23 | /* Class = "UILabel"; text = "L"; ObjectID = "dWh-c1-jI2"; */ 24 | "dWh-c1-jI2.text" = "L"; 25 | 26 | /* Class = "UILabel"; text = "Label"; ObjectID = "kgp-SA-mrn"; */ 27 | "kgp-SA-mrn.text" = "Label"; 28 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/ViewControllers/CTSFWViewController/CTSFWViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CTSFWViewController.swift 3 | // CleanTalk 4 | // 5 | // Created by Oleg Sehelin on 2/9/17. 6 | // Copyright © 2017 Oleg Sehelin. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | fileprivate let kSFWCellHeight = 80.0 12 | class CTSFWViewController: UIViewController { 13 | 14 | @IBOutlet fileprivate weak var tableView: UITableView! 15 | var dataSource: [DetailStatisticModel] = [] 16 | 17 | override func viewDidLoad() { 18 | super.viewDidLoad() 19 | self.navigationController?.navigationBar.tintColor = UIColor.black 20 | self.title = "Spam FireWall Review" 21 | // Do any additional setup after loading the view. 22 | 23 | self.tableView.register(UINib(nibName: "CTSFWCell", bundle: nil), forCellReuseIdentifier: "SFW Cell") 24 | } 25 | 26 | override func didReceiveMemoryWarning() { 27 | super.didReceiveMemoryWarning() 28 | // Dispose of any resources that can be recreated. 29 | } 30 | } 31 | 32 | extension CTSFWViewController: UITableViewDataSource { 33 | func numberOfSections(in tableView: UITableView) -> Int { 34 | return 1 35 | } 36 | 37 | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 38 | return self.dataSource.count 39 | } 40 | 41 | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 42 | let cell = tableView.dequeueReusableCell(withIdentifier: "SFW Cell", for: indexPath) as! CTSFWCell 43 | cell.tag = indexPath.row 44 | cell.updateCellWithModel(dataModel: self.dataSource[indexPath.row]) 45 | 46 | return cell 47 | } 48 | } 49 | 50 | extension CTSFWViewController: UITableViewDelegate { 51 | func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 52 | return CGFloat(kSFWCellHeight) 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/ViewControllers/CTSFWViewController/CTSFWViewController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/ViewControllers/CTStatisticViewController/CTStatisticCell/en.lproj/CTStatisticCell.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "UILabel"; text = "Anti-Spam"; ObjectID = "7jS-Oi-Kuq"; */ 3 | "7jS-Oi-Kuq.text" = "Anti-Spam"; 4 | 5 | /* Class = "UILabel"; text = "Today"; ObjectID = "ZYE-eg-YbM"; */ 6 | "ZYE-eg-YbM.text" = "Today"; 7 | 8 | /* Class = "UILabel"; text = "Week"; ObjectID = "bL7-xG-r6b"; */ 9 | "bL7-xG-r6b.text" = "Week"; 10 | 11 | /* Class = "UILabel"; text = "•"; ObjectID = "gW3-Ik-2Pd"; */ 12 | "gW3-Ik-2Pd.text" = "•"; 13 | 14 | /* Class = "UILabel"; text = "•"; ObjectID = "lef-93-wl4"; */ 15 | "lef-93-wl4.text" = "•"; 16 | 17 | /* Class = "UILabel"; text = "SpamFireWall"; ObjectID = "p2A-Fy-Pqs"; */ 18 | "p2A-Fy-Pqs.text" = "SpamFireWall"; 19 | 20 | /* Class = "UILabel"; text = "Yesterday"; ObjectID = "vJs-sL-1su"; */ 21 | "vJs-sL-1su.text" = "Yesterday"; 22 | 23 | /* Class = "UILabel"; text = "•"; ObjectID = "vQz-q7-jpP"; */ 24 | "vQz-q7-jpP.text" = "•"; 25 | 26 | /* Class = "UILabel"; text = "Label"; ObjectID = "yZB-Hr-0Pk"; */ 27 | "yZB-Hr-0Pk.text" = "Label"; 28 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/ViewControllers/CTStatisticViewController/CTStatisticCell/ru.lproj/CTStatisticCell.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "UILabel"; text = "Anti-Spam"; ObjectID = "7jS-Oi-Kuq"; */ 3 | "7jS-Oi-Kuq.text" = "Anti-Spam"; 4 | 5 | /* Class = "UILabel"; text = "Today"; ObjectID = "ZYE-eg-YbM"; */ 6 | "ZYE-eg-YbM.text" = "Сегодня"; 7 | 8 | /* Class = "UILabel"; text = "Week"; ObjectID = "bL7-xG-r6b"; */ 9 | "bL7-xG-r6b.text" = "Неделя"; 10 | 11 | /* Class = "UILabel"; text = "•"; ObjectID = "gW3-Ik-2Pd"; */ 12 | "gW3-Ik-2Pd.text" = "•"; 13 | 14 | /* Class = "UILabel"; text = "•"; ObjectID = "lef-93-wl4"; */ 15 | "lef-93-wl4.text" = "•"; 16 | 17 | /* Class = "UILabel"; text = "SpamFireWall"; ObjectID = "p2A-Fy-Pqs"; */ 18 | "p2A-Fy-Pqs.text" = "SpamFireWall"; 19 | 20 | /* Class = "UILabel"; text = "Yesterday"; ObjectID = "vJs-sL-1su"; */ 21 | "vJs-sL-1su.text" = "Вчера"; 22 | 23 | /* Class = "UILabel"; text = "•"; ObjectID = "vQz-q7-jpP"; */ 24 | "vQz-q7-jpP.text" = "•"; 25 | 26 | /* Class = "UILabel"; text = "Label"; ObjectID = "yZB-Hr-0Pk"; */ 27 | "yZB-Hr-0Pk.text" = "Label"; 28 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/ViewControllers/CTStatisticViewController/en.lproj/CTStatisticViewController.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "UISearchBar"; 3Y7-zH-HyY.scopeButtonTitles[0] = "Title"; ObjectID = "3Y7-zH-HyY"; */ 3 | "3Y7-zH-HyY.scopeButtonTitles[0]" = "Title"; 4 | 5 | /* Class = "UISearchBar"; 3Y7-zH-HyY.scopeButtonTitles[1] = "Title"; ObjectID = "3Y7-zH-HyY"; */ 6 | "3Y7-zH-HyY.scopeButtonTitles[1]" = "Title"; 7 | 8 | /* Class = "UIButton"; normalTitle = "Refresh"; ObjectID = "JSo-Vp-nw6"; */ 9 | "JSo-Vp-nw6.normalTitle" = "Refresh"; 10 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/ViewControllers/CTStatisticViewController/ru.lproj/CTStatisticViewController.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "UISearchBar"; 3Y7-zH-HyY.scopeButtonTitles[0] = "Title"; ObjectID = "3Y7-zH-HyY"; */ 3 | "3Y7-zH-HyY.scopeButtonTitles[0]" = "Title"; 4 | 5 | /* Class = "UISearchBar"; 3Y7-zH-HyY.scopeButtonTitles[1] = "Title"; ObjectID = "3Y7-zH-HyY"; */ 6 | "3Y7-zH-HyY.scopeButtonTitles[1]" = "Title"; 7 | 8 | /* Class = "UIButton"; normalTitle = "Refresh"; ObjectID = "JSo-Vp-nw6"; */ 9 | "JSo-Vp-nw6.normalTitle" = "Обновить"; 10 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/en.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Localizable.strings 3 | CleanTalk 4 | 5 | Created by Oleg Sehelin on 2/8/14. 6 | Copyright (c) 2014 CleanTalk. All rights reserved. 7 | */ 8 | 9 | "REGISTRATION" = "Get an account"; 10 | "FORGOT_PASSWORD" = "Reset password"; 11 | "ERROR" = "Error"; 12 | "ERROR_MESSAGE" = "Login failure, please check email and password."; 13 | "SITE" = "cleantalk.org"; 14 | "LOGOUT" = "Logout"; 15 | "REFRESH" = "Refresh"; 16 | "TODAY" = "Today"; 17 | "YESTERDAY" = "Yesterday"; 18 | "WEEK" = "Week"; 19 | "ERROR" = "Error"; 20 | "PANEL" = "Control panel"; 21 | "SPAM" = "Forbidden"; 22 | "ALLOW" = "Approved"; 23 | "ALLOW_BUTTON" = "Not spam"; 24 | "SPAM_BUTTON" = "Spam"; 25 | "REPORTED_SPAM_TEXT" = "Reported as SPAM!"; 26 | "REPORTED_ALLOW_TEXT" = "Reported as not SPAM!"; 27 | "REPORTED_TITLE" = "Are You shure?"; 28 | "REPORTED_YES" = "Yes"; 29 | "REPORTED_NO" = "No"; 30 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/ru.lproj/LaunchScreen.strings: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /CleanTalk/CleanTalk/CleanTalk/ru.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Localizable.strings 3 | CleanTalk 4 | 5 | Created by Oleg Sehelin on 2/8/14. 6 | Copyright (c) 2014 CleanTalk. All rights reserved. 7 | */ 8 | 9 | "REGISTRATION" = "Новый пользователь"; 10 | "FORGOT_PASSWORD" = "Новый пароль"; 11 | "ERROR" = "Ошибка"; 12 | "ERROR_MESSAGE" = "Ошибка авторизации, пожалуйста проверьте логин и пароль."; 13 | "SITE" = "cleantalk.org"; 14 | "LOGOUT" = "Выйти"; 15 | "REFRESH" = "Обновить"; 16 | "TODAY" = "Сегодня"; 17 | "YESTERDAY" = "Вчера"; 18 | "WEEK" = "Неделя"; 19 | "ERROR" = "Ошибка"; 20 | "PANEL" = "Панель управления"; 21 | "SPAM" = "Спам"; 22 | "ALLOW" = "Одобренные"; 23 | "ALLOW_BUTTON" = "Не спам"; 24 | "SPAM_BUTTON" = "Спам"; 25 | "REPORTED_ALLOW_TEXT" = "Отмечен как не спам!"; 26 | "REPORTED_SPAM_TEXT" = "Отмечен как спам!"; 27 | "REPORTED_TITLE" = "Вы уверены ?"; 28 | "REPORTED_YES" = "Да"; 29 | "REPORTED_NO" = "Нет"; 30 | -------------------------------------------------------------------------------- /CleanTalk/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | target ‘CleanTalk’ do 3 | pod 'SDWebImage/Core' 4 | pod 'Alamofire' 5 | pod 'AlamofireObjectMapper' 6 | pod 'SnapKit' 7 | pod 'SDWebImage/Core' 8 | end 9 | -------------------------------------------------------------------------------- /CleanTalk/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Alamofire (4.9.1) 3 | - AlamofireObjectMapper (5.2.1): 4 | - Alamofire (~> 4.7) 5 | - ObjectMapper (~> 3.4) 6 | - ObjectMapper (3.5.3) 7 | - SDWebImage/Core (5.8.1) 8 | - SnapKit (4.2.0) 9 | 10 | DEPENDENCIES: 11 | - Alamofire 12 | - AlamofireObjectMapper 13 | - SDWebImage/Core 14 | - SnapKit 15 | 16 | SPEC REPOS: 17 | trunk: 18 | - Alamofire 19 | - AlamofireObjectMapper 20 | - ObjectMapper 21 | - SDWebImage 22 | - SnapKit 23 | 24 | SPEC CHECKSUMS: 25 | Alamofire: 85e8a02c69d6020a0d734f6054870d7ecb75cf18 26 | AlamofireObjectMapper: 1989f690e982b71921b9253f53a4f33a9bc00d88 27 | ObjectMapper: 97111c97e054a6ee25917662106689f0b4127b37 28 | SDWebImage: e3eae2eda88578db0685a0c88597fdadd9433f05 29 | SnapKit: fe8a619752f3f27075cc9a90244d75c6c3f27e2a 30 | 31 | PODFILE CHECKSUM: a3ea1f0b74f1c60dac25db73943a2e64a1fab4fc 32 | 33 | COCOAPODS: 1.8.4 34 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Alamofire/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014 Alamofire Software Foundation (http://alamofire.org/) 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Alamofire/Source/DispatchQueue+Alamofire.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DispatchQueue+Alamofire.swift 3 | // 4 | // Copyright (c) 2014 Alamofire Software Foundation (http://alamofire.org/) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | import Dispatch 26 | import Foundation 27 | 28 | extension DispatchQueue { 29 | static var userInteractive: DispatchQueue { return DispatchQueue.global(qos: .userInteractive) } 30 | static var userInitiated: DispatchQueue { return DispatchQueue.global(qos: .userInitiated) } 31 | static var utility: DispatchQueue { return DispatchQueue.global(qos: .utility) } 32 | static var background: DispatchQueue { return DispatchQueue.global(qos: .background) } 33 | 34 | func after(_ delay: TimeInterval, execute closure: @escaping () -> Void) { 35 | asyncAfter(deadline: .now() + delay, execute: closure) 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Alamofire/Source/Notifications.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Notifications.swift 3 | // 4 | // Copyright (c) 2014 Alamofire Software Foundation (http://alamofire.org/) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | import Foundation 26 | 27 | extension Notification.Name { 28 | /// Used as a namespace for all `URLSessionTask` related notifications. 29 | public struct Task { 30 | /// Posted when a `URLSessionTask` is resumed. The notification `object` contains the resumed `URLSessionTask`. 31 | public static let DidResume = Notification.Name(rawValue: "org.alamofire.notification.name.task.didResume") 32 | 33 | /// Posted when a `URLSessionTask` is suspended. The notification `object` contains the suspended `URLSessionTask`. 34 | public static let DidSuspend = Notification.Name(rawValue: "org.alamofire.notification.name.task.didSuspend") 35 | 36 | /// Posted when a `URLSessionTask` is cancelled. The notification `object` contains the cancelled `URLSessionTask`. 37 | public static let DidCancel = Notification.Name(rawValue: "org.alamofire.notification.name.task.didCancel") 38 | 39 | /// Posted when a `URLSessionTask` is completed. The notification `object` contains the completed `URLSessionTask`. 40 | public static let DidComplete = Notification.Name(rawValue: "org.alamofire.notification.name.task.didComplete") 41 | } 42 | } 43 | 44 | // MARK: - 45 | 46 | extension Notification { 47 | /// Used as a namespace for all `Notification` user info dictionary keys. 48 | public struct Key { 49 | /// User info dictionary key representing the `URLSessionTask` associated with the notification. 50 | public static let Task = "org.alamofire.notification.key.task" 51 | 52 | /// User info dictionary key representing the responseData associated with the notification. 53 | public static let ResponseData = "org.alamofire.notification.key.responseData" 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /CleanTalk/Pods/AlamofireObjectMapper/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Tristan Himmelman 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Alamofire (4.9.1) 3 | - AlamofireObjectMapper (5.2.1): 4 | - Alamofire (~> 4.7) 5 | - ObjectMapper (~> 3.4) 6 | - ObjectMapper (3.5.3) 7 | - SDWebImage/Core (5.8.1) 8 | - SnapKit (4.2.0) 9 | 10 | DEPENDENCIES: 11 | - Alamofire 12 | - AlamofireObjectMapper 13 | - SDWebImage/Core 14 | - SnapKit 15 | 16 | SPEC REPOS: 17 | trunk: 18 | - Alamofire 19 | - AlamofireObjectMapper 20 | - ObjectMapper 21 | - SDWebImage 22 | - SnapKit 23 | 24 | SPEC CHECKSUMS: 25 | Alamofire: 85e8a02c69d6020a0d734f6054870d7ecb75cf18 26 | AlamofireObjectMapper: 1989f690e982b71921b9253f53a4f33a9bc00d88 27 | ObjectMapper: 97111c97e054a6ee25917662106689f0b4127b37 28 | SDWebImage: e3eae2eda88578db0685a0c88597fdadd9433f05 29 | SnapKit: fe8a619752f3f27075cc9a90244d75c6c3f27e2a 30 | 31 | PODFILE CHECKSUM: a3ea1f0b74f1c60dac25db73943a2e64a1fab4fc 32 | 33 | COCOAPODS: 1.8.4 34 | -------------------------------------------------------------------------------- /CleanTalk/Pods/ObjectMapper/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright (c) 2014 Hearst 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 5 | 6 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 7 | 8 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 9 | -------------------------------------------------------------------------------- /CleanTalk/Pods/ObjectMapper/Sources/CustomDateFormatTransform.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CustomDateFormatTransform.swift 3 | // ObjectMapper 4 | // 5 | // Created by Dan McCracken on 3/8/15. 6 | // 7 | // The MIT License (MIT) 8 | // 9 | // Copyright (c) 2014-2018 Tristan Himmelman 10 | // 11 | // Permission is hereby granted, free of charge, to any person obtaining a copy 12 | // of this software and associated documentation files (the "Software"), to deal 13 | // in the Software without restriction, including without limitation the rights 14 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | // copies of the Software, and to permit persons to whom the Software is 16 | // furnished to do so, subject to the following conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be included in 19 | // all copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | // THE SOFTWARE. 28 | 29 | import Foundation 30 | 31 | open class CustomDateFormatTransform: DateFormatterTransform { 32 | 33 | public init(formatString: String) { 34 | let formatter = DateFormatter() 35 | formatter.locale = Locale(identifier: "en_US_POSIX") 36 | formatter.dateFormat = formatString 37 | 38 | super.init(dateFormatter: formatter) 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /CleanTalk/Pods/ObjectMapper/Sources/DataTransform.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DataTransform.swift 3 | // ObjectMapper 4 | // 5 | // Created by Yagrushkin, Evgeny on 8/30/16. 6 | // 7 | // The MIT License (MIT) 8 | // 9 | // Copyright (c) 2014-2018 Tristan Himmelman 10 | // 11 | // Permission is hereby granted, free of charge, to any person obtaining a copy 12 | // of this software and associated documentation files (the "Software"), to deal 13 | // in the Software without restriction, including without limitation the rights 14 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | // copies of the Software, and to permit persons to whom the Software is 16 | // furnished to do so, subject to the following conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be included in 19 | // all copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | // THE SOFTWARE. 28 | 29 | import Foundation 30 | 31 | open class DataTransform: TransformType { 32 | public typealias Object = Data 33 | public typealias JSON = String 34 | 35 | public init() {} 36 | 37 | open func transformFromJSON(_ value: Any?) -> Data? { 38 | guard let string = value as? String else{ 39 | return nil 40 | } 41 | return Data(base64Encoded: string) 42 | } 43 | 44 | open func transformToJSON(_ value: Data?) -> String? { 45 | guard let data = value else{ 46 | return nil 47 | } 48 | return data.base64EncodedString() 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /CleanTalk/Pods/ObjectMapper/Sources/DateFormatterTransform.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DateFormatterTransform.swift 3 | // ObjectMapper 4 | // 5 | // Created by Tristan Himmelman on 2015-03-09. 6 | // 7 | // The MIT License (MIT) 8 | // 9 | // Copyright (c) 2014-2018 Tristan Himmelman 10 | // 11 | // Permission is hereby granted, free of charge, to any person obtaining a copy 12 | // of this software and associated documentation files (the "Software"), to deal 13 | // in the Software without restriction, including without limitation the rights 14 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | // copies of the Software, and to permit persons to whom the Software is 16 | // furnished to do so, subject to the following conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be included in 19 | // all copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | // THE SOFTWARE. 28 | 29 | import Foundation 30 | 31 | open class DateFormatterTransform: TransformType { 32 | public typealias Object = Date 33 | public typealias JSON = String 34 | 35 | public let dateFormatter: DateFormatter 36 | 37 | public init(dateFormatter: DateFormatter) { 38 | self.dateFormatter = dateFormatter 39 | } 40 | 41 | open func transformFromJSON(_ value: Any?) -> Date? { 42 | if let dateString = value as? String { 43 | return dateFormatter.date(from: dateString) 44 | } 45 | return nil 46 | } 47 | 48 | open func transformToJSON(_ value: Date?) -> String? { 49 | if let date = value { 50 | return dateFormatter.string(from: date) 51 | } 52 | return nil 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /CleanTalk/Pods/ObjectMapper/Sources/DateTransform.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DateTransform.swift 3 | // ObjectMapper 4 | // 5 | // Created by Tristan Himmelman on 2014-10-13. 6 | // 7 | // The MIT License (MIT) 8 | // 9 | // Copyright (c) 2014-2018 Tristan Himmelman 10 | // 11 | // Permission is hereby granted, free of charge, to any person obtaining a copy 12 | // of this software and associated documentation files (the "Software"), to deal 13 | // in the Software without restriction, including without limitation the rights 14 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | // copies of the Software, and to permit persons to whom the Software is 16 | // furnished to do so, subject to the following conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be included in 19 | // all copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | // THE SOFTWARE. 28 | 29 | import Foundation 30 | 31 | open class DateTransform: TransformType { 32 | public typealias Object = Date 33 | public typealias JSON = Double 34 | 35 | public enum Unit: TimeInterval { 36 | case seconds = 1 37 | case milliseconds = 1_000 38 | 39 | func addScale(to interval: TimeInterval) -> TimeInterval { 40 | return interval * rawValue 41 | } 42 | 43 | func removeScale(from interval: TimeInterval) -> TimeInterval { 44 | return interval / rawValue 45 | } 46 | } 47 | 48 | private let unit: Unit 49 | 50 | public init(unit: Unit = .seconds) { 51 | self.unit = unit 52 | } 53 | 54 | open func transformFromJSON(_ value: Any?) -> Date? { 55 | var timeInterval: TimeInterval? 56 | if let timeInt = value as? Double { 57 | timeInterval = TimeInterval(timeInt) 58 | } 59 | 60 | if let timeStr = value as? String { 61 | timeInterval = TimeInterval(atof(timeStr)) 62 | } 63 | 64 | return timeInterval.flatMap { 65 | return Date(timeIntervalSince1970: unit.removeScale(from: $0)) 66 | } 67 | } 68 | 69 | open func transformToJSON(_ value: Date?) -> Double? { 70 | if let date = value { 71 | return Double(unit.addScale(to: date.timeIntervalSince1970)) 72 | } 73 | return nil 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /CleanTalk/Pods/ObjectMapper/Sources/DictionaryTransform.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DictionaryTransform.swift 3 | // ObjectMapper 4 | // 5 | // Created by Milen Halachev on 7/20/16. 6 | // 7 | // Copyright (c) 2014-2018 Tristan Himmelman 8 | // 9 | // Permission is hereby granted, free of charge, to any person obtaining a copy 10 | // of this software and associated documentation files (the "Software"), to deal 11 | // in the Software without restriction, including without limitation the rights 12 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the Software is 14 | // furnished to do so, subject to the following conditions: 15 | // 16 | // The above copyright notice and this permission notice shall be included in 17 | // all copies or substantial portions of the Software. 18 | // 19 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 25 | // THE SOFTWARE. 26 | 27 | import Foundation 28 | 29 | ///Transforms [String: AnyObject] <-> [Key: Value] where Key is RawRepresentable as String, Value is Mappable 30 | public struct DictionaryTransform: TransformType where Key: Hashable, Key: RawRepresentable, Key.RawValue == String, Value: Mappable { 31 | 32 | public init() { 33 | 34 | } 35 | 36 | public func transformFromJSON(_ value: Any?) -> [Key: Value]? { 37 | 38 | guard let json = value as? [String: Any] else { 39 | 40 | return nil 41 | } 42 | 43 | let result = json.reduce([:]) { (result, element) -> [Key: Value] in 44 | 45 | guard 46 | let key = Key(rawValue: element.0), 47 | let valueJSON = element.1 as? [String: Any], 48 | let value = Value(JSON: valueJSON) 49 | else { 50 | 51 | return result 52 | } 53 | 54 | var result = result 55 | result[key] = value 56 | return result 57 | } 58 | 59 | return result 60 | } 61 | 62 | public func transformToJSON(_ value: [Key: Value]?) -> Any? { 63 | 64 | let result = value?.reduce([:]) { (result, element) -> [String: Any] in 65 | 66 | let key = element.0.rawValue 67 | let value = element.1.toJSON() 68 | 69 | var result = result 70 | result[key] = value 71 | return result 72 | } 73 | 74 | return result 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /CleanTalk/Pods/ObjectMapper/Sources/EnumTransform.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EnumTransform.swift 3 | // ObjectMapper 4 | // 5 | // Created by Kaan Dedeoglu on 3/20/15. 6 | // 7 | // The MIT License (MIT) 8 | // 9 | // Copyright (c) 2014-2018 Tristan Himmelman 10 | // 11 | // Permission is hereby granted, free of charge, to any person obtaining a copy 12 | // of this software and associated documentation files (the "Software"), to deal 13 | // in the Software without restriction, including without limitation the rights 14 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | // copies of the Software, and to permit persons to whom the Software is 16 | // furnished to do so, subject to the following conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be included in 19 | // all copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | // THE SOFTWARE. 28 | 29 | import Foundation 30 | 31 | open class EnumTransform: TransformType { 32 | public typealias Object = T 33 | public typealias JSON = T.RawValue 34 | 35 | public init() {} 36 | 37 | open func transformFromJSON(_ value: Any?) -> T? { 38 | if let raw = value as? T.RawValue { 39 | return T(rawValue: raw) 40 | } 41 | return nil 42 | } 43 | 44 | open func transformToJSON(_ value: T?) -> T.RawValue? { 45 | if let obj = value { 46 | return obj.rawValue 47 | } 48 | return nil 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /CleanTalk/Pods/ObjectMapper/Sources/ISO8601DateTransform.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ISO8601DateTransform.swift 3 | // ObjectMapper 4 | // 5 | // Created by Jean-Pierre Mouilleseaux on 21 Nov 2014. 6 | // 7 | // The MIT License (MIT) 8 | // 9 | // Copyright (c) 2014-2018 Tristan Himmelman 10 | // 11 | // Permission is hereby granted, free of charge, to any person obtaining a copy 12 | // of this software and associated documentation files (the "Software"), to deal 13 | // in the Software without restriction, including without limitation the rights 14 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | // copies of the Software, and to permit persons to whom the Software is 16 | // furnished to do so, subject to the following conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be included in 19 | // all copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | // THE SOFTWARE. 28 | 29 | import Foundation 30 | 31 | public extension DateFormatter { 32 | convenience init(withFormat format : String, locale : String) { 33 | self.init() 34 | self.locale = Locale(identifier: locale) 35 | dateFormat = format 36 | } 37 | } 38 | 39 | open class ISO8601DateTransform: DateFormatterTransform { 40 | 41 | static let reusableISODateFormatter = DateFormatter(withFormat: "yyyy-MM-dd'T'HH:mm:ssZZZZZ", locale: "en_US_POSIX") 42 | 43 | public init() { 44 | super.init(dateFormatter: ISO8601DateTransform.reusableISODateFormatter) 45 | } 46 | } 47 | 48 | -------------------------------------------------------------------------------- /CleanTalk/Pods/ObjectMapper/Sources/MapError.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MapError.swift 3 | // ObjectMapper 4 | // 5 | // Created by Tristan Himmelman on 2016-09-26. 6 | // 7 | // The MIT License (MIT) 8 | // 9 | // Copyright (c) 2014-2018 Tristan Himmelman 10 | // 11 | // Permission is hereby granted, free of charge, to any person obtaining a copy 12 | // of this software and associated documentation files (the "Software"), to deal 13 | // in the Software without restriction, including without limitation the rights 14 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | // copies of the Software, and to permit persons to whom the Software is 16 | // furnished to do so, subject to the following conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be included in 19 | // all copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | // THE SOFTWARE. 28 | 29 | import Foundation 30 | 31 | public struct MapError: Error { 32 | public var key: String? 33 | public var currentValue: Any? 34 | public var reason: String? 35 | public var file: StaticString? 36 | public var function: StaticString? 37 | public var line: UInt? 38 | 39 | public init(key: String?, currentValue: Any?, reason: String?, file: StaticString? = nil, function: StaticString? = nil, line: UInt? = nil) { 40 | self.key = key 41 | self.currentValue = currentValue 42 | self.reason = reason 43 | self.file = file 44 | self.function = function 45 | self.line = line 46 | } 47 | } 48 | 49 | extension MapError: CustomStringConvertible { 50 | 51 | private var location: String? { 52 | guard let file = file, let function = function, let line = line else { return nil } 53 | let fileName = ((String(describing: file).components(separatedBy: "/").last ?? "").components(separatedBy: ".").first ?? "") 54 | return "\(fileName).\(function):\(line)" 55 | } 56 | 57 | public var description: String { 58 | let info: [(String, Any?)] = [ 59 | ("- reason", reason), 60 | ("- location", location), 61 | ("- key", key), 62 | ("- currentValue", currentValue), 63 | ] 64 | let infoString = info.map { "\($0.0): \($0.1 ?? "nil")" }.joined(separator: "\n") 65 | return "Got an error while mapping.\n\(infoString)" 66 | } 67 | 68 | } 69 | -------------------------------------------------------------------------------- /CleanTalk/Pods/ObjectMapper/Sources/NSDecimalNumberTransform.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TransformOf.swift 3 | // ObjectMapper 4 | // 5 | // Created by Tristan Himmelman on 8/22/16. 6 | // 7 | // The MIT License (MIT) 8 | // 9 | // Copyright (c) 2014-2018 Tristan Himmelman 10 | // 11 | // Permission is hereby granted, free of charge, to any person obtaining a copy 12 | // of this software and associated documentation files (the "Software"), to deal 13 | // in the Software without restriction, including without limitation the rights 14 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | // copies of the Software, and to permit persons to whom the Software is 16 | // furnished to do so, subject to the following conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be included in 19 | // all copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | // THE SOFTWARE. 28 | 29 | import Foundation 30 | 31 | open class NSDecimalNumberTransform: TransformType { 32 | public typealias Object = NSDecimalNumber 33 | public typealias JSON = String 34 | 35 | public init() {} 36 | 37 | open func transformFromJSON(_ value: Any?) -> NSDecimalNumber? { 38 | if let string = value as? String { 39 | return NSDecimalNumber(string: string) 40 | } else if let number = value as? NSNumber { 41 | return NSDecimalNumber(decimal: number.decimalValue) 42 | } else if let double = value as? Double { 43 | return NSDecimalNumber(floatLiteral: double) 44 | } 45 | return nil 46 | } 47 | 48 | open func transformToJSON(_ value: NSDecimalNumber?) -> String? { 49 | guard let value = value else { return nil } 50 | return value.description 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /CleanTalk/Pods/ObjectMapper/Sources/TransformOf.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TransformOf.swift 3 | // ObjectMapper 4 | // 5 | // Created by Syo Ikeda on 1/23/15. 6 | // 7 | // The MIT License (MIT) 8 | // 9 | // Copyright (c) 2014-2018 Tristan Himmelman 10 | // 11 | // Permission is hereby granted, free of charge, to any person obtaining a copy 12 | // of this software and associated documentation files (the "Software"), to deal 13 | // in the Software without restriction, including without limitation the rights 14 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | // copies of the Software, and to permit persons to whom the Software is 16 | // furnished to do so, subject to the following conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be included in 19 | // all copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | // THE SOFTWARE. 28 | 29 | open class TransformOf: TransformType { 30 | public typealias Object = ObjectType 31 | public typealias JSON = JSONType 32 | 33 | private let fromJSON: (JSONType?) -> ObjectType? 34 | private let toJSON: (ObjectType?) -> JSONType? 35 | 36 | public init(fromJSON: @escaping(JSONType?) -> ObjectType?, toJSON: @escaping(ObjectType?) -> JSONType?) { 37 | self.fromJSON = fromJSON 38 | self.toJSON = toJSON 39 | } 40 | 41 | open func transformFromJSON(_ value: Any?) -> ObjectType? { 42 | return fromJSON(value as? JSONType) 43 | } 44 | 45 | open func transformToJSON(_ value: ObjectType?) -> JSONType? { 46 | return toJSON(value) 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /CleanTalk/Pods/ObjectMapper/Sources/TransformType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TransformType.swift 3 | // ObjectMapper 4 | // 5 | // Created by Syo Ikeda on 2/4/15. 6 | // 7 | // The MIT License (MIT) 8 | // 9 | // Copyright (c) 2014-2018 Tristan Himmelman 10 | // 11 | // Permission is hereby granted, free of charge, to any person obtaining a copy 12 | // of this software and associated documentation files (the "Software"), to deal 13 | // in the Software without restriction, including without limitation the rights 14 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | // copies of the Software, and to permit persons to whom the Software is 16 | // furnished to do so, subject to the following conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be included in 19 | // all copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | // THE SOFTWARE. 28 | 29 | public protocol TransformType { 30 | associatedtype Object 31 | associatedtype JSON 32 | 33 | func transformFromJSON(_ value: Any?) -> Object? 34 | func transformToJSON(_ value: Object?) -> JSON? 35 | } 36 | -------------------------------------------------------------------------------- /CleanTalk/Pods/ObjectMapper/Sources/URLTransform.swift: -------------------------------------------------------------------------------- 1 | // 2 | // URLTransform.swift 3 | // ObjectMapper 4 | // 5 | // Created by Tristan Himmelman on 2014-10-27. 6 | // 7 | // The MIT License (MIT) 8 | // 9 | // Copyright (c) 2014-2018 Tristan Himmelman 10 | // 11 | // Permission is hereby granted, free of charge, to any person obtaining a copy 12 | // of this software and associated documentation files (the "Software"), to deal 13 | // in the Software without restriction, including without limitation the rights 14 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | // copies of the Software, and to permit persons to whom the Software is 16 | // furnished to do so, subject to the following conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be included in 19 | // all copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | // THE SOFTWARE. 28 | 29 | import Foundation 30 | 31 | open class URLTransform: TransformType { 32 | public typealias Object = URL 33 | public typealias JSON = String 34 | private let shouldEncodeURLString: Bool 35 | private let allowedCharacterSet: CharacterSet 36 | 37 | /** 38 | Initializes the URLTransform with an option to encode URL strings before converting them to an NSURL 39 | - parameter shouldEncodeUrlString: when true (the default) the string is encoded before passing 40 | to `NSURL(string:)` 41 | - returns: an initialized transformer 42 | */ 43 | public init(shouldEncodeURLString: Bool = false, allowedCharacterSet: CharacterSet = .urlQueryAllowed) { 44 | self.shouldEncodeURLString = shouldEncodeURLString 45 | self.allowedCharacterSet = allowedCharacterSet 46 | } 47 | 48 | open func transformFromJSON(_ value: Any?) -> URL? { 49 | guard let URLString = value as? String else { return nil } 50 | 51 | if !shouldEncodeURLString { 52 | return URL(string: URLString) 53 | } 54 | 55 | guard let escapedURLString = URLString.addingPercentEncoding(withAllowedCharacters: allowedCharacterSet) else { 56 | return nil 57 | } 58 | return URL(string: escapedURLString) 59 | } 60 | 61 | open func transformToJSON(_ value: URL?) -> String? { 62 | if let URL = value { 63 | return URL.absoluteString 64 | } 65 | return nil 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SDWebImage/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2009-2018 Olivier Poitrey rs@dailymotion.com 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is furnished 8 | to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | 21 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * (c) Fabrice Aneche 5 | * 6 | * For the full copyright and license information, please view the LICENSE 7 | * file that was distributed with this source code. 8 | */ 9 | 10 | #import 11 | #import "SDWebImageCompat.h" 12 | 13 | typedef NS_ENUM(NSInteger, SDImageFormat) { 14 | SDImageFormatUndefined = -1, 15 | SDImageFormatJPEG = 0, 16 | SDImageFormatPNG, 17 | SDImageFormatGIF, 18 | SDImageFormatTIFF, 19 | SDImageFormatWebP 20 | }; 21 | 22 | @interface NSData (ImageContentType) 23 | 24 | /** 25 | * Return image format 26 | * 27 | * @param data the input image data 28 | * 29 | * @return the image format as `SDImageFormat` (enum) 30 | */ 31 | + (SDImageFormat)sd_imageFormatForImageData:(nullable NSData *)data; 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * (c) Fabrice Aneche 5 | * 6 | * For the full copyright and license information, please view the LICENSE 7 | * file that was distributed with this source code. 8 | */ 9 | 10 | #import "NSData+ImageContentType.h" 11 | 12 | 13 | @implementation NSData (ImageContentType) 14 | 15 | + (SDImageFormat)sd_imageFormatForImageData:(nullable NSData *)data { 16 | if (!data) { 17 | return SDImageFormatUndefined; 18 | } 19 | 20 | uint8_t c; 21 | [data getBytes:&c length:1]; 22 | switch (c) { 23 | case 0xFF: 24 | return SDImageFormatJPEG; 25 | case 0x89: 26 | return SDImageFormatPNG; 27 | case 0x47: 28 | return SDImageFormatGIF; 29 | case 0x49: 30 | case 0x4D: 31 | return SDImageFormatTIFF; 32 | case 0x52: 33 | // R as RIFF for WEBP 34 | if (data.length < 12) { 35 | return SDImageFormatUndefined; 36 | } 37 | 38 | NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding]; 39 | if ([testString hasPrefix:@"RIFF"] && [testString hasSuffix:@"WEBP"]) { 40 | return SDImageFormatWebP; 41 | } 42 | } 43 | return SDImageFormatUndefined; 44 | } 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SDWebImage/SDWebImage/NSImage+WebCache.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "SDWebImageCompat.h" 10 | 11 | #if SD_MAC 12 | 13 | #import 14 | 15 | @interface NSImage (WebCache) 16 | 17 | - (CGImageRef)CGImage; 18 | - (NSArray *)images; 19 | - (BOOL)isGIF; 20 | 21 | @end 22 | 23 | #endif 24 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SDWebImage/SDWebImage/NSImage+WebCache.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "NSImage+WebCache.h" 10 | 11 | #if SD_MAC 12 | 13 | @implementation NSImage (WebCache) 14 | 15 | - (CGImageRef)CGImage { 16 | NSRect imageRect = NSMakeRect(0, 0, self.size.width, self.size.height); 17 | CGImageRef cgImage = [self CGImageForProposedRect:&imageRect context:NULL hints:nil]; 18 | return cgImage; 19 | } 20 | 21 | - (NSArray *)images { 22 | return nil; 23 | } 24 | 25 | - (BOOL)isGIF { 26 | return NO; 27 | } 28 | 29 | @end 30 | 31 | #endif 32 | 33 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SDWebImage/SDWebImage/SDImageCacheConfig.h: -------------------------------------------------------------------------------- 1 | // 2 | // SDImageCacheConfig.h 3 | // SDWebImage 4 | // 5 | // Created by Bogdan on 09/09/16. 6 | // Copyright © 2016 Dailymotion. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "SDWebImageCompat.h" 11 | 12 | @interface SDImageCacheConfig : NSObject 13 | 14 | /** 15 | * Decompressing images that are downloaded and cached can improve performance but can consume lot of memory. 16 | * Defaults to YES. Set this to NO if you are experiencing a crash due to excessive memory consumption. 17 | */ 18 | @property (assign, nonatomic) BOOL shouldDecompressImages; 19 | 20 | /** 21 | * disable iCloud backup [defaults to YES] 22 | */ 23 | @property (assign, nonatomic) BOOL shouldDisableiCloud; 24 | 25 | /** 26 | * use memory cache [defaults to YES] 27 | */ 28 | @property (assign, nonatomic) BOOL shouldCacheImagesInMemory; 29 | 30 | /** 31 | * The maximum length of time to keep an image in the cache, in seconds 32 | */ 33 | @property (assign, nonatomic) NSInteger maxCacheAge; 34 | 35 | /** 36 | * The maximum size of the cache, in bytes. 37 | */ 38 | @property (assign, nonatomic) NSUInteger maxCacheSize; 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SDWebImage/SDWebImage/SDImageCacheConfig.m: -------------------------------------------------------------------------------- 1 | // 2 | // SDImageCacheConfig.m 3 | // SDWebImage 4 | // 5 | // Created by Bogdan on 09/09/16. 6 | // Copyright © 2016 Dailymotion. All rights reserved. 7 | // 8 | 9 | #import "SDImageCacheConfig.h" 10 | 11 | static const NSInteger kDefaultCacheMaxCacheAge = 60 * 60 * 24 * 7; // 1 week 12 | 13 | @implementation SDImageCacheConfig 14 | 15 | - (instancetype)init { 16 | if (self = [super init]) { 17 | _shouldDecompressImages = YES; 18 | _shouldDisableiCloud = YES; 19 | _shouldCacheImagesInMemory = YES; 20 | _maxCacheAge = kDefaultCacheMaxCacheAge; 21 | _maxCacheSize = 0; 22 | } 23 | return self; 24 | } 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SDWebImage/SDWebImage/SDWebImageCompat.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * (c) Jamie Pinkham 5 | * 6 | * For the full copyright and license information, please view the LICENSE 7 | * file that was distributed with this source code. 8 | */ 9 | 10 | #import 11 | 12 | #ifdef __OBJC_GC__ 13 | #error SDWebImage does not support Objective-C Garbage Collection 14 | #endif 15 | 16 | // Apple's defines from TargetConditionals.h are a bit weird. 17 | // Seems like TARGET_OS_MAC is always defined (on all platforms). 18 | // To determine if we are running on OSX, we can only relly on TARGET_OS_IPHONE=0 and all the other platforms 19 | #if !TARGET_OS_IPHONE && !TARGET_OS_IOS && !TARGET_OS_TV && !TARGET_OS_WATCH 20 | #define SD_MAC 1 21 | #else 22 | #define SD_MAC 0 23 | #endif 24 | 25 | // iOS and tvOS are very similar, UIKit exists on both platforms 26 | // Note: watchOS also has UIKit, but it's very limited 27 | #if TARGET_OS_IOS || TARGET_OS_TV 28 | #define SD_UIKIT 1 29 | #else 30 | #define SD_UIKIT 0 31 | #endif 32 | 33 | #if TARGET_OS_IOS 34 | #define SD_IOS 1 35 | #else 36 | #define SD_IOS 0 37 | #endif 38 | 39 | #if TARGET_OS_TV 40 | #define SD_TV 1 41 | #else 42 | #define SD_TV 0 43 | #endif 44 | 45 | #if TARGET_OS_WATCH 46 | #define SD_WATCH 1 47 | #else 48 | #define SD_WATCH 0 49 | #endif 50 | 51 | 52 | #if SD_MAC 53 | #import 54 | #ifndef UIImage 55 | #define UIImage NSImage 56 | #endif 57 | #ifndef UIImageView 58 | #define UIImageView NSImageView 59 | #endif 60 | #ifndef UIView 61 | #define UIView NSView 62 | #endif 63 | #else 64 | #if __IPHONE_OS_VERSION_MIN_REQUIRED != 20000 && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_5_0 65 | #error SDWebImage doesn't support Deployment Target version < 5.0 66 | #endif 67 | 68 | #if SD_UIKIT 69 | #import 70 | #endif 71 | #if SD_WATCH 72 | #import 73 | #endif 74 | #endif 75 | 76 | #ifndef NS_ENUM 77 | #define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type 78 | #endif 79 | 80 | #ifndef NS_OPTIONS 81 | #define NS_OPTIONS(_type, _name) enum _name : _type _name; enum _name : _type 82 | #endif 83 | 84 | #if OS_OBJECT_USE_OBJC 85 | #undef SDDispatchQueueRelease 86 | #undef SDDispatchQueueSetterSementics 87 | #define SDDispatchQueueRelease(q) 88 | #define SDDispatchQueueSetterSementics strong 89 | #else 90 | #undef SDDispatchQueueRelease 91 | #undef SDDispatchQueueSetterSementics 92 | #define SDDispatchQueueRelease(q) (dispatch_release(q)) 93 | #define SDDispatchQueueSetterSementics assign 94 | #endif 95 | 96 | extern UIImage *SDScaledImageForKey(NSString *key, UIImage *image); 97 | 98 | typedef void(^SDWebImageNoParamsBlock)(); 99 | 100 | extern NSString *const SDWebImageErrorDomain; 101 | 102 | #ifndef dispatch_main_async_safe 103 | #define dispatch_main_async_safe(block)\ 104 | if (strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(dispatch_get_main_queue())) == 0) {\ 105 | block();\ 106 | } else {\ 107 | dispatch_async(dispatch_get_main_queue(), block);\ 108 | } 109 | #endif 110 | 111 | static int64_t kAsyncTestTimeout = 5; 112 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SDWebImage/SDWebImage/SDWebImageCompat.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "SDWebImageCompat.h" 10 | 11 | #if !__has_feature(objc_arc) 12 | #error SDWebImage is ARC only. Either turn on ARC for the project or use -fobjc-arc flag 13 | #endif 14 | 15 | inline UIImage *SDScaledImageForKey(NSString * _Nullable key, UIImage * _Nullable image) { 16 | if (!image) { 17 | return nil; 18 | } 19 | 20 | #if SD_MAC 21 | return image; 22 | #elif SD_UIKIT || SD_WATCH 23 | if ((image.images).count > 0) { 24 | NSMutableArray *scaledImages = [NSMutableArray array]; 25 | 26 | for (UIImage *tempImage in image.images) { 27 | [scaledImages addObject:SDScaledImageForKey(key, tempImage)]; 28 | } 29 | 30 | return [UIImage animatedImageWithImages:scaledImages duration:image.duration]; 31 | } 32 | else { 33 | #if SD_WATCH 34 | if ([[WKInterfaceDevice currentDevice] respondsToSelector:@selector(screenScale)]) { 35 | #elif SD_UIKIT 36 | if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) { 37 | #endif 38 | CGFloat scale = 1; 39 | if (key.length >= 8) { 40 | NSRange range = [key rangeOfString:@"@2x."]; 41 | if (range.location != NSNotFound) { 42 | scale = 2.0; 43 | } 44 | 45 | range = [key rangeOfString:@"@3x."]; 46 | if (range.location != NSNotFound) { 47 | scale = 3.0; 48 | } 49 | } 50 | 51 | UIImage *scaledImage = [[UIImage alloc] initWithCGImage:image.CGImage scale:scale orientation:image.imageOrientation]; 52 | image = scaledImage; 53 | } 54 | return image; 55 | } 56 | #endif 57 | } 58 | 59 | NSString *const SDWebImageErrorDomain = @"SDWebImageErrorDomain"; 60 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * (c) james 5 | * 6 | * For the full copyright and license information, please view the LICENSE 7 | * file that was distributed with this source code. 8 | */ 9 | 10 | #import 11 | #import "SDWebImageCompat.h" 12 | 13 | @interface UIImage (ForceDecode) 14 | 15 | + (nullable UIImage *)decodedImageWithImage:(nullable UIImage *)image; 16 | 17 | + (nullable UIImage *)decodedAndScaledDownImageWithImage:(nullable UIImage *)image; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SDWebImage/SDWebImage/SDWebImageOperation.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import 10 | 11 | @protocol SDWebImageOperation 12 | 13 | - (void)cancel; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SDWebImage/SDWebImage/UIImage+GIF.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * (c) Laurin Brandner 5 | * 6 | * For the full copyright and license information, please view the LICENSE 7 | * file that was distributed with this source code. 8 | */ 9 | 10 | #import "SDWebImageCompat.h" 11 | 12 | @interface UIImage (GIF) 13 | 14 | /** 15 | * Compatibility method - creates an animated UIImage from an NSData, it will only contain the 1st frame image 16 | */ 17 | + (UIImage *)sd_animatedGIFWithData:(NSData *)data; 18 | 19 | /** 20 | * Checks if an UIImage instance is a GIF. Will use the `images` array 21 | */ 22 | - (BOOL)isGIF; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SDWebImage/SDWebImage/UIImage+GIF.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * (c) Laurin Brandner 5 | * 6 | * For the full copyright and license information, please view the LICENSE 7 | * file that was distributed with this source code. 8 | */ 9 | 10 | #import "UIImage+GIF.h" 11 | #import 12 | #import "objc/runtime.h" 13 | #import "NSImage+WebCache.h" 14 | 15 | @implementation UIImage (GIF) 16 | 17 | + (UIImage *)sd_animatedGIFWithData:(NSData *)data { 18 | if (!data) { 19 | return nil; 20 | } 21 | 22 | CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL); 23 | 24 | size_t count = CGImageSourceGetCount(source); 25 | 26 | UIImage *staticImage; 27 | 28 | if (count <= 1) { 29 | staticImage = [[UIImage alloc] initWithData:data]; 30 | } else { 31 | // we will only retrieve the 1st frame. the full GIF support is available via the FLAnimatedImageView category. 32 | // this here is only code to allow drawing animated images as static ones 33 | #if SD_WATCH 34 | CGFloat scale = 1; 35 | scale = [WKInterfaceDevice currentDevice].screenScale; 36 | #elif SD_UIKIT 37 | CGFloat scale = 1; 38 | scale = [UIScreen mainScreen].scale; 39 | #endif 40 | 41 | CGImageRef CGImage = CGImageSourceCreateImageAtIndex(source, 0, NULL); 42 | #if SD_UIKIT || SD_WATCH 43 | UIImage *frameImage = [UIImage imageWithCGImage:CGImage scale:scale orientation:UIImageOrientationUp]; 44 | staticImage = [UIImage animatedImageWithImages:@[frameImage] duration:0.0f]; 45 | #elif SD_MAC 46 | staticImage = [[UIImage alloc] initWithCGImage:CGImage size:NSZeroSize]; 47 | #endif 48 | CGImageRelease(CGImage); 49 | } 50 | 51 | CFRelease(source); 52 | 53 | return staticImage; 54 | } 55 | 56 | - (BOOL)isGIF { 57 | return (self.images != nil); 58 | } 59 | 60 | @end 61 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "SDWebImageCompat.h" 10 | #import "NSData+ImageContentType.h" 11 | 12 | @interface UIImage (MultiFormat) 13 | 14 | + (nullable UIImage *)sd_imageWithData:(nullable NSData *)data; 15 | - (nullable NSData *)sd_imageData; 16 | - (nullable NSData *)sd_imageDataAsFormat:(SDImageFormat)imageFormat; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "UIImageView+HighlightedWebCache.h" 10 | 11 | #if SD_UIKIT 12 | 13 | #import "UIView+WebCacheOperation.h" 14 | #import "UIView+WebCache.h" 15 | 16 | @implementation UIImageView (HighlightedWebCache) 17 | 18 | - (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url { 19 | [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:nil]; 20 | } 21 | 22 | - (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url options:(SDWebImageOptions)options { 23 | [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:nil]; 24 | } 25 | 26 | - (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url completed:(nullable SDExternalCompletionBlock)completedBlock { 27 | [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:completedBlock]; 28 | } 29 | 30 | - (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url options:(SDWebImageOptions)options completed:(nullable SDExternalCompletionBlock)completedBlock { 31 | [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:completedBlock]; 32 | } 33 | 34 | - (void)sd_setHighlightedImageWithURL:(nullable NSURL *)url 35 | options:(SDWebImageOptions)options 36 | progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock 37 | completed:(nullable SDExternalCompletionBlock)completedBlock { 38 | __weak typeof(self)weakSelf = self; 39 | [self sd_internalSetImageWithURL:url 40 | placeholderImage:nil 41 | options:options 42 | operationKey:@"UIImageViewImageOperationHighlighted" 43 | setImageBlock:^(UIImage *image, NSData *imageData) { 44 | weakSelf.highlightedImage = image; 45 | } 46 | progress:progressBlock 47 | completed:completedBlock]; 48 | } 49 | 50 | @end 51 | 52 | #endif 53 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SDWebImage/SDWebImage/UIView+WebCache.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "SDWebImageCompat.h" 10 | 11 | #if SD_UIKIT || SD_MAC 12 | 13 | #import "SDWebImageManager.h" 14 | 15 | typedef void(^SDSetImageBlock)(UIImage * _Nullable image, NSData * _Nullable imageData); 16 | 17 | @interface UIView (WebCache) 18 | 19 | /** 20 | * Get the current image URL. 21 | * 22 | * Note that because of the limitations of categories this property can get out of sync 23 | * if you use setImage: directly. 24 | */ 25 | - (nullable NSURL *)sd_imageURL; 26 | 27 | /** 28 | * Set the imageView `image` with an `url` and optionally a placeholder image. 29 | * 30 | * The download is asynchronous and cached. 31 | * 32 | * @param url The url for the image. 33 | * @param placeholder The image to be set initially, until the image request finishes. 34 | * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. 35 | * @param operationKey A string to be used as the operation key. If nil, will use the class name 36 | * @param setImageBlock Block used for custom set image code 37 | * @param progressBlock A block called while image is downloading 38 | * @note the progress block is executed on a background queue 39 | * @param completedBlock A block called when operation has been completed. This block has no return value 40 | * and takes the requested UIImage as first parameter. In case of error the image parameter 41 | * is nil and the second parameter may contain an NSError. The third parameter is a Boolean 42 | * indicating if the image was retrieved from the local cache or from the network. 43 | * The fourth parameter is the original image url. 44 | */ 45 | - (void)sd_internalSetImageWithURL:(nullable NSURL *)url 46 | placeholderImage:(nullable UIImage *)placeholder 47 | options:(SDWebImageOptions)options 48 | operationKey:(nullable NSString *)operationKey 49 | setImageBlock:(nullable SDSetImageBlock)setImageBlock 50 | progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock 51 | completed:(nullable SDExternalCompletionBlock)completedBlock; 52 | 53 | /** 54 | * Cancel the current download 55 | */ 56 | - (void)sd_cancelCurrentImageLoad; 57 | 58 | #if SD_UIKIT 59 | 60 | #pragma mark - Activity indicator 61 | 62 | /** 63 | * Show activity UIActivityIndicatorView 64 | */ 65 | - (void)sd_setShowActivityIndicatorView:(BOOL)show; 66 | 67 | /** 68 | * set desired UIActivityIndicatorViewStyle 69 | * 70 | * @param style The style of the UIActivityIndicatorView 71 | */ 72 | - (void)sd_setIndicatorStyle:(UIActivityIndicatorViewStyle)style; 73 | 74 | - (BOOL)sd_showActivityIndicatorView; 75 | - (void)sd_addActivityIndicator; 76 | - (void)sd_removeActivityIndicator; 77 | 78 | #endif 79 | 80 | @end 81 | 82 | #endif 83 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "SDWebImageCompat.h" 10 | 11 | #if SD_UIKIT || SD_MAC 12 | 13 | #import "SDWebImageManager.h" 14 | 15 | @interface UIView (WebCacheOperation) 16 | 17 | /** 18 | * Set the image load operation (storage in a UIView based dictionary) 19 | * 20 | * @param operation the operation 21 | * @param key key for storing the operation 22 | */ 23 | - (void)sd_setImageLoadOperation:(nullable id)operation forKey:(nullable NSString *)key; 24 | 25 | /** 26 | * Cancel all operations for the current UIView and key 27 | * 28 | * @param key key for identifying the operations 29 | */ 30 | - (void)sd_cancelImageLoadOperationWithKey:(nullable NSString *)key; 31 | 32 | /** 33 | * Just remove the operations corresponding to the current UIView and key without cancelling them 34 | * 35 | * @param key key for identifying the operations 36 | */ 37 | - (void)sd_removeImageLoadOperationWithKey:(nullable NSString *)key; 38 | 39 | @end 40 | 41 | #endif 42 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "UIView+WebCacheOperation.h" 10 | 11 | #if SD_UIKIT || SD_MAC 12 | 13 | #import "objc/runtime.h" 14 | 15 | static char loadOperationKey; 16 | 17 | typedef NSMutableDictionary SDOperationsDictionary; 18 | 19 | @implementation UIView (WebCacheOperation) 20 | 21 | - (SDOperationsDictionary *)operationDictionary { 22 | SDOperationsDictionary *operations = objc_getAssociatedObject(self, &loadOperationKey); 23 | if (operations) { 24 | return operations; 25 | } 26 | operations = [NSMutableDictionary dictionary]; 27 | objc_setAssociatedObject(self, &loadOperationKey, operations, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 28 | return operations; 29 | } 30 | 31 | - (void)sd_setImageLoadOperation:(nullable id)operation forKey:(nullable NSString *)key { 32 | if (key) { 33 | [self sd_cancelImageLoadOperationWithKey:key]; 34 | if (operation) { 35 | SDOperationsDictionary *operationDictionary = [self operationDictionary]; 36 | operationDictionary[key] = operation; 37 | } 38 | } 39 | } 40 | 41 | - (void)sd_cancelImageLoadOperationWithKey:(nullable NSString *)key { 42 | // Cancel in progress downloader from queue 43 | SDOperationsDictionary *operationDictionary = [self operationDictionary]; 44 | id operations = operationDictionary[key]; 45 | if (operations) { 46 | if ([operations isKindOfClass:[NSArray class]]) { 47 | for (id operation in operations) { 48 | if (operation) { 49 | [operation cancel]; 50 | } 51 | } 52 | } else if ([operations conformsToProtocol:@protocol(SDWebImageOperation)]){ 53 | [(id) operations cancel]; 54 | } 55 | [operationDictionary removeObjectForKey:key]; 56 | } 57 | } 58 | 59 | - (void)sd_removeImageLoadOperationWithKey:(nullable NSString *)key { 60 | if (key) { 61 | SDOperationsDictionary *operationDictionary = [self operationDictionary]; 62 | [operationDictionary removeObjectForKey:key]; 63 | } 64 | } 65 | 66 | @end 67 | 68 | #endif 69 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SnapKit/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SnapKit/README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | SnapKit is a DSL to make Auto Layout easy on both iOS and OS X. 4 | 5 | [![Build Status](https://travis-ci.org/SnapKit/SnapKit.svg)](https://travis-ci.org/SnapKit/SnapKit) 6 | [![Platform](https://img.shields.io/cocoapods/p/SnapKit.svg?style=flat)](https://github.com/SnapKit/SnapKit) 7 | [![Cocoapods Compatible](https://img.shields.io/cocoapods/v/SnapKit.svg)](https://cocoapods.org/pods/SnapKit) 8 | [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) 9 | 10 | #### ⚠️ **To use with Swift 3.x please ensure you are using >= 3.0.0** ⚠️ 11 | #### ⚠️ **To use with Swift 4.x please ensure you are using >= 4.0.0** ⚠️ 12 | 13 | ## Contents 14 | 15 | - [Requirements](#requirements) 16 | - [Migration Guides](#migration-guides) 17 | - [Communication](#communication) 18 | - [Installation](#installation) 19 | - [Usage](#usage) 20 | - [Credits](#credits) 21 | - [License](#license) 22 | 23 | ## Requirements 24 | 25 | - iOS 8.0+ / Mac OS X 10.11+ / tvOS 9.0+ 26 | - Xcode 9.0+ 27 | - Swift 3.0+ 28 | 29 | ## Communication 30 | 31 | - If you **need help**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/snapkit). (Tag 'snapkit') 32 | - If you'd like to **ask a general question**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/snapkit). 33 | - If you **found a bug**, open an issue. 34 | - If you **have a feature request**, open an issue. 35 | - If you **want to contribute**, submit a pull request. 36 | 37 | 38 | ## Installation 39 | 40 | ### CocoaPods 41 | 42 | [CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command: 43 | 44 | ```bash 45 | $ gem install cocoapods 46 | ``` 47 | 48 | > CocoaPods 1.1.0+ is required to build SnapKit 4.0.0+. 49 | 50 | To integrate SnapKit into your Xcode project using CocoaPods, specify it in your `Podfile`: 51 | 52 | ```ruby 53 | source 'https://github.com/CocoaPods/Specs.git' 54 | platform :ios, '10.0' 55 | use_frameworks! 56 | 57 | target '' do 58 | pod 'SnapKit', '~> 4.0.0' 59 | end 60 | ``` 61 | 62 | Then, run the following command: 63 | 64 | ```bash 65 | $ pod install 66 | ``` 67 | 68 | ### Carthage 69 | 70 | [Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. 71 | 72 | You can install Carthage with [Homebrew](http://brew.sh/) using the following command: 73 | 74 | ```bash 75 | $ brew update 76 | $ brew install carthage 77 | ``` 78 | 79 | To integrate SnapKit into your Xcode project using Carthage, specify it in your `Cartfile`: 80 | 81 | ```ogdl 82 | github "SnapKit/SnapKit" ~> 4.0.0 83 | ``` 84 | 85 | Run `carthage update` to build the framework and drag the built `SnapKit.framework` into your Xcode project. 86 | 87 | ### Manually 88 | 89 | If you prefer not to use either of the aforementioned dependency managers, you can integrate SnapKit into your project manually. 90 | 91 | --- 92 | 93 | ## Usage 94 | 95 | ### Quick Start 96 | 97 | ```swift 98 | import SnapKit 99 | 100 | class MyViewController: UIViewController { 101 | 102 | lazy var box = UIView() 103 | 104 | override func viewDidLoad() { 105 | super.viewDidLoad() 106 | 107 | self.view.addSubview(box) 108 | box.snp.makeConstraints { (make) -> Void in 109 | make.width.height.equalTo(50) 110 | make.center.equalTo(self.view) 111 | } 112 | } 113 | 114 | } 115 | ``` 116 | 117 | ### Resources 118 | 119 | - [Documentation](http://snapkit.io/docs/) 120 | - [F.A.Q.](http://snapkit.io/faq/) 121 | 122 | ## Credits 123 | 124 | - Robert Payne ([@robertjpayne](https://twitter.com/robertjpayne)) 125 | - Many other contributors 126 | 127 | ## License 128 | 129 | SnapKit is released under the MIT license. See LICENSE for details. 130 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SnapKit/Source/ConstraintConfig.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | public typealias ConstraintInterfaceLayoutDirection = UIUserInterfaceLayoutDirection 27 | #else 28 | import AppKit 29 | public typealias ConstraintInterfaceLayoutDirection = NSUserInterfaceLayoutDirection 30 | #endif 31 | 32 | 33 | public struct ConstraintConfig { 34 | 35 | public static var interfaceLayoutDirection: ConstraintInterfaceLayoutDirection = .leftToRight 36 | 37 | } 38 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SnapKit/Source/ConstraintDescription.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | public class ConstraintDescription { 32 | 33 | internal let item: LayoutConstraintItem 34 | internal var attributes: ConstraintAttributes 35 | internal var relation: ConstraintRelation? = nil 36 | internal var sourceLocation: (String, UInt)? = nil 37 | internal var label: String? = nil 38 | internal var related: ConstraintItem? = nil 39 | internal var multiplier: ConstraintMultiplierTarget = 1.0 40 | internal var constant: ConstraintConstantTarget = 0.0 41 | internal var priority: ConstraintPriorityTarget = 1000.0 42 | internal lazy var constraint: Constraint? = { 43 | guard let relation = self.relation, 44 | let related = self.related, 45 | let sourceLocation = self.sourceLocation else { 46 | return nil 47 | } 48 | let from = ConstraintItem(target: self.item, attributes: self.attributes) 49 | 50 | return Constraint( 51 | from: from, 52 | to: related, 53 | relation: relation, 54 | sourceLocation: sourceLocation, 55 | label: self.label, 56 | multiplier: self.multiplier, 57 | constant: self.constant, 58 | priority: self.priority 59 | ) 60 | }() 61 | 62 | // MARK: Initialization 63 | 64 | internal init(item: LayoutConstraintItem, attributes: ConstraintAttributes) { 65 | self.item = item 66 | self.attributes = attributes 67 | } 68 | 69 | } 70 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SnapKit/Source/ConstraintInsetTarget.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | public protocol ConstraintInsetTarget: ConstraintConstantTarget { 32 | } 33 | 34 | extension Int: ConstraintInsetTarget { 35 | } 36 | 37 | extension UInt: ConstraintInsetTarget { 38 | } 39 | 40 | extension Float: ConstraintInsetTarget { 41 | } 42 | 43 | extension Double: ConstraintInsetTarget { 44 | } 45 | 46 | extension CGFloat: ConstraintInsetTarget { 47 | } 48 | 49 | extension ConstraintInsets: ConstraintInsetTarget { 50 | } 51 | 52 | extension ConstraintInsetTarget { 53 | 54 | internal var constraintInsetTargetValue: ConstraintInsets { 55 | if let amount = self as? ConstraintInsets { 56 | return amount 57 | } else if let amount = self as? Float { 58 | return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) 59 | } else if let amount = self as? Double { 60 | return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) 61 | } else if let amount = self as? CGFloat { 62 | return ConstraintInsets(top: amount, left: amount, bottom: amount, right: amount) 63 | } else if let amount = self as? Int { 64 | return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) 65 | } else if let amount = self as? UInt { 66 | return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) 67 | } else { 68 | return ConstraintInsets(top: 0, left: 0, bottom: 0, right: 0) 69 | } 70 | } 71 | 72 | } 73 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SnapKit/Source/ConstraintInsets.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if os(iOS) || os(tvOS) 32 | public typealias ConstraintInsets = UIEdgeInsets 33 | #else 34 | public typealias ConstraintInsets = NSEdgeInsets 35 | #endif 36 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SnapKit/Source/ConstraintItem.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | public final class ConstraintItem { 32 | 33 | internal weak var target: AnyObject? 34 | internal let attributes: ConstraintAttributes 35 | 36 | internal init(target: AnyObject?, attributes: ConstraintAttributes) { 37 | self.target = target 38 | self.attributes = attributes 39 | } 40 | 41 | internal var layoutConstraintItem: LayoutConstraintItem? { 42 | return self.target as? LayoutConstraintItem 43 | } 44 | 45 | } 46 | 47 | public func ==(lhs: ConstraintItem, rhs: ConstraintItem) -> Bool { 48 | // pointer equality 49 | guard lhs !== rhs else { 50 | return true 51 | } 52 | 53 | // must both have valid targets and identical attributes 54 | guard let target1 = lhs.target, 55 | let target2 = rhs.target, 56 | target1 === target2 && lhs.attributes == rhs.attributes else { 57 | return false 58 | } 59 | 60 | return true 61 | } 62 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SnapKit/Source/ConstraintLayoutGuide+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #endif 27 | 28 | 29 | @available(iOS 9.0, OSX 10.11, *) 30 | public extension ConstraintLayoutGuide { 31 | 32 | public var snp: ConstraintLayoutGuideDSL { 33 | return ConstraintLayoutGuideDSL(guide: self) 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SnapKit/Source/ConstraintLayoutGuide.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if os(iOS) || os(tvOS) 32 | @available(iOS 9.0, *) 33 | public typealias ConstraintLayoutGuide = UILayoutGuide 34 | #else 35 | @available(OSX 10.11, *) 36 | public typealias ConstraintLayoutGuide = NSLayoutGuide 37 | #endif 38 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SnapKit/Source/ConstraintLayoutGuideDSL.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | @available(iOS 9.0, OSX 10.11, *) 32 | public struct ConstraintLayoutGuideDSL: ConstraintAttributesDSL { 33 | 34 | @discardableResult 35 | public func prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] { 36 | return ConstraintMaker.prepareConstraints(item: self.guide, closure: closure) 37 | } 38 | 39 | public func makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { 40 | ConstraintMaker.makeConstraints(item: self.guide, closure: closure) 41 | } 42 | 43 | public func remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { 44 | ConstraintMaker.remakeConstraints(item: self.guide, closure: closure) 45 | } 46 | 47 | public func updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { 48 | ConstraintMaker.updateConstraints(item: self.guide, closure: closure) 49 | } 50 | 51 | public func removeConstraints() { 52 | ConstraintMaker.removeConstraints(item: self.guide) 53 | } 54 | 55 | public var target: AnyObject? { 56 | return self.guide 57 | } 58 | 59 | internal let guide: ConstraintLayoutGuide 60 | 61 | internal init(guide: ConstraintLayoutGuide) { 62 | self.guide = guide 63 | 64 | } 65 | 66 | } 67 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SnapKit/Source/ConstraintLayoutSupport.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if os(iOS) || os(tvOS) 32 | @available(iOS 8.0, *) 33 | public typealias ConstraintLayoutSupport = UILayoutSupport 34 | #else 35 | public class ConstraintLayoutSupport {} 36 | #endif 37 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SnapKit/Source/ConstraintLayoutSupportDSL.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | @available(iOS 8.0, *) 32 | public struct ConstraintLayoutSupportDSL: ConstraintDSL { 33 | 34 | public var target: AnyObject? { 35 | return self.support 36 | } 37 | 38 | internal let support: ConstraintLayoutSupport 39 | 40 | internal init(support: ConstraintLayoutSupport) { 41 | self.support = support 42 | 43 | } 44 | 45 | public var top: ConstraintItem { 46 | return ConstraintItem(target: self.target, attributes: ConstraintAttributes.top) 47 | } 48 | 49 | public var bottom: ConstraintItem { 50 | return ConstraintItem(target: self.target, attributes: ConstraintAttributes.bottom) 51 | } 52 | 53 | public var height: ConstraintItem { 54 | return ConstraintItem(target: self.target, attributes: ConstraintAttributes.height) 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SnapKit/Source/ConstraintMakerEditable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | public class ConstraintMakerEditable: ConstraintMakerPriortizable { 32 | 33 | @discardableResult 34 | public func multipliedBy(_ amount: ConstraintMultiplierTarget) -> ConstraintMakerEditable { 35 | self.description.multiplier = amount 36 | return self 37 | } 38 | 39 | @discardableResult 40 | public func dividedBy(_ amount: ConstraintMultiplierTarget) -> ConstraintMakerEditable { 41 | return self.multipliedBy(1.0 / amount.constraintMultiplierTargetValue) 42 | } 43 | 44 | @discardableResult 45 | public func offset(_ amount: ConstraintOffsetTarget) -> ConstraintMakerEditable { 46 | self.description.constant = amount.constraintOffsetTargetValue 47 | return self 48 | } 49 | 50 | @discardableResult 51 | public func inset(_ amount: ConstraintInsetTarget) -> ConstraintMakerEditable { 52 | self.description.constant = amount.constraintInsetTargetValue 53 | return self 54 | } 55 | 56 | } 57 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SnapKit/Source/ConstraintMakerFinalizable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | public class ConstraintMakerFinalizable { 32 | 33 | internal let description: ConstraintDescription 34 | 35 | internal init(_ description: ConstraintDescription) { 36 | self.description = description 37 | } 38 | 39 | @discardableResult 40 | public func labeled(_ label: String) -> ConstraintMakerFinalizable { 41 | self.description.label = label 42 | return self 43 | } 44 | 45 | public var constraint: Constraint { 46 | return self.description.constraint! 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SnapKit/Source/ConstraintMakerPriortizable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | public class ConstraintMakerPriortizable: ConstraintMakerFinalizable { 32 | 33 | @discardableResult 34 | public func priority(_ amount: ConstraintPriority) -> ConstraintMakerFinalizable { 35 | self.description.priority = amount.value 36 | return self 37 | } 38 | 39 | @discardableResult 40 | public func priority(_ amount: ConstraintPriorityTarget) -> ConstraintMakerFinalizable { 41 | self.description.priority = amount 42 | return self 43 | } 44 | 45 | @available(*, deprecated:3.0, message:"Use priority(.required) instead.") 46 | @discardableResult 47 | public func priorityRequired() -> ConstraintMakerFinalizable { 48 | return self.priority(.required) 49 | } 50 | 51 | @available(*, deprecated:3.0, message:"Use priority(.high) instead.") 52 | @discardableResult 53 | public func priorityHigh() -> ConstraintMakerFinalizable { 54 | return self.priority(.high) 55 | } 56 | 57 | @available(*, deprecated:3.0, message:"Use priority(.medium) instead.") 58 | @discardableResult 59 | public func priorityMedium() -> ConstraintMakerFinalizable { 60 | return self.priority(.medium) 61 | } 62 | 63 | @available(*, deprecated:3.0, message:"Use priority(.low) instead.") 64 | @discardableResult 65 | public func priorityLow() -> ConstraintMakerFinalizable { 66 | return self.priority(.low) 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SnapKit/Source/ConstraintMultiplierTarget.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | public protocol ConstraintMultiplierTarget { 32 | 33 | var constraintMultiplierTargetValue: CGFloat { get } 34 | 35 | } 36 | 37 | extension Int: ConstraintMultiplierTarget { 38 | 39 | public var constraintMultiplierTargetValue: CGFloat { 40 | return CGFloat(self) 41 | } 42 | 43 | } 44 | 45 | extension UInt: ConstraintMultiplierTarget { 46 | 47 | public var constraintMultiplierTargetValue: CGFloat { 48 | return CGFloat(self) 49 | } 50 | 51 | } 52 | 53 | extension Float: ConstraintMultiplierTarget { 54 | 55 | public var constraintMultiplierTargetValue: CGFloat { 56 | return CGFloat(self) 57 | } 58 | 59 | } 60 | 61 | extension Double: ConstraintMultiplierTarget { 62 | 63 | public var constraintMultiplierTargetValue: CGFloat { 64 | return CGFloat(self) 65 | } 66 | 67 | } 68 | 69 | extension CGFloat: ConstraintMultiplierTarget { 70 | 71 | public var constraintMultiplierTargetValue: CGFloat { 72 | return self 73 | } 74 | 75 | } 76 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SnapKit/Source/ConstraintOffsetTarget.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | public protocol ConstraintOffsetTarget: ConstraintConstantTarget { 32 | } 33 | 34 | extension Int: ConstraintOffsetTarget { 35 | } 36 | 37 | extension UInt: ConstraintOffsetTarget { 38 | } 39 | 40 | extension Float: ConstraintOffsetTarget { 41 | } 42 | 43 | extension Double: ConstraintOffsetTarget { 44 | } 45 | 46 | extension CGFloat: ConstraintOffsetTarget { 47 | } 48 | 49 | extension ConstraintOffsetTarget { 50 | 51 | internal var constraintOffsetTargetValue: CGFloat { 52 | let offset: CGFloat 53 | if let amount = self as? Float { 54 | offset = CGFloat(amount) 55 | } else if let amount = self as? Double { 56 | offset = CGFloat(amount) 57 | } else if let amount = self as? CGFloat { 58 | offset = CGFloat(amount) 59 | } else if let amount = self as? Int { 60 | offset = CGFloat(amount) 61 | } else if let amount = self as? UInt { 62 | offset = CGFloat(amount) 63 | } else { 64 | offset = 0.0 65 | } 66 | return offset 67 | } 68 | 69 | } 70 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SnapKit/Source/ConstraintPriorityTarget.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | public protocol ConstraintPriorityTarget { 32 | 33 | var constraintPriorityTargetValue: Float { get } 34 | 35 | } 36 | 37 | extension Int: ConstraintPriorityTarget { 38 | 39 | public var constraintPriorityTargetValue: Float { 40 | return Float(self) 41 | } 42 | 43 | } 44 | 45 | extension UInt: ConstraintPriorityTarget { 46 | 47 | public var constraintPriorityTargetValue: Float { 48 | return Float(self) 49 | } 50 | 51 | } 52 | 53 | extension Float: ConstraintPriorityTarget { 54 | 55 | public var constraintPriorityTargetValue: Float { 56 | return self 57 | } 58 | 59 | } 60 | 61 | extension Double: ConstraintPriorityTarget { 62 | 63 | public var constraintPriorityTargetValue: Float { 64 | return Float(self) 65 | } 66 | 67 | } 68 | 69 | extension CGFloat: ConstraintPriorityTarget { 70 | 71 | public var constraintPriorityTargetValue: Float { 72 | return Float(self) 73 | } 74 | 75 | } 76 | 77 | #if os(iOS) || os(tvOS) 78 | extension UILayoutPriority: ConstraintPriorityTarget { 79 | 80 | public var constraintPriorityTargetValue: Float { 81 | return self.rawValue 82 | } 83 | 84 | } 85 | #endif 86 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SnapKit/Source/ConstraintRelatableTarget.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | public protocol ConstraintRelatableTarget { 32 | } 33 | 34 | extension Int: ConstraintRelatableTarget { 35 | } 36 | 37 | extension UInt: ConstraintRelatableTarget { 38 | } 39 | 40 | extension Float: ConstraintRelatableTarget { 41 | } 42 | 43 | extension Double: ConstraintRelatableTarget { 44 | } 45 | 46 | extension CGFloat: ConstraintRelatableTarget { 47 | } 48 | 49 | extension CGSize: ConstraintRelatableTarget { 50 | } 51 | 52 | extension CGPoint: ConstraintRelatableTarget { 53 | } 54 | 55 | extension ConstraintInsets: ConstraintRelatableTarget { 56 | } 57 | 58 | extension ConstraintItem: ConstraintRelatableTarget { 59 | } 60 | 61 | extension ConstraintView: ConstraintRelatableTarget { 62 | } 63 | 64 | @available(iOS 9.0, OSX 10.11, *) 65 | extension ConstraintLayoutGuide: ConstraintRelatableTarget { 66 | } 67 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SnapKit/Source/ConstraintRelation.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | internal enum ConstraintRelation : Int { 32 | case equal = 1 33 | case lessThanOrEqual 34 | case greaterThanOrEqual 35 | 36 | internal var layoutRelation: LayoutRelation { 37 | get { 38 | switch(self) { 39 | case .equal: 40 | return .equal 41 | case .lessThanOrEqual: 42 | return .lessThanOrEqual 43 | case .greaterThanOrEqual: 44 | return .greaterThanOrEqual 45 | } 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SnapKit/Source/ConstraintView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if os(iOS) || os(tvOS) 32 | public typealias ConstraintView = UIView 33 | #else 34 | public typealias ConstraintView = NSView 35 | #endif 36 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SnapKit/Source/LayoutConstraint.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | public class LayoutConstraint : NSLayoutConstraint { 32 | 33 | public var label: String? { 34 | get { 35 | return self.identifier 36 | } 37 | set { 38 | self.identifier = newValue 39 | } 40 | } 41 | 42 | internal weak var constraint: Constraint? = nil 43 | 44 | } 45 | 46 | internal func ==(lhs: LayoutConstraint, rhs: LayoutConstraint) -> Bool { 47 | guard lhs.firstItem === rhs.firstItem && 48 | lhs.secondItem === rhs.secondItem && 49 | lhs.firstAttribute == rhs.firstAttribute && 50 | lhs.secondAttribute == rhs.secondAttribute && 51 | lhs.relation == rhs.relation && 52 | lhs.priority == rhs.priority && 53 | lhs.multiplier == rhs.multiplier else { 54 | return false 55 | } 56 | return true 57 | } 58 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SnapKit/Source/LayoutConstraintItem.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | public protocol LayoutConstraintItem: class { 32 | } 33 | 34 | @available(iOS 9.0, OSX 10.11, *) 35 | extension ConstraintLayoutGuide : LayoutConstraintItem { 36 | } 37 | 38 | extension ConstraintView : LayoutConstraintItem { 39 | } 40 | 41 | 42 | extension LayoutConstraintItem { 43 | 44 | internal func prepare() { 45 | if let view = self as? ConstraintView { 46 | view.translatesAutoresizingMaskIntoConstraints = false 47 | } 48 | } 49 | 50 | internal var superview: ConstraintView? { 51 | if let view = self as? ConstraintView { 52 | return view.superview 53 | } 54 | 55 | if #available(iOS 9.0, OSX 10.11, *), let guide = self as? ConstraintLayoutGuide { 56 | return guide.owningView 57 | } 58 | 59 | return nil 60 | } 61 | internal var constraints: [Constraint] { 62 | return self.constraintsSet.allObjects as! [Constraint] 63 | } 64 | 65 | internal func add(constraints: [Constraint]) { 66 | let constraintsSet = self.constraintsSet 67 | for constraint in constraints { 68 | constraintsSet.add(constraint) 69 | } 70 | } 71 | 72 | internal func remove(constraints: [Constraint]) { 73 | let constraintsSet = self.constraintsSet 74 | for constraint in constraints { 75 | constraintsSet.remove(constraint) 76 | } 77 | } 78 | 79 | private var constraintsSet: NSMutableSet { 80 | let constraintsSet: NSMutableSet 81 | 82 | if let existing = objc_getAssociatedObject(self, &constraintsKey) as? NSMutableSet { 83 | constraintsSet = existing 84 | } else { 85 | constraintsSet = NSMutableSet() 86 | objc_setAssociatedObject(self, &constraintsKey, constraintsSet, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) 87 | } 88 | return constraintsSet 89 | 90 | } 91 | 92 | } 93 | private var constraintsKey: UInt8 = 0 94 | -------------------------------------------------------------------------------- /CleanTalk/Pods/SnapKit/Source/UILayoutSupport+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #endif 27 | 28 | 29 | @available(iOS 8.0, *) 30 | public extension ConstraintLayoutSupport { 31 | 32 | public var snp: ConstraintLayoutSupportDSL { 33 | return ConstraintLayoutSupportDSL(support: self) 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/Alamofire/Alamofire-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Alamofire : NSObject 3 | @end 4 | @implementation PodsDummy_Alamofire 5 | @end 6 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/Alamofire/Alamofire-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/Alamofire/Alamofire-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double AlamofireVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char AlamofireVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/Alamofire/Alamofire.modulemap: -------------------------------------------------------------------------------- 1 | framework module Alamofire { 2 | umbrella header "Alamofire-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/Alamofire/Alamofire.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Alamofire 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/Alamofire 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 11 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/Alamofire/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 4.3.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/AlamofireObjectMapper/AlamofireObjectMapper-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_AlamofireObjectMapper : NSObject 3 | @end 4 | @implementation PodsDummy_AlamofireObjectMapper 5 | @end 6 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/AlamofireObjectMapper/AlamofireObjectMapper-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/AlamofireObjectMapper/AlamofireObjectMapper-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double AlamofireObjectMapperVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char AlamofireObjectMapperVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/AlamofireObjectMapper/AlamofireObjectMapper.modulemap: -------------------------------------------------------------------------------- 1 | framework module AlamofireObjectMapper { 2 | umbrella header "AlamofireObjectMapper-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/AlamofireObjectMapper/AlamofireObjectMapper.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AlamofireObjectMapper 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/AlamofireObjectMapper 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 12 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/AlamofireObjectMapper/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 4.0.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/ObjectMapper/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 2.2.2 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/ObjectMapper/ObjectMapper-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_ObjectMapper : NSObject 3 | @end 4 | @implementation PodsDummy_ObjectMapper 5 | @end 6 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/ObjectMapper/ObjectMapper-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/ObjectMapper/ObjectMapper-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double ObjectMapperVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char ObjectMapperVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/ObjectMapper/ObjectMapper.modulemap: -------------------------------------------------------------------------------- 1 | framework module ObjectMapper { 2 | umbrella header "ObjectMapper-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/ObjectMapper/ObjectMapper.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/ObjectMapper 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 11 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/Pods-CleanTalk/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/Pods-CleanTalk/Pods-CleanTalk-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_CleanTalk : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_CleanTalk 5 | @end 6 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/Pods-CleanTalk/Pods-CleanTalk-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_CleanTalkVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_CleanTalkVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/Pods-CleanTalk/Pods-CleanTalk.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/AlamofireObjectMapper" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/AlamofireObjectMapper/AlamofireObjectMapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper/ObjectMapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "Alamofire" -framework "AlamofireObjectMapper" -framework "ImageIO" -framework "ObjectMapper" -framework "SDWebImage" -framework "SnapKit" 7 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/Pods-CleanTalk/Pods-CleanTalk.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_CleanTalk { 2 | umbrella header "Pods-CleanTalk-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/Pods-CleanTalk/Pods-CleanTalk.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/AlamofireObjectMapper" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/AlamofireObjectMapper/AlamofireObjectMapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper/ObjectMapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "Alamofire" -framework "AlamofireObjectMapper" -framework "ImageIO" -framework "ObjectMapper" -framework "SDWebImage" -framework "SnapKit" 7 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/SDWebImage/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 4.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SDWebImage : NSObject 3 | @end 4 | @implementation PodsDummy_SDWebImage 5 | @end 6 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/SDWebImage/SDWebImage-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "NSButton+WebCache.h" 14 | #import "NSData+ImageContentType.h" 15 | #import "NSImage+Compatibility.h" 16 | #import "SDAnimatedImage.h" 17 | #import "SDAnimatedImagePlayer.h" 18 | #import "SDAnimatedImageRep.h" 19 | #import "SDAnimatedImageView+WebCache.h" 20 | #import "SDAnimatedImageView.h" 21 | #import "SDDiskCache.h" 22 | #import "SDGraphicsImageRenderer.h" 23 | #import "SDImageAPNGCoder.h" 24 | #import "SDImageCache.h" 25 | #import "SDImageCacheConfig.h" 26 | #import "SDImageCacheDefine.h" 27 | #import "SDImageCachesManager.h" 28 | #import "SDImageCoder.h" 29 | #import "SDImageCoderHelper.h" 30 | #import "SDImageCodersManager.h" 31 | #import "SDImageFrame.h" 32 | #import "SDImageGIFCoder.h" 33 | #import "SDImageGraphics.h" 34 | #import "SDImageHEICCoder.h" 35 | #import "SDImageIOAnimatedCoder.h" 36 | #import "SDImageIOCoder.h" 37 | #import "SDImageLoader.h" 38 | #import "SDImageLoadersManager.h" 39 | #import "SDImageTransformer.h" 40 | #import "SDMemoryCache.h" 41 | #import "SDWebImageCacheKeyFilter.h" 42 | #import "SDWebImageCacheSerializer.h" 43 | #import "SDWebImageCompat.h" 44 | #import "SDWebImageDefine.h" 45 | #import "SDWebImageDownloader.h" 46 | #import "SDWebImageDownloaderConfig.h" 47 | #import "SDWebImageDownloaderDecryptor.h" 48 | #import "SDWebImageDownloaderOperation.h" 49 | #import "SDWebImageDownloaderRequestModifier.h" 50 | #import "SDWebImageDownloaderResponseModifier.h" 51 | #import "SDWebImageError.h" 52 | #import "SDWebImageIndicator.h" 53 | #import "SDWebImageManager.h" 54 | #import "SDWebImageOperation.h" 55 | #import "SDWebImageOptionsProcessor.h" 56 | #import "SDWebImagePrefetcher.h" 57 | #import "SDWebImageTransition.h" 58 | #import "UIButton+WebCache.h" 59 | #import "UIImage+ExtendedCacheData.h" 60 | #import "UIImage+ForceDecode.h" 61 | #import "UIImage+GIF.h" 62 | #import "UIImage+MemoryCacheCost.h" 63 | #import "UIImage+Metadata.h" 64 | #import "UIImage+MultiFormat.h" 65 | #import "UIImage+Transform.h" 66 | #import "UIImageView+HighlightedWebCache.h" 67 | #import "UIImageView+WebCache.h" 68 | #import "UIView+WebCache.h" 69 | #import "UIView+WebCacheOperation.h" 70 | #import "SDWebImage.h" 71 | 72 | FOUNDATION_EXPORT double SDWebImageVersionNumber; 73 | FOUNDATION_EXPORT const unsigned char SDWebImageVersionString[]; 74 | 75 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/SDWebImage/SDWebImage.modulemap: -------------------------------------------------------------------------------- 1 | framework module SDWebImage { 2 | umbrella header "SDWebImage-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage 2 | DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = NO 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_LDFLAGS = $(inherited) -framework "ImageIO" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SDWebImage 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | SUPPORTS_MACCATALYST = YES 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/SnapKit/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 3.1.2 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/SnapKit/SnapKit-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SnapKit : NSObject 3 | @end 4 | @implementation PodsDummy_SnapKit 5 | @end 6 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/SnapKit/SnapKit-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/SnapKit/SnapKit-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double SnapKitVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char SnapKitVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/SnapKit/SnapKit.modulemap: -------------------------------------------------------------------------------- 1 | framework module SnapKit { 2 | umbrella header "SnapKit-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /CleanTalk/Pods/Target Support Files/SnapKit/SnapKit.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapKit 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ios-app 2 | ======= 3 | iOS app to control comments/signups/contacts/orders on a web-site via CleanTalk anti-spam app. 4 | --------------------------------------------------------------------------------