#import "PostPreviewViewController.h" #import "BlogDataManager.h" #import "WordPressAppDelegate.h" @interface PostPreviewViewController (Private) - (void)addProgressIndicator; - (NSString *)stringReplacingNewlinesWithBR:(NSString *)surString; @end @implementation PostPreviewViewController @synthesize postDetailViewController, webView; #pragma mark - #pragma mark Memory Management - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { // Initialization code } return self; } - (void)didReceiveMemoryWarning { WPLog(@"%@ %@", self, NSStringFromSelector(_cmd)); [super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview // Release anything that's not essential, such as cached data } #pragma mark - #pragma mark View Lifecycle Methods - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self refreshWebView]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [self stopLoading]; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { WordPressAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; if ([delegate isAlertRunning] == YES) return NO; // Return YES for supported orientations return YES; } #pragma mark - #pragma mark Webkit View Delegate Methods - (void)refreshWebView { BlogDataManager *dataManager = [BlogDataManager sharedDataManager]; // Use the template to preview if local draft, new post, // post has been edited, post is a draft, or post is private // TODO - try setting file URLs for photos not yet uploaded BOOL edited = [(NSNumber *)[[dataManager currentPost] objectForKey:@"hasChanges"] boolValue]; BOOL isDraft = NO; NSString *status = [[dataManager currentPost] objectForKey:@"post_status"]; if (![status isEqualToString:@"publish"] && ![status isEqualToString:@"private"]) isDraft = YES; BOOL isPrivate = NO; if ([status isEqualToString:@"private"]) isPrivate = YES; int photoCount = [[[dataManager currentPost] valueForKey:@"Photos"] count]; NSString *photosMessage = @"{%d Photo(s) will be attached to the bottom of the post when published.}"; photosMessage = [NSString stringWithFormat:photosMessage, photoCount]; if (dataManager.isLocaDraftsCurrent || dataManager.currentPostIndex == -1 || edited || isDraft || isPrivate) { // TODO use a default template so that we alwyas have one BOOL isDefaultTemplate; NSString *str = [dataManager templateHTMLStringForBlog:dataManager.currentBlog isDefaultTemplate:&isDefaultTemplate]; if ([str length]) { NSString *title = [dataManager.currentPost valueForKey:@"title"]; title = (title == nil || ([title length] == 0) ? @"(no title)" : title); str = [str stringByReplacingOccurrencesOfString:@"!$title$!" withString:title]; NSString *desc = [dataManager.currentPost valueForKey:@"description"]; if (!desc) desc = @"
%@
%@
Tags: %@
Categories: %@
%@
", desc, photosMessage] baseURL:nil]; } else { [webView loadHTMLString:[NSString stringWithFormat:@"%@%@
", @"", photosMessage] baseURL:nil]; } } else { [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:link]]]; } isWebRefreshRequested = YES; } - (void)webViewDidStartLoad:(UIWebView *)webView { if (postDetailViewController.navigationItem.rightBarButtonItem == nil || postDetailViewController.navigationItem.rightBarButtonItem == postDetailViewController.saveButton) { [self addProgressIndicator]; } } - (void)webViewDidFinishLoad:(UIWebView *)awebView { if ([awebView isLoading] == NO && postDetailViewController.navigationItem.rightBarButtonItem != nil && postDetailViewController.navigationItem.rightBarButtonItem != postDetailViewController.saveButton) { postDetailViewController.navigationItem.rightBarButtonItem = (postDetailViewController.hasChanges ? postDetailViewController.saveButton : nil); if (postDetailViewController.tabController.selectedViewController == self) postDetailViewController.navigationItem.title = self.title; isWebRefreshRequested = NO; } } - (BOOL)webView:(UIWebView *)awebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { return YES; return isWebRefreshRequested || postDetailViewController.navigationItem.rightBarButtonItem != nil; } #pragma mark - - (NSString *)stringReplacingNewlinesWithBR:(NSString *)surString { NSArray *comps = [surString componentsSeparatedByString:@"\n"]; return [comps componentsJoinedByString:@"