summaryrefslogtreecommitdiff
path: root/Juick/Helpers
diff options
context:
space:
mode:
Diffstat (limited to 'Juick/Helpers')
-rw-r--r--Juick/Helpers/ColorScheme.h17
-rw-r--r--Juick/Helpers/ColorScheme.m37
-rw-r--r--Juick/Helpers/NSURL+PathParameters.h37
-rw-r--r--Juick/Helpers/NSURL+PathParameters.m173
-rw-r--r--Juick/Helpers/UIImage+Utils.h19
-rw-r--r--Juick/Helpers/UIImage+Utils.m69
6 files changed, 352 insertions, 0 deletions
diff --git a/Juick/Helpers/ColorScheme.h b/Juick/Helpers/ColorScheme.h
new file mode 100644
index 0000000..de69689
--- /dev/null
+++ b/Juick/Helpers/ColorScheme.h
@@ -0,0 +1,17 @@
+//
+// Colors.h
+// Juick
+//
+// Created by Vitaly Takmazov on 05.11.13.
+// Copyright (c) 2013 com.juick. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface ColorScheme : NSObject
+
++ (UIColor *)colorWithHex:(UInt32)col;
+
++(UIColor *) mainBackground;
++(UIColor *) linkColor;
+@end
diff --git a/Juick/Helpers/ColorScheme.m b/Juick/Helpers/ColorScheme.m
new file mode 100644
index 0000000..8417489
--- /dev/null
+++ b/Juick/Helpers/ColorScheme.m
@@ -0,0 +1,37 @@
+//
+// Colors.m
+// Juick
+//
+// Created by Vitaly Takmazov on 05.11.13.
+// Copyright (c) 2013 com.juick. All rights reserved.
+//
+
+#import "ColorScheme.h"
+
+@implementation ColorScheme
+
++ (void) initialize
+{
+ [super initialize];
+}
+
+// takes 0x123456
++ (UIColor *)colorWithHex:(UInt32)col {
+ unsigned char r, g, b;
+ b = col & 0xFF;
+ g = (col >> 8) & 0xFF;
+ r = (col >> 16) & 0xFF;
+ return [UIColor colorWithRed:(float)r/255.0f green:(float)g/255.0f blue:(float)b/255.0f alpha:1];
+}
+
+
++ (UIColor *) mainBackground {
+ return [UIColor colorWithRed:238/255.0f green:238/255.0f blue:229/255.0f alpha:1.0f];
+}
+
++ (UIColor *) linkColor {
+ return [self colorWithHex:0x006699];
+}
+
+
+@end
diff --git a/Juick/Helpers/NSURL+PathParameters.h b/Juick/Helpers/NSURL+PathParameters.h
new file mode 100644
index 0000000..73fc004
--- /dev/null
+++ b/Juick/Helpers/NSURL+PathParameters.h
@@ -0,0 +1,37 @@
+//
+// NSURL+PathParameters.h
+//
+// Created by Johan Kool on 27/9/2011.
+// Copyright 2011 Koolistov Pte. Ltd. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification, are
+// permitted provided that the following conditions are met:
+//
+// * Redistributions of source code must retain the above copyright notice, this list of
+// conditions and the following disclaimer.
+// * Neither the name of KOOLISTOV PTE. LTD. nor the names of its contributors may be used to
+// endorse or promote products derived from this software without specific prior written
+// permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+// THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+// OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+
+#import <Foundation/Foundation.h>
+
+@interface NSURL (PathParameters)
+
+- (NSURL *)URLByReplacingPathWithPath:(NSString *)path;
+- (NSURL *)URLByAppendingPathWithRelativePath:(NSString *)path;
+- (NSURL *)URLByAppendingParameters:(NSDictionary *)parameters;
+- (NSURL *)URLByAppendingParameterName:(NSString *)parameter value:(id)value;
+
+@end
diff --git a/Juick/Helpers/NSURL+PathParameters.m b/Juick/Helpers/NSURL+PathParameters.m
new file mode 100644
index 0000000..83a55bb
--- /dev/null
+++ b/Juick/Helpers/NSURL+PathParameters.m
@@ -0,0 +1,173 @@
+//
+// NSURL+PathParameters.m
+//
+// Created by Johan Kool on 27/9/2011.
+// Copyright 2011 Koolistov Pte. Ltd. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification, are
+// permitted provided that the following conditions are met:
+//
+// * Redistributions of source code must retain the above copyright notice, this list of
+// conditions and the following disclaimer.
+// * Neither the name of KOOLISTOV PTE. LTD. nor the names of its contributors may be used to
+// endorse or promote products derived from this software without specific prior written
+// permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+// THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+// OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+#import "NSURL+PathParameters.h"
+
+@interface NSString (URLParameters)
+
+- (NSString *)stringByEscapingForURLArgument;
+
+@end
+
+@implementation NSString (URLParameters)
+
+- (NSString *)stringByEscapingForURLArgument {
+ // Encode all the reserved characters, per RFC 3986 (<http://www.ietf.org/rfc/rfc3986.txt>)
+ NSString *escapedString = (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
+ (CFStringRef)self,
+ NULL,
+ (CFStringRef)@"!*'\"();:@&=+$,/?%#[] ",
+ kCFStringEncodingUTF8);
+ return [escapedString copy];
+}
+
+@end
+
+@implementation NSURL (PathParameters)
+
+- (NSURL *)URLByReplacingPathWithPath:(NSString *)path {
+ // scheme://username:password@domain:port/path?query_string#fragment_id
+
+ // Chop off path, query and fragment from absoluteString, then add new path and put back query and fragment
+
+ NSString *absoluteString = [self absoluteString];
+ NSUInteger endIndex = [absoluteString length];
+
+ NSString *fragment = [self fragment];
+ if (fragment) {
+ endIndex -= [fragment length];
+ endIndex--; // The # character
+ }
+
+ NSString *query = [self query];
+ if (query) {
+ endIndex -= [query length];
+ endIndex--; // The ? character
+ }
+
+ // Check if the last character of the path is a slash (range must be valid as endIndex must be smaller or equal to length)
+ BOOL trailingSlashOnPath = [[absoluteString substringWithRange:NSMakeRange(endIndex - 1, 1)] isEqualToString:@"/"];
+
+ NSString *originalPath = [self path]; // This method strips any trailing slash "/"
+ if (originalPath) {
+ endIndex -= [originalPath length];
+ if (trailingSlashOnPath && [originalPath length] > 1) { // Don't get confused with the starting slash
+ endIndex--;
+ }
+ }
+
+ absoluteString = [absoluteString substringToIndex:endIndex];
+ absoluteString = [absoluteString stringByAppendingString:path];
+ if (query) {
+ absoluteString = [absoluteString stringByAppendingString:@"?"];
+ absoluteString = [absoluteString stringByAppendingString:query];
+ }
+ if (fragment) {
+ absoluteString = [absoluteString stringByAppendingString:@"#"];
+ absoluteString = [absoluteString stringByAppendingString:fragment];
+ }
+
+ return [NSURL URLWithString:absoluteString];
+}
+
+- (NSURL *)URLByAppendingPathWithRelativePath:(NSString *)path {
+ NSString *originalPath = [self path];
+ NSString *combinedPath = [[originalPath stringByAppendingPathComponent:path] stringByStandardizingPath];
+ // Don't standardize away a trailing slash
+ if ([path length] > 1 && [path hasSuffix:@"/"]) {
+ combinedPath = [combinedPath stringByAppendingString:@"/"];
+ }
+ return [self URLByReplacingPathWithPath:combinedPath];
+}
+
+- (NSURL *)URLByAppendingParameters:(NSDictionary *)parameters {
+ NSMutableString *query = [[self query] mutableCopy];
+
+ if (!query) {
+ query = [NSMutableString stringWithString:@""];
+ }
+
+ // Sort parameters to be appended so that our solution is stable (and testable)
+ NSArray *parameterNames = [parameters allKeys];
+ parameterNames = [parameterNames sortedArrayUsingSelector:@selector(compare:)];
+
+ for (NSString *parameterName in parameterNames) {
+ id value = [parameters objectForKey:parameterName];
+ NSAssert3([parameterName isKindOfClass:[NSString class]], @"Got '%@' of type %@ as key for parameter with value '%@'. Expected an NSString.", parameterName, NSStringFromClass([parameterName class]), value);
+
+ // The value needs to be an NSString, or be able to give us an NSString
+ if (![value isKindOfClass:[NSString class]]) {
+ if ([value respondsToSelector:@selector(stringValue)]) {
+ value = [value stringValue];
+ } else {
+ // Fallback to simply giving the description
+ value = [value description];
+ }
+ }
+
+ if ([query length] == 0) {
+ [query appendFormat:@"%@=%@", [parameterName stringByEscapingForURLArgument], [value stringByEscapingForURLArgument]];
+ } else {
+ [query appendFormat:@"&%@=%@", [parameterName stringByEscapingForURLArgument], [value stringByEscapingForURLArgument]];
+ }
+ }
+
+ // scheme://username:password@domain:port/path?query_string#fragment_id
+
+ // Chop off query and fragment from absoluteString, then add new query and put back fragment
+
+ NSString *absoluteString = [self absoluteString];
+ NSUInteger endIndex = [absoluteString length];
+
+ NSString *fragment = [self fragment];
+ if (fragment) {
+ endIndex -= [fragment length];
+ endIndex--; // The # character
+ }
+
+ NSString *originalQuery = [self query];
+ if (originalQuery) {
+ endIndex -= [originalQuery length];
+ endIndex--; // The ? character
+ }
+
+ absoluteString = [absoluteString substringToIndex:endIndex];
+ absoluteString = [absoluteString stringByAppendingString:@"?"];
+ absoluteString = [absoluteString stringByAppendingString:query];
+ if (fragment) {
+ absoluteString = [absoluteString stringByAppendingString:@"#"];
+ absoluteString = [absoluteString stringByAppendingString:fragment];
+ }
+
+ return [NSURL URLWithString:absoluteString];
+}
+
+- (NSURL *)URLByAppendingParameterName:(NSString *)parameter value:(id)value {
+ return [self URLByAppendingParameters:[NSDictionary dictionaryWithObjectsAndKeys:value, parameter, nil]];
+}
+
+
+@end
diff --git a/Juick/Helpers/UIImage+Utils.h b/Juick/Helpers/UIImage+Utils.h
new file mode 100644
index 0000000..8de91bf
--- /dev/null
+++ b/Juick/Helpers/UIImage+Utils.h
@@ -0,0 +1,19 @@
+//
+// UIImage+Utils.h
+// Juick
+//
+// Created by Vitaly on 01.02.14.
+// Copyright (c) 2014 com.juick. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface UIImage (Utils)
+
++ (UIImage*)imageWithImage:(UIImage *)image convertToWidth:(float)width covertToHeight:(float)height;
++ (UIImage*)imageWithImage:(UIImage *)image convertToHeight:(float)height;
++ (UIImage*)imageWithImage:(UIImage *)image convertToWidth:(float)width;
++ (UIImage*)imageWithImage:(UIImage *)image fitInsideWidth:(float)width fitInsideHeight:(float)height;
++ (UIImage*)imageWithImage:(UIImage *)image fitOutsideWidth:(float)width fitOutsideHeight:(float)height;
++ (UIImage*)imageWithImage:(UIImage *)image cropToWidth:(float)width cropToHeight:(float)height;
+@end
diff --git a/Juick/Helpers/UIImage+Utils.m b/Juick/Helpers/UIImage+Utils.m
new file mode 100644
index 0000000..4617c65
--- /dev/null
+++ b/Juick/Helpers/UIImage+Utils.m
@@ -0,0 +1,69 @@
+//
+// UIImage+Utils.m
+// Juick
+//
+// Created by Vitaly on 01.02.14.
+// Copyright (c) 2014 com.juick. All rights reserved.
+//
+
+#import "UIImage+Utils.h"
+
+@implementation UIImage (Utils)
+
++ (UIImage*)imageWithImage:(UIImage *)image convertToWidth:(float)width covertToHeight:(float)height {
+ CGSize size = CGSizeMake(width, height);
+ UIGraphicsBeginImageContext(size);
+ [image drawInRect:CGRectMake(0, 0, size.width, size.height)];
+ UIImage * newimage = UIGraphicsGetImageFromCurrentImageContext();
+ UIGraphicsEndImageContext();
+ return newimage;
+}
+
++ (UIImage*)imageWithImage:(UIImage *)image convertToHeight:(float)height {
+ float ratio = image.size.height / height;
+ float width = image.size.width / ratio;
+ CGSize size = CGSizeMake(width, height);
+ UIGraphicsBeginImageContext(size);
+ [image drawInRect:CGRectMake(0, 0, size.width, size.height)];
+ UIImage * newimage = UIGraphicsGetImageFromCurrentImageContext();
+ UIGraphicsEndImageContext();
+ return newimage;
+}
+
++ (UIImage*)imageWithImage:(UIImage *)image convertToWidth:(float)width {
+ float ratio = image.size.width / width;
+ float height = image.size.height / ratio;
+ CGSize size = CGSizeMake(width, height);
+ UIGraphicsBeginImageContext(size);
+ [image drawInRect:CGRectMake(0, 0, size.width, size.height)];
+ UIImage * newimage = UIGraphicsGetImageFromCurrentImageContext();
+ UIGraphicsEndImageContext();
+ return newimage;
+}
+
++ (UIImage*)imageWithImage:(UIImage *)image fitInsideWidth:(float)width fitInsideHeight:(float)height {
+ if (image.size.height >= image.size.width) {
+ return [UIImage imageWithImage:image convertToWidth:width];
+ } else {
+ return [UIImage imageWithImage:image convertToHeight:height];
+ }
+}
+
++ (UIImage*)imageWithImage:(UIImage *)image fitOutsideWidth:(float)width fitOutsideHeight:(float)height {
+ if (image.size.height >= image.size.width) {
+ return [UIImage imageWithImage:image convertToHeight:height];
+ } else {
+ return [UIImage imageWithImage:image convertToWidth:width];
+ }
+}
+
++ (UIImage*)imageWithImage:(UIImage *)image cropToWidth:(float)width cropToHeight:(float)height {
+ CGSize size = [image size];
+ CGRect rect = CGRectMake(((size.width-width) / 2.0f), ((size.height-height) / 2.0f), width, height);
+ CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], rect);
+ UIImage * img = [UIImage imageWithCGImage:imageRef];
+ CGImageRelease(imageRef);
+ return img;
+}
+
+@end