mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-08-31 21:41:33 +00:00

* offline: (247 commits) Adding preferences for offline story limit and image download concurrency. Better next unread button min width in narrow mode. Fixing tooltip on Full view. Speeding up new user queue. Adding starred stories to munin. Showing empty explainers. Cleaning up starred story trimmer. New starred story trimmer. Turning off SSL verification on text importing. Using latest feedparser. Adding Xcode5-specific directories to gitignore. Fixing crash on iOS 7 for offline stories. Still looks like shit. Bumping feed blast limit from 50 to 100 stories at a time. Need to pass story order and read filter to sync service when refresh triggered in AllSharedStoriesReading activity Fixing autocomplete to not choke on missing feeds. Fix #351 - support oldest first/unread for viewing all shared stories and individual blurblogs Fixing spacebar and arrow keys for new scroll story list. Normaling user agents between feed/page/icon fetchers. Adding full site permalink. Fixing text view. Fixing esc key to close popovers and menus without closing current feed. ... Conflicts: clients/ios/NSAttributedString+Attributes.h clients/ios/NSAttributedString+Attributes.m clients/ios/OHAttributedLabel.h clients/ios/OHAttributedLabel.m
158 lines
No EOL
6.9 KiB
Objective-C
158 lines
No EOL
6.9 KiB
Objective-C
//
|
|
// InteractionCell.m
|
|
// NewsBlur
|
|
//
|
|
// Created by Roy Yang on 7/16/12.
|
|
// Copyright (c) 2012 NewsBlur. All rights reserved.
|
|
//
|
|
|
|
#import "InteractionCell.h"
|
|
#import "UIImageView+AFNetworking.h"
|
|
#import <CoreText/CoreText.h>
|
|
|
|
@implementation InteractionCell
|
|
|
|
@synthesize interactionLabel;
|
|
@synthesize avatarView;
|
|
@synthesize topMargin;
|
|
@synthesize bottomMargin;
|
|
@synthesize leftMargin;
|
|
@synthesize rightMargin;
|
|
@synthesize avatarSize;
|
|
|
|
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
|
|
|
|
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
|
|
interactionLabel = nil;
|
|
avatarView = nil;
|
|
|
|
// create the label and the avatar
|
|
UIImageView *avatar = [[UIImageView alloc] initWithFrame:CGRectZero];
|
|
self.avatarView = avatar;
|
|
[self.contentView addSubview:avatar];
|
|
|
|
UILabel *interaction = [[UILabel alloc] initWithFrame:CGRectZero];
|
|
interaction.backgroundColor = [UIColor whiteColor];
|
|
// interaction.automaticallyAddLinksForType = NO;
|
|
self.interactionLabel = interaction;
|
|
[self.contentView addSubview:interaction];
|
|
|
|
UIView *myBackView = [[UIView alloc] initWithFrame:self.frame];
|
|
myBackView.backgroundColor = UIColorFromRGB(NEWSBLUR_HIGHLIGHT_COLOR);
|
|
self.selectedBackgroundView = myBackView;
|
|
|
|
topMargin = 15;
|
|
bottomMargin = 15;
|
|
leftMargin = 20;
|
|
rightMargin = 20;
|
|
avatarSize = 48;
|
|
}
|
|
|
|
return self;
|
|
}
|
|
|
|
- (void)layoutSubviews {
|
|
[super layoutSubviews];
|
|
|
|
// determine outer bounds
|
|
CGRect contentRect = self.contentView.bounds;
|
|
|
|
// position label to bounds
|
|
CGRect labelRect = contentRect;
|
|
labelRect.origin.x = labelRect.origin.x + leftMargin + avatarSize + leftMargin;
|
|
labelRect.origin.y = labelRect.origin.y + topMargin - 1;
|
|
labelRect.size.width = contentRect.size.width - leftMargin - avatarSize - leftMargin - rightMargin;
|
|
labelRect.size.height = contentRect.size.height - topMargin - bottomMargin;
|
|
self.interactionLabel.frame = labelRect;
|
|
}
|
|
|
|
|
|
- (int)setInteraction:(NSDictionary *)interaction withWidth:(int)width {
|
|
// must set the height again for dynamic height in heightForRowAtIndexPath in
|
|
CGRect interactionLabelRect = self.interactionLabel.bounds;
|
|
interactionLabelRect.size.width = width - leftMargin - avatarSize - leftMargin - rightMargin;
|
|
interactionLabelRect.size.height = 300;
|
|
|
|
self.interactionLabel.frame = interactionLabelRect;
|
|
self.avatarView.frame = CGRectMake(leftMargin, topMargin, avatarSize, avatarSize);
|
|
|
|
// UIImage *placeholder = [UIImage imageNamed:@"user_light"];
|
|
|
|
// this is for the rare instance when the with_user doesn't return anything
|
|
if ([[interaction objectForKey:@"with_user"] class] == [NSNull class]) {
|
|
return 1;
|
|
}
|
|
|
|
[self.avatarView setImageWithURL:[NSURL URLWithString:[[interaction objectForKey:@"with_user"] objectForKey:@"photo_url"]]
|
|
placeholderImage:nil];
|
|
|
|
NSString *category = [interaction objectForKey:@"category"];
|
|
NSString *content = [interaction objectForKey:@"content"];
|
|
NSString *title = [self stripFormatting:[NSString stringWithFormat:@"%@", [interaction objectForKey:@"title"]]];
|
|
NSString *username = [[interaction objectForKey:@"with_user"] objectForKey:@"username"];
|
|
NSString *time = [[NSString stringWithFormat:@"%@ ago", [interaction objectForKey:@"time_since"]] uppercaseString];
|
|
NSString *comment = [NSString stringWithFormat:@"\"%@\"", content];
|
|
NSString *txt;
|
|
|
|
if ([category isEqualToString:@"follow"]) {
|
|
txt = [NSString stringWithFormat:@"%@ is now following you.", username];
|
|
} else if ([category isEqualToString:@"comment_reply"]) {
|
|
txt = [NSString stringWithFormat:@"%@ replied to your comment on %@:\n%@", username, title, comment];
|
|
} else if ([category isEqualToString:@"reply_reply"]) {
|
|
txt = [NSString stringWithFormat:@"%@ replied to your reply on %@:\n%@", username, title, comment];
|
|
} else if ([category isEqualToString:@"story_reshare"]) {
|
|
if ([content isEqualToString:@""] || content == nil) {
|
|
txt = [NSString stringWithFormat:@"%@ re-shared %@.", username, title];
|
|
} else {
|
|
txt = [NSString stringWithFormat:@"%@ re-shared %@:\n%@", username, title, comment];
|
|
}
|
|
} else if ([category isEqualToString:@"comment_like"]) {
|
|
txt = [NSString stringWithFormat:@"%@ favorited your comments on %@:\n%@", username, title, comment];
|
|
}
|
|
|
|
NSString *txtWithTime = [NSString stringWithFormat:@"%@\n%@", txt, time];
|
|
NSMutableAttributedString* attrStr = [[NSMutableAttributedString alloc] initWithString:txtWithTime];
|
|
|
|
[attrStr setAttributes:@{NSFontAttributeName:[UIFont fontWithName:@"Helvetica" size:10]} range:NSMakeRange(0, [txtWithTime length])];
|
|
if (self.highlighted) {
|
|
[attrStr setAttributes:@{NSForegroundColorAttributeName:UIColorFromRGB(0xffffff)} range:NSMakeRange(0, [txtWithTime length])];
|
|
} else {
|
|
[attrStr setAttributes:@{NSForegroundColorAttributeName:UIColorFromRGB(0x333333)} range:NSMakeRange(0, [txtWithTime length])];
|
|
|
|
}
|
|
|
|
if (![username isEqualToString:@"You"]){
|
|
[attrStr setAttributes:@{NSForegroundColorAttributeName:UIColorFromRGB(NEWSBLUR_LINK_COLOR)} range:[txtWithTime rangeOfString:username]];
|
|
[attrStr setAttributes:@{NSFontAttributeName:[UIFont boldSystemFontOfSize:14]} range:[txtWithTime rangeOfString:username]];
|
|
}
|
|
[attrStr setAttributes:@{NSForegroundColorAttributeName:UIColorFromRGB(NEWSBLUR_LINK_COLOR)} range:[txtWithTime rangeOfString:title]];
|
|
[attrStr setAttributes:@{NSForegroundColorAttributeName:UIColorFromRGB(0x666666)} range:[txtWithTime rangeOfString:comment]];
|
|
[attrStr setAttributes:@{NSForegroundColorAttributeName:UIColorFromRGB(0x999999)} range:[txtWithTime rangeOfString:time]];
|
|
|
|
[attrStr setAttributes:@{NSFontAttributeName:[UIFont fontWithName:@"Helvetica" size:10]} range:[txtWithTime rangeOfString:time]];
|
|
NSMutableParagraphStyle* style= [NSMutableParagraphStyle new];
|
|
style.lineBreakMode = NSLineBreakByWordWrapping;
|
|
style.alignment = NSTextAlignmentLeft;
|
|
style.lineHeightMultiple = 1.2f;
|
|
[attrStr setAttributes:@{NSParagraphStyleAttributeName: style} range:NSMakeRange(0, [txtWithTime length])];
|
|
|
|
self.interactionLabel.attributedText = attrStr;
|
|
self.interactionLabel.font = [UIFont fontWithName:@"Helvetica" size:14];
|
|
[self.interactionLabel sizeToFit];
|
|
|
|
int height = self.interactionLabel.frame.size.height;
|
|
|
|
return height;
|
|
}
|
|
|
|
- (NSString *)stripFormatting:(NSString *)str {
|
|
while ([str rangeOfString:@" "].location != NSNotFound) {
|
|
str = [str stringByReplacingOccurrencesOfString:@" " withString:@" "];
|
|
}
|
|
while ([str rangeOfString:@"\n"].location != NSNotFound) {
|
|
str = [str stringByReplacingOccurrencesOfString:@"\n" withString:@" "];
|
|
}
|
|
return str;
|
|
}
|
|
|
|
@end |