Skip to content

Commit

Permalink
Merge branch 'dev' of github.com:/overshare/overshare-kit
Browse files Browse the repository at this point in the history
  • Loading branch information
jaredsinclair committed Jan 24, 2014
2 parents a232d58 + dabba79 commit 0cdaaa1
Show file tree
Hide file tree
Showing 13 changed files with 266 additions and 97 deletions.
15 changes: 15 additions & 0 deletions Overshare Kit/NSString+OSKEmoji.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//
// NSString+OSKEmoji.h
// Unread
//
// Created by Jared on 1/18/14.
// Copyright (c) 2014 Nice Boy LLC. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSString (OSKEmoji)

- (NSUInteger)osk_lengthAdjustingForComposedCharacters;

@end
20 changes: 20 additions & 0 deletions Overshare Kit/NSString+OSKEmoji.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
//
// NSString+OSKEmoji.m
// Unread
//
// Created by Jared on 1/18/14.
// Copyright (c) 2014 Nice Boy LLC. All rights reserved.
//

#import "NSString+OSKEmoji.h"

@implementation NSString (OSKEmoji)

- (NSUInteger)osk_lengthAdjustingForComposedCharacters {
return [self lengthOfBytesUsingEncoding:NSUTF32StringEncoding]/4;
}

@end



16 changes: 14 additions & 2 deletions Overshare Kit/OSKAppDotNetActivity.m
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#import "OSKLogger.h"
#import "OSKManagedAccount.h"
#import "OSKShareableContentItem.h"
#import "NSString+OSKEmoji.h"

static NSInteger OSKAppDotNetActivity_MaxCharacterCount = 256;
static NSInteger OSKAppDotNetActivity_MaxUsernameLength = 20;
Expand All @@ -32,6 +33,7 @@ @interface OSKAppDotNetActivity ()
@implementation OSKAppDotNetActivity

@synthesize activeManagedAccount = _activeManagedAccount;
@synthesize remainingCharacterCount = _remainingCharacterCount;

- (instancetype)initWithContentItem:(OSKShareableContentItem *)item {
self = [super initWithContentItem:item];
Expand Down Expand Up @@ -109,9 +111,8 @@ - (BOOL)isReadyToPerform {
BOOL credentialPresent = (self.activeManagedAccount.credential != nil);
BOOL accountPresent = (self.activeManagedAccount != nil);

OSKMicroblogPostContentItem *contentItem = (OSKMicroblogPostContentItem *)self.contentItem;
NSInteger maxCharacterCount = [self maximumCharacterCount];
BOOL textIsValid = (contentItem.text.length > 0 && contentItem.text.length <= maxCharacterCount);
BOOL textIsValid = (0 <= self.remainingCharacterCount && self.remainingCharacterCount < maxCharacterCount);

return (appCredentialPreset && credentialPresent && accountPresent && textIsValid);
}
Expand Down Expand Up @@ -158,6 +159,17 @@ - (NSInteger)maximumUsernameLength {
return OSKAppDotNetActivity_MaxUsernameLength;
}

- (NSInteger)updateRemainingCharacterCount:(OSKMicroblogPostContentItem *)contentItem urlEntities:(NSArray *)urlEntities {

NSString *text = contentItem.text;
NSInteger composedLength = [text osk_lengthAdjustingForComposedCharacters];
NSInteger remainingCharacterCount = [self maximumCharacterCount] - composedLength;

[self setRemainingCharacterCount:remainingCharacterCount];

return remainingCharacterCount;
}

#pragma mark - ADNLogin

- (void)authenticateWithADNLogin:(OSKManagedAccountAuthenticationHandler)completion {
Expand Down
16 changes: 14 additions & 2 deletions Overshare Kit/OSKFacebookActivity.m
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#import "OSKShareableContentItem.h"
#import "OSKFacebookUtility.h"
#import "OSKApplicationCredential.h"
#import "NSString+OSKEmoji.h"

static NSInteger OSKFacebookActivity_MaxCharacterCount = 6000;
static NSInteger OSKFacebookActivity_MaxUsernameLength = 20;
Expand All @@ -20,6 +21,7 @@
@implementation OSKFacebookActivity

@synthesize activeSystemAccount = _activeSystemAccount;
@synthesize remainingCharacterCount = _remainingCharacterCount;

- (instancetype)initWithContentItem:(OSKShareableContentItem *)item {
self = [super initWithContentItem:item];
Expand Down Expand Up @@ -96,13 +98,23 @@ + (OSKPublishingViewControllerType)publishingViewControllerType {
- (BOOL)isReadyToPerform {
BOOL accountPresent = (self.activeSystemAccount != nil);

OSKMicroblogPostContentItem *contentItem = (OSKMicroblogPostContentItem *)self.contentItem;
NSInteger maxCharacterCount = [self maximumCharacterCount];
BOOL textIsValid = (contentItem.text.length > 0 && contentItem.text.length <= maxCharacterCount);
BOOL textIsValid = (0 <= self.remainingCharacterCount && self.remainingCharacterCount < maxCharacterCount);

return (accountPresent && textIsValid);
}

- (NSInteger)updateRemainingCharacterCount:(OSKMicroblogPostContentItem *)contentItem urlEntities:(NSArray *)urlEntities {

NSString *text = contentItem.text;
NSInteger composedLength = [text osk_lengthAdjustingForComposedCharacters];
NSInteger remainingCharacterCount = [self maximumCharacterCount] - composedLength;

[self setRemainingCharacterCount:remainingCharacterCount];

return remainingCharacterCount;
}

- (void)performActivity:(OSKActivityCompletionHandler)completion {
__weak OSKFacebookActivity *weakSelf = self;
UIBackgroundTaskIdentifier backgroundTaskIdentifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
Expand Down
6 changes: 6 additions & 0 deletions Overshare Kit/OSKFacebookPublishingViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,12 @@ - (void)textViewDidChange:(OSKTextView *)textView {
[self updateDoneButton];
}

- (void)textViewDidTapRemoveAttachment:(OSKTextView *)textView {
[textView removeAttachment];
[self.contentItem setImages:nil];
[self updateDoneButton];
}

#pragma mark - Autorotation

- (void)viewDidLayoutSubviews {
Expand Down
22 changes: 3 additions & 19 deletions Overshare Kit/OSKMicroblogPublishingViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ @interface OSKMicroblogPublishingViewController () <OSKTextViewDelegate, OSKAcco
@property (strong, nonatomic) UIButton *linkShorteningButton;
@property (strong, nonatomic) UIActivityIndicatorView *linkShorteningActivityIndicator;
@property (assign, nonatomic) NSInteger activeLinkShorteningCount;
@property (assign, nonatomic) NSUInteger reservedLengthForAttachmentURL;

@end

Expand Down Expand Up @@ -510,12 +509,9 @@ - (void)showSystemAccountChooser {
#pragma mark - Character Count

- (void)updateRemainingCharacterCountLabel {
NSInteger countAdjustingForEmoji = [self.textView.attributedText.string lengthOfBytesUsingEncoding:NSUTF32StringEncoding]/4;
NSInteger remaining = [self.activity maximumCharacterCount] - countAdjustingForEmoji;
if (self.contentItem.images.count) {
NSUInteger numberToBeAttached = MIN([self.activity maximumImageCount], self.contentItem.images.count);
remaining -= numberToBeAttached * _reservedLengthForAttachmentURL;
}

NSInteger remaining = [self.activity updateRemainingCharacterCount:self.contentItem urlEntities:self.textView.detectedLinks];;

self.characterCountLabel.text = @(remaining).stringValue;
if (_characterCount_normalColor == nil) {
OSKPresentationManager *presManager = [OSKPresentationManager sharedInstance];
Expand Down Expand Up @@ -548,18 +544,6 @@ - (void)preparePublishingViewForActivity:(OSKActivity *)activity delegate:(id <O
[self setContentItem:(OSKMicroblogPostContentItem *)self.activity.contentItem];
[self setOskPublishingDelegate:oskPublishingDelegate];
self.title = [self.activity.class activityName];

if ([self.activity respondsToSelector:@selector(characterCountsAreAffectedByAttachments)]) {
BOOL adjustForAttachments = [self.activity characterCountsAreAffectedByAttachments];
if (adjustForAttachments) {
__weak OSKMicroblogPublishingViewController *weakSelf = self;
[self.activity getEstimatedAttachmentURLLength:^(NSUInteger length) {
[weakSelf setReservedLengthForAttachmentURL:length];
[weakSelf updateRemainingCharacterCountLabel];
[weakSelf updateDoneButton];
}];
}
}
}

#pragma mark - Account Chooser Delegate
Expand Down
12 changes: 6 additions & 6 deletions Overshare Kit/OSKMicrobloggingActivity.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,21 @@

@import Foundation;

@class OSKMicroblogPostContentItem;

typedef NS_ENUM(NSInteger, OSKMicroblogSyntaxHighlightingStyle) {
OSKMicroblogSyntaxHighlightingStyle_Twitter,
OSKMicroblogSyntaxHighlightingStyle_LinksOnly,
};

@protocol OSKMicrobloggingActivity <NSObject>

@property (assign, nonatomic) NSInteger remainingCharacterCount;

- (NSInteger)maximumCharacterCount;
- (NSInteger)maximumImageCount;
- (OSKMicroblogSyntaxHighlightingStyle)syntaxHighlightingStyle;
- (NSInteger)maximumUsernameLength;

@optional

- (BOOL)characterCountsAreAffectedByAttachments;
- (void)getEstimatedAttachmentURLLength:(void(^)(NSUInteger length))completion;
- (NSInteger)updateRemainingCharacterCount:(OSKMicroblogPostContentItem *)contentItem urlEntities:(NSArray *)urlEntities;
- (OSKMicroblogSyntaxHighlightingStyle)syntaxHighlightingStyle;

@end
105 changes: 73 additions & 32 deletions Overshare Kit/OSKTextView.m
Original file line number Diff line number Diff line change
Expand Up @@ -364,7 +364,7 @@ - (void)setupAttributes {
if (boldDescriptor) {
boldFont = [UIFont fontWithDescriptor:boldDescriptor size:fontSize];
} else {
boldFont = [UIFont systemFontOfSize:fontSize];
boldFont = [UIFont boldSystemFontOfSize:fontSize];
}

UIColor *normalColor = manager.color_text;
Expand Down Expand Up @@ -1153,37 +1153,78 @@ - (UIBezierPath *)exclusionPathForRect:(CGRect)rect desiredInnerPadding:(CGFloat

#pragma mark - Smart Quotes

- (void)fixDumbQuotes:(NSTextStorage *)mutableString {
[mutableString.string enumerateSubstringsInRange:NSMakeRange(0, [mutableString length]) options:NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
if ([substring isEqualToString:@"\""]) {
if (substringRange.location > 0) {
NSString *previousCharacter = [mutableString.string substringWithRange:NSMakeRange(substringRange.location - 1, 1)];
if ([previousCharacter isEqualToString:@" "] || [previousCharacter isEqualToString:@"\n"]) {
[mutableString replaceCharactersInRange:substringRange withString:@""];
}
else {
[mutableString replaceCharactersInRange:substringRange withString:@""];
}
}
else {
[mutableString replaceCharactersInRange:substringRange withString:@""];
}
}
else if ([substring isEqualToString:@"'"]) {
if (substringRange.location > 0) {
NSString *previousCharacter = [mutableString.string substringWithRange:NSMakeRange(substringRange.location - 1, 1)];
if ([previousCharacter isEqualToString:@" "] || [previousCharacter isEqualToString:@"\n"]) {
[mutableString replaceCharactersInRange:substringRange withString:@""];
}
else {
[mutableString replaceCharactersInRange:substringRange withString:@""];
}
}
else {
[mutableString replaceCharactersInRange:substringRange withString:@""];
}
}
}];
-(void)fixDumbQuotes:(NSTextStorage *)textStorage {

NSString *copyOfOriginalString = [textStorage.string copy];

NSString *dumbDouble = @"\"";
NSString *dumbSingle = @"'";
NSString *leftSmartSingle = @"";
NSString *leftSmartDouble = @"";
NSString *rightSmartSingle = @"";
NSString *rightSmartDouble = @"";


NSString *regex = [NSString stringWithFormat:@"(\\s|\\(|\\[|\\{|\\<|\\〈|%@|%@)",
leftSmartSingle,
leftSmartDouble];

NSString *regexThatShouldBeFollowedByLeftQuotes = regex;

[copyOfOriginalString
enumerateSubstringsInRange:NSMakeRange(0, [copyOfOriginalString length])
options:NSStringEnumerationByComposedCharacterSequences
usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {

if ([substring isEqualToString:dumbDouble]) {

if (substringRange.location > 0) {

NSString *previousCharacter = [copyOfOriginalString
substringWithRange:NSMakeRange(substringRange.location - 1, 1)];

NSRange rangeOfRegexMatch = [previousCharacter
rangeOfString:regexThatShouldBeFollowedByLeftQuotes
options:NSRegularExpressionSearch];

BOOL useLeftQuote = (rangeOfRegexMatch.location != NSNotFound);

if (useLeftQuote) {
[textStorage replaceCharactersInRange:substringRange withString:leftSmartDouble];
}
else {
[textStorage replaceCharactersInRange:substringRange withString:rightSmartDouble];
}
}
else {
[textStorage replaceCharactersInRange:substringRange withString:leftSmartDouble];
}
}
else if ([substring isEqualToString:dumbSingle]) {

if (substringRange.location > 0) {

NSString *previousCharacter = [copyOfOriginalString
substringWithRange:NSMakeRange(substringRange.location - 1, 1)];

NSRange rangeOfRegexMatch = [previousCharacter
rangeOfString:regexThatShouldBeFollowedByLeftQuotes
options:NSRegularExpressionSearch];

BOOL useLeftQuote = (rangeOfRegexMatch.location != NSNotFound);

if (useLeftQuote) {
[textStorage replaceCharactersInRange:substringRange withString:leftSmartSingle];
}
else {
[textStorage replaceCharactersInRange:substringRange withString:rightSmartSingle];
}
}
else {
[textStorage replaceCharactersInRange:substringRange withString:leftSmartSingle];
}
}
}];
}

#pragma mark - OSKTextViewAttachmentViewDelegate
Expand Down

0 comments on commit 0cdaaa1

Please sign in to comment.