diff --git a/.DS_Store b/.DS_Store index 9a40a2c..4d9bfd3 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/Mac/.DS_Store b/Mac/.DS_Store new file mode 100644 index 0000000..ab844af Binary files /dev/null and b/Mac/.DS_Store differ diff --git a/Mac/AccessToken.h b/Mac/AccessToken.h new file mode 100644 index 0000000..0a3941c --- /dev/null +++ b/Mac/AccessToken.h @@ -0,0 +1,27 @@ +// +// AccessToken.h +// Tentia +// +// Created by Jeena Paradies on 19/09/2011. +// Copyright 2011 __MyCompanyName__. All rights reserved. +// + + + +@interface AccessToken : NSObject { + NSUserDefaults *d; +} + +- (void)setString:(NSString *)string forKey:(NSString *)aKey; +- (NSString *)stringForKey:(NSString *)aKey; + +- (void)setAccessToken:(NSString *)_accessToken; +- (NSString *)accessToken; +- (void)setSecret:(NSString *)_secret; +- (NSString *)secret; +- (void)setUserId:(NSString *)_userId; +- (NSString *)userId; +- (void)setScreenName:(NSString *)_screenName; +- (NSString *)screenName; + +@end \ No newline at end of file diff --git a/Mac/AccessToken.m b/Mac/AccessToken.m new file mode 100644 index 0000000..02b181f --- /dev/null +++ b/Mac/AccessToken.m @@ -0,0 +1,88 @@ +// +// AccessToken.m +// Tentia +// +// Created by Jeena Paradies on 19/09/2011. +// Copyright 2011 __MyCompanyName__. All rights reserved. +// + +#import "AccessToken.h" + +@implementation AccessToken + +- (id)init +{ + self = [super init]; + if (self) { + // Initialization code here. + d = [NSUserDefaults standardUserDefaults]; + //[d removeObjectForKey:@"user_access_token"]; + } + + return self; +} + +- (void)setString:(NSString *)string forKey:(NSString *)aKey +{ + [d setObject:string forKey:aKey]; + [d synchronize]; +} + +- (NSString *)stringForKey:(NSString *)aKey +{ + return [d objectForKey:aKey]; +} + +- (void)setAccessToken:(NSString *)_accessToken +{ + [d synchronize]; +} + +- (NSString *)accessToken +{ + return [d objectForKey:@"accessToken"]; +} + +- (void)setSecret:(NSString *)_secret +{ + [d setObject:_secret forKey:@"secret"]; + [d synchronize]; +} + +- (NSString *)secret +{ + return [d objectForKey:@"secret"]; +} + +- (void)setUserId:(NSString *)_userId +{ + [d setObject:_userId forKey:@"userId"]; + [d synchronize]; +} + +- (NSString *)userId +{ + return [d objectForKey:@"userId"]; +} + +- (void)setScreenName:(NSString *)_screenName +{ + [d setObject:_screenName forKey:@"screenName"]; + [d synchronize]; +} + +- (NSString *)screenName +{ + return [d objectForKey:@"screenName"]; +} + ++ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector { + return NO; +} + ++ (BOOL)isKeyExcludedFromWebScript:(const char *)name { + return NO; +} + + +@end diff --git a/Mac/Constants.h b/Mac/Constants.h new file mode 100644 index 0000000..ea85a62 --- /dev/null +++ b/Mac/Constants.h @@ -0,0 +1,30 @@ +// +// Constants.h +// Tentia +// +// Created by Jeena on 01.05.10. +// Licence: BSD (see attached LICENCE.txt file). +// + +#import +#import + + +@interface Constants : NSObject { + +} + +#define OAUTH_CONSUMER_KEY @"JPmU8KJhiBKfpohCiWLg" +#define OAUTH_CONSUMER_SECRET @"jtfSrnDrRcUnL1nqTMcAW0055m63EMClmkxhiBjQ" +#define OAUTH_SIGNATURE_METHOD @"HMAC-SHA1" +#define OAUTH_REQUEST_TOKEN_URL @"http://twitter.com/oauth/request_token" +#define OAUTH_USER_AUTHORIZATION_URL @"http://twitter.com/oauth/authorize" +#define OAUTH_ACCESS_TOKEN_URL @"http://twitter.com/oauth/access_token" +#define OAUTH_SERVICE_NAME @"twitter.com" + +#define APP_NAME @"Tentia" +#define MESSAGE_MAX_LENGTH 256 + ++ (NSString *)stringFromVirtualKeyCode:(NSInteger)code; + +@end diff --git a/Mac/Constants.m b/Mac/Constants.m new file mode 100644 index 0000000..a40d9e2 --- /dev/null +++ b/Mac/Constants.m @@ -0,0 +1,220 @@ +// +// Constants.m +// Tentia +// +// Created by Jeena on 01.05.10. +// Licence: BSD (see attached LICENCE.txt file). +// + +#import "Constants.h" + + +@implementation Constants + ++ (NSString *)stringFromVirtualKeyCode:(NSInteger)code { + NSString *string = nil; + switch (code) { + case kVK_ANSI_A: + string = @"A"; + break; + case kVK_ANSI_S: + string = @"S"; + break; + case kVK_ANSI_D: + string = @"D"; + break; + case kVK_ANSI_F: + string = @"F"; + break; + case kVK_ANSI_H: + string = @"H"; + break; + case kVK_ANSI_G: + string = @"G"; + break; + case kVK_ANSI_Z: + string = @"Z"; + break; + case kVK_ANSI_X: + string = @"X"; + break; + case kVK_ANSI_C: + string = @"C"; + break; + case kVK_ANSI_V: + string = @"V"; + break; + case kVK_ANSI_B: + string = @"B"; + break; + case kVK_ANSI_Q: + string = @"Q"; + break; + case kVK_ANSI_W: + string = @"W"; + break; + case kVK_ANSI_E: + string = @"E"; + break; + case kVK_ANSI_R: + string = @"R"; + break; + case kVK_ANSI_Y: + string = @"Y"; + break; + case kVK_ANSI_T: + string = @"T"; + break; + case kVK_ANSI_1: + string = @"1"; + break; + case kVK_ANSI_2: + string = @"2"; + break; + case kVK_ANSI_3: + string = @"3"; + break; + case kVK_ANSI_4: + string = @"4"; + break; + case kVK_ANSI_6: + string = @"6"; + break; + case kVK_ANSI_5: + string = @"5"; + break; + case kVK_ANSI_Equal: + string = @"="; + break; + case kVK_ANSI_9: + string = @"9"; + break; + case kVK_ANSI_7: + string = @"7"; + break; + case kVK_ANSI_Minus: + string = @"-"; + break; + case kVK_ANSI_8: + string = @"8"; + break; + case kVK_ANSI_0: + string = @"0"; + break; + case kVK_ANSI_RightBracket: + string = @")"; + break; + case kVK_ANSI_O: + string = @"0"; + break; + case kVK_ANSI_U: + string = @"U"; + break; + case kVK_ANSI_LeftBracket: + string = @"("; + break; + case kVK_ANSI_I: + string = @"I"; + break; + case kVK_ANSI_P: + string = @"P"; + break; + case kVK_ANSI_L: + string = @"L"; + break; + case kVK_ANSI_J: + string = @"J"; + break; + case kVK_ANSI_Quote: + string = @"\""; + break; + case kVK_ANSI_K: + string = @"K"; + break; + case kVK_ANSI_Semicolon: + string = @";"; + break; + case kVK_ANSI_Backslash: + string = @"\\"; + break; + case kVK_ANSI_Comma: + string = @","; + break; + case kVK_ANSI_Slash: + string = @"/"; + break; + case kVK_ANSI_N: + string = @"N"; + break; + case kVK_ANSI_M: + string = @"M"; + break; + case kVK_ANSI_Period: + string = @"."; + break; + case kVK_ANSI_Grave: + string = @"`"; + break; + case kVK_ANSI_KeypadDecimal: + string = @"."; + break; + case kVK_ANSI_KeypadMultiply: + string = @"*"; + break; + case kVK_ANSI_KeypadPlus: + string = @"+"; + break; + case kVK_ANSI_KeypadClear: + string = @""; + break; + case kVK_ANSI_KeypadDivide: + string = @"/"; + break; + case kVK_ANSI_KeypadEnter: + string = @"⎆"; + break; + case kVK_ANSI_KeypadMinus: + string = @"-"; + break; + case kVK_ANSI_KeypadEquals: + string = @"="; + break; + case kVK_ANSI_Keypad0: + string = @"0"; + break; + case kVK_ANSI_Keypad1: + string = @"1"; + break; + case kVK_ANSI_Keypad2: + string = @"2"; + break; + case kVK_ANSI_Keypad3: + string = @"3"; + break; + case kVK_ANSI_Keypad4: + string = @"4"; + break; + case kVK_ANSI_Keypad5: + string = @"5"; + break; + case kVK_ANSI_Keypad6: + string = @"6"; + break; + case kVK_ANSI_Keypad7: + string = @"7"; + break; + case kVK_ANSI_Keypad8: + string = @"8"; + break; + case kVK_ANSI_Keypad9: + string = @"9"; + break; + default: + string = nil; + break; + } + + return string; +} + +@end diff --git a/Mac/Controller.h b/Mac/Controller.h new file mode 100644 index 0000000..8c4f381 --- /dev/null +++ b/Mac/Controller.h @@ -0,0 +1,64 @@ +// +// Controller.h +// Tentia +// +// Created by Jeena on 15.04.10. +// Licence: BSD (see attached LICENCE.txt file). +// + +#import +#import +#import "ViewDelegate.h" +#import +#import "Constants.h" +#import "AccessToken.h" + + +@interface Controller : NSObject { + IBOutlet WebView *timelineView; + IBOutlet NSWindow *timelineViewWindow; + IBOutlet WebView *mentionsView; + IBOutlet NSWindow *mentionsViewWindow; + NSWindow *loginViewWindow; + NSProgressIndicator *loginActivityIndicator; + IBOutlet NSMenuItem *globalHotkeyMenuItem; + IBOutlet NSImageView *logoLayer; + ViewDelegate *viewDelegate; + WebView *oauthView; + AccessToken *accessToken; +} + +@property (retain, nonatomic) IBOutlet WebView *timelineView; +@property (retain, nonatomic) IBOutlet NSWindow *timelineViewWindow; +@property (retain, nonatomic) IBOutlet WebView *mentionsView; +@property (retain, nonatomic) IBOutlet NSWindow *mentionsViewWindow; +@property (assign) IBOutlet NSWindow *loginViewWindow; +@property (assign) IBOutlet NSProgressIndicator *loginActivityIndicator; +@property (retain, nonatomic) IBOutlet NSMenuItem *globalHotkeyMenuItem; +@property (retain, nonatomic) IBOutlet NSImageView *logoLayer; +@property (retain, nonatomic) IBOutlet ViewDelegate *viewDelegate; +@property (retain, nonatomic) WebView *oauthView; +@property (retain, nonatomic) AccessToken *accessToken; + +- (void)initOauth; +- (void)authentificationSucceded:(id)sender; +- (void)initWebViews; +- (void)initHotKeys; +- (void)openNewMessageWindowInReplyTo:(NSString *)userName statusId:(NSString *)statusId withString:(NSString *)string; +- (NSString *)pluginURL; +- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent; +- (void)unreadMentions:(NSInteger)count; +- (void)openURL:(NSString *)url; + +- (void)setString:(NSString *)string forKey:(NSString *)aKey; +- (NSString *)stringForKey:(NSString *)aKey; +- (void)storeAccessToken:(NSString *)accessToken secret:(NSString *)secret userId:(NSString *)userId andScreenName:(NSString *)screenName; +- (void)loggedIn; + +- (IBAction)login:(id)sender; +- (IBAction)logout:(id)sender; + + +OSStatus handler(EventHandlerCallRef nextHandler, EventRef theEvent, void* userData); + +@end diff --git a/Mac/Controller.m b/Mac/Controller.m new file mode 100644 index 0000000..7eb883a --- /dev/null +++ b/Mac/Controller.m @@ -0,0 +1,313 @@ +// +// Controller.m +// Tentia +// +// Created by Jeena on 15.04.10. +// Licence: BSD (see attached LICENCE.txt file). +// + +#import "Controller.h" +#import "NewMessageWindow.h" +#import "TweetModel.h" + + +@implementation Controller +@synthesize loginViewWindow; +@synthesize loginActivityIndicator; + +@synthesize timelineView, timelineViewWindow, mentionsView, mentionsViewWindow, globalHotkeyMenuItem, viewDelegate; +@synthesize logoLayer; +@synthesize oauthView, accessToken; + +- (void)awakeFromNib { + + [self initHotKeys]; + + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + [nc addObserver:self + selector:@selector(openNewMessageWindow:) + name:@"openNewMessageWindow" + object:nil]; + [nc addObserver:self + selector:@selector(sendTweet:) + name:@"sendTweet" + object:nil]; + [nc addObserver:self + selector:@selector(authentificationSucceded:) + name:@"authentificationSucceded" + object:nil]; + [nc addObserver:self + selector:@selector(getTweetUpdates:) + name:@"getTweetUpdates" + object:nil]; + + NSAppleEventManager *appleEventManager = [NSAppleEventManager sharedAppleEventManager]; + [appleEventManager setEventHandler:self + andSelector:@selector(handleGetURLEvent:withReplyEvent:) + forEventClass:kInternetEventClass + andEventID:kAEGetURL]; + + viewDelegate = [[ViewDelegate alloc] init]; + + + accessToken = [[AccessToken alloc] init]; + + //[accessToken setString:nil forKey:@"user_access_token"]; + + if (![accessToken stringForKey:@"user_access_token"]) { + [timelineViewWindow performClose:self]; + [mentionsViewWindow performClose:self]; + [self.loginViewWindow makeKeyAndOrderFront:self]; + } else { + [timelineViewWindow makeKeyAndOrderFront:self]; + [self initWebViews]; + } +} + +- (void)initOauth { + if (!oauthView) { + NSString *path = [[NSBundle mainBundle] resourcePath]; + NSURL *url = [NSURL fileURLWithPath:path]; + NSString *index_string = [NSString stringWithContentsOfFile:[NSString stringWithFormat:@"%@/index_oauth.html", path] encoding:NSUTF8StringEncoding error:nil]; + + + oauthView = [[WebView alloc] init]; + viewDelegate.oauthView = oauthView; + [[oauthView mainFrame] loadHTMLString:index_string baseURL:url]; + [oauthView setFrameLoadDelegate:viewDelegate]; + [oauthView setPolicyDelegate:viewDelegate]; + [oauthView setUIDelegate:viewDelegate]; + [[oauthView windowScriptObject] setValue:self forKey:@"controller"]; + } else { + [oauthView stringByEvaluatingJavaScriptFromString:@"tentia_oauth.authenticate()"]; + } +} + +- (void)initHotKeys { + + NSInteger newTweetKey = kVK_ANSI_M; // http://boredzo.org/blog/archives/2007-05-22/virtual-key-codes + NSInteger newTweetModifierKey = controlKey + cmdKey + optionKey; // cmdKey 256, shitfKey 512, optionKey 2048, controlKey 4096 + + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSInteger defaultsNewTweetKey = (NSInteger)[defaults integerForKey:@"newTweetKey"]; + + if ([defaults objectForKey:@"newTweetKey"] != nil) { + newTweetKey = defaultsNewTweetKey; + } else { + [defaults setInteger:newTweetKey forKey:@"newTweetKey"]; + } + + NSInteger defaultsNewTweetModifierKey = (NSInteger)[defaults integerForKey:@"newTweetModifierKey"]; + if ([defaults objectForKey:@"newTweetModifierKey"] != nil) { + newTweetModifierKey = defaultsNewTweetModifierKey; + } else { + [defaults setInteger:newTweetModifierKey forKey:@"newTweetModifierKey"]; + } + + [defaults synchronize]; + + NSUInteger cocoaModifiers = 0; + if (newTweetModifierKey & shiftKey) cocoaModifiers = cocoaModifiers | NSShiftKeyMask; + if (newTweetModifierKey & optionKey) cocoaModifiers = cocoaModifiers | NSAlternateKeyMask; + if (newTweetModifierKey & controlKey) cocoaModifiers = cocoaModifiers | NSControlKeyMask; + if (newTweetModifierKey & cmdKey) cocoaModifiers = cocoaModifiers | NSCommandKeyMask; + + [globalHotkeyMenuItem setKeyEquivalent:[Constants stringFromVirtualKeyCode:newTweetKey]]; + [globalHotkeyMenuItem setKeyEquivalentModifierMask:cocoaModifiers]; + + /* CARBON from http://github.com/Xjs/drama-button/blob/carbon/Drama_ButtonAppDelegate.m */ + + EventTypeSpec eventType; + eventType.eventClass = kEventClassKeyboard; + eventType.eventKind = kEventHotKeyPressed; + + InstallApplicationEventHandler(&handler, 1, &eventType, NULL, NULL); + + EventHotKeyID g_HotKeyID; + g_HotKeyID.id = 1; + + EventHotKeyRef g_HotKeyRef; + + RegisterEventHotKey(newTweetKey, newTweetModifierKey, g_HotKeyID, GetApplicationEventTarget(), 0, &g_HotKeyRef); + + /* end CARBON */ +} + +- (void)authentificationSucceded:(id)sender { + [loginActivityIndicator stopAnimation:self]; + [self initWebViews]; + [loginViewWindow performClose:self]; +} + +- (void)initWebViews { + + NSString *path = [[NSBundle mainBundle] resourcePath]; + NSURL *url = [NSURL fileURLWithPath:path]; + NSString *index_string = [NSString stringWithContentsOfFile:[NSString stringWithFormat:@"%@/index.html", path] encoding:NSUTF8StringEncoding error:nil]; + + viewDelegate.timelineView = timelineView; + [[timelineView mainFrame] loadHTMLString:index_string baseURL:url]; + [timelineView setFrameLoadDelegate:viewDelegate]; + [timelineView setPolicyDelegate:viewDelegate]; + [timelineView setUIDelegate:viewDelegate]; + [[timelineView windowScriptObject] setValue:self forKey:@"controller"]; + + viewDelegate.mentionsView = mentionsView; + [[mentionsView mainFrame] loadHTMLString:index_string baseURL:url]; + [mentionsView setFrameLoadDelegate:viewDelegate]; + [mentionsView setPolicyDelegate:viewDelegate]; + [mentionsView setUIDelegate:viewDelegate]; + [[mentionsView windowScriptObject] setValue:self forKey:@"controller"]; + + // FIXME: show timelineView after authentification +} + ++ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector { + return NO; +} + ++ (BOOL)isKeyExcludedFromWebScript:(const char *)name { + return NO; +} + +- (void)setString:(NSString *)string forKey:(NSString *)aKey +{ + [self.accessToken setString:string forKey:aKey]; +} + +- (NSString *)stringForKey:(NSString *)aKey +{ + return [self.accessToken stringForKey:aKey]; +} + + +#pragma mark Notifications + +- (IBAction)openNewMessageWindow:(id)sender { + [NSApp activateIgnoringOtherApps:YES]; + [[NSDocumentController sharedDocumentController] openUntitledDocumentAndDisplay:YES error:nil]; +} + +- (void)openNewMessageWindowInReplyTo:(NSString *)userName statusId:(NSString *)statusId withString:(NSString *)string { + [NSApp activateIgnoringOtherApps:YES]; + NewMessageWindow *newTweet = (NewMessageWindow *)[[NSDocumentController sharedDocumentController] openUntitledDocumentAndDisplay:YES error:nil]; + [newTweet inReplyTo:userName statusId:statusId withString:string]; +} + +- (void)openNewMessageWindowWithString:(NSString *)aString { + [NSApp activateIgnoringOtherApps:YES]; + + NSRange range = [aString rangeOfString:@"oauthtoken"]; + + if (range.length > 0) { + [oauthView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"tentia_oauth.requestAccessToken('%@')", aString]]; + } else { + NewMessageWindow *newTweet = (NewMessageWindow *)[[NSDocumentController sharedDocumentController] openUntitledDocumentAndDisplay:YES error:nil]; + [newTweet withString:aString]; + } + +} + +- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent { + NSString *text = [[[event paramDescriptorForKeyword:keyDirectObject] stringValue] substringFromIndex:8]; + [self openNewMessageWindowWithString:[text stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; +} + +- (IBAction)sendTweet:(id)sender { + TweetModel *tweet = (TweetModel *)[sender object]; + NSString *text = [[tweet.text stringByReplacingOccurrencesOfString:@"\\" withString:@"\\\\"] stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""]; + NSString *func = [NSString stringWithFormat:@"tentia_instance.sendNewMessage(\"%@\", \"%@\", \"%@\")", + text, + tweet.inReplyTostatusId, + tweet.inReplyToEntity]; + [timelineView stringByEvaluatingJavaScriptFromString:func]; +} + +- (NSString *)pluginURL { + NSFileManager *fileManager = [NSFileManager defaultManager]; + NSString *pathToPlugin = [@"~/Library/Application Support/Tentia/Plugin.js" stringByExpandingTildeInPath]; + if([fileManager fileExistsAtPath:pathToPlugin]) { + return [NSString stringWithFormat:@"%@", [NSURL fileURLWithPath:pathToPlugin]]; + } + return nil; +} + +- (void)unreadMentions:(NSInteger)count { + if (![mentionsViewWindow isVisible] && count > 0) { + [timelineViewWindow setTitle:[NSString stringWithFormat:@"Tentia (^%i)", count]]; + [[[NSApplication sharedApplication] dockTile] setBadgeLabel:[NSString stringWithFormat:@"%i", count]]; + } else { + [timelineViewWindow setTitle:[NSString stringWithFormat:@"Tentia"]]; + [[[NSApplication sharedApplication] dockTile] setBadgeLabel:nil]; + [mentionsView stringByEvaluatingJavaScriptFromString:@"tentia_instance.unread_mentions = 0;"]; + } +} + +- (void)openURL:(NSString *)url { + [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:url]]; +} + +- (void)storeAccessToken:(NSString *)_accessToken secret:(NSString *)secret userId:(NSString *)userId andScreenName:(NSString *)screenName +{ + self.accessToken.accessToken = _accessToken; + self.accessToken.secret = secret; + self.accessToken.userId = userId; + self.accessToken.screenName = screenName; + + [timelineViewWindow makeKeyAndOrderFront:self]; + + [[NSNotificationCenter defaultCenter] postNotificationName:@"authentificationSucceded" object:nil]; +} + +- (void)loggedIn { + [timelineViewWindow makeKeyAndOrderFront:self]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"authentificationSucceded" object:nil]; +} + +- (IBAction)login:(id)sender { + [loginActivityIndicator startAnimation:self]; + [self initOauth]; +} + +- (IBAction)logout:(id)sender { + [timelineViewWindow performClose:self]; + [mentionsViewWindow performClose:self]; + [self.loginViewWindow makeKeyAndOrderFront:self]; + + [timelineView stringByEvaluatingJavaScriptFromString:@"tentia_instance.logout();"]; + [mentionsView stringByEvaluatingJavaScriptFromString:@"tentia_instance.logout();"]; + + [accessToken setString:nil forKey:@"app_mac_key"]; + [accessToken setString:nil forKey:@"app_mac_key_id"]; + [accessToken setString:nil forKey:@"app_id"]; + [accessToken setString:nil forKey:@"app_mac_algorithm"]; + [accessToken setString:nil forKey:@"user_access_token"]; + [accessToken setString:nil forKey:@"user_mac_key"]; + [accessToken setString:nil forKey:@"user_mac_algorithm"]; + [accessToken setString:nil forKey:@"user_token_type"]; + [accessToken setString:nil forKey:@"api_root"]; + [accessToken setString:nil forKey:@"entity"]; +} + +// Mentions window has been visible +- (void)windowDidBecomeKey:(NSNotification *)notification { + if ([notification object] == mentionsViewWindow) { + [self unreadMentions:0]; + } +} + +- (void)getTweetUpdates:(id)sender { + [timelineView stringByEvaluatingJavaScriptFromString:@"tentia_instance.getNewData(true)"]; + [mentionsView stringByEvaluatingJavaScriptFromString:@"tentia_instance.getNewData(true)"]; +} + + +/* CARBON */ + +OSStatus handler(EventHandlerCallRef nextHandler, EventRef theEvent, void* userData) +{ + [[NSNotificationCenter defaultCenter] postNotificationName:@"openNewMessageWindow" object:nil]; + return noErr; +} + +@end diff --git a/Mac/English.lproj/Credits.rtf b/Mac/English.lproj/Credits.rtf new file mode 100644 index 0000000..efb5826 --- /dev/null +++ b/Mac/English.lproj/Credits.rtf @@ -0,0 +1,25 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 + +\f0\b\fs24 \cf0 Engineering: +\b0 \ + Jeena Paradies\ +\ + +\b Testing: +\b0 \ + All the early adopters on Tent\ +\ + +\b Documentation: +\b0 \ + http://github.com/jeena/Tentia/wiki\ +\ + +\b With special thanks to: +\b0 \ + Mom\ +} \ No newline at end of file diff --git a/Mac/English.lproj/InfoPlist.strings b/Mac/English.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/Mac/English.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Mac/English.lproj/MainMenu.xib b/Mac/English.lproj/MainMenu.xib new file mode 100644 index 0000000..930c402 --- /dev/null +++ b/Mac/English.lproj/MainMenu.xib @@ -0,0 +1,2806 @@ + + + + 1080 + 12C60 + 2843 + 1187.34 + 625.00 + + YES + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.WebKitIBPlugin + + + YES + 2843 + 1810 + + + + YES + NSButton + NSButtonCell + NSCustomObject + NSImageCell + NSImageView + NSMenu + NSMenuItem + NSProgressIndicator + NSTextField + NSTextFieldCell + NSUserDefaultsController + NSView + NSWindowTemplate + WebView + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.WebKitIBPlugin + + + PluginDependencyRecalculationVersion + + + + YES + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + YES + + + Tentia + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + Tentia + + YES + + + About Tentia + + 2147483647 + + + + + + Check for Updates... + + 2147483647 + + + + + + Preferences... + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Services + + 1048576 + 2147483647 + + + submenuAction: + + Services + + YES + + _NSServicesMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Hide Tentia + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit Tentia + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 1048576 + 2147483647 + + + submenuAction: + + File + + YES + + + New Post + n + 1048576 + 2147483647 + + + + + + New global + t + 1835008 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Timeline + 1 + 1048576 + 2147483647 + + + + + + Mentions + 2 + 1048576 + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Logout + + 2147483647 + + + + + + + + + Edit + + 1048576 + 2147483647 + + + submenuAction: + + Edit + + YES + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Paste and Match Style + V + 1572864 + 2147483647 + + + + + + Delete + + 1048576 + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Find + + 1048576 + 2147483647 + + + submenuAction: + + Find + + YES + + + Find… + f + 1048576 + 2147483647 + + + 1 + + + + Find Next + g + 1048576 + 2147483647 + + + 2 + + + + Find Previous + G + 1179648 + 2147483647 + + + 3 + + + + Use Selection for Find + e + 1048576 + 2147483647 + + + 7 + + + + Jump to Selection + j + 1048576 + 2147483647 + + + + + + + + + Spelling and Grammar + + 1048576 + 2147483647 + + + submenuAction: + + Spelling and Grammar + + YES + + + Show Spelling and Grammar + : + 1048576 + 2147483647 + + + + + + Check Document Now + ; + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Check Spelling While Typing + + 1048576 + 2147483647 + + + + + + Check Grammar With Spelling + + 1048576 + 2147483647 + + + + + + Correct Spelling Automatically + + 2147483647 + + + + + + + + + Substitutions + + 1048576 + 2147483647 + + + submenuAction: + + Substitutions + + YES + + + Show Substitutions + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Smart Copy/Paste + f + 1048576 + 2147483647 + + + 1 + + + + Smart Quotes + g + 1048576 + 2147483647 + + + 2 + + + + Smart Dashes + + 2147483647 + + + + + + Smart Links + G + 1179648 + 2147483647 + + + 3 + + + + Text Replacement + + 2147483647 + + + + + + + + + Transformations + + 2147483647 + + + submenuAction: + + Transformations + + YES + + + Make Upper Case + + 2147483647 + + + + + + Make Lower Case + + 2147483647 + + + + + + Capitalize + + 2147483647 + + + + + + + + + Speech + + 1048576 + 2147483647 + + + submenuAction: + + Speech + + YES + + + Start Speaking + + 1048576 + 2147483647 + + + + + + Stop Speaking + + 1048576 + 2147483647 + + + + + + + + + + + + View + + 1048576 + 2147483647 + + + submenuAction: + + View + + YES + + + Show Toolbar + t + 1572864 + 2147483647 + + + + + + Customize Toolbar… + + 1048576 + 2147483647 + + + + + + + + + Window + + 1048576 + 2147483647 + + + submenuAction: + + Window + + YES + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Bring All to Front + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 2147483647 + + + submenuAction: + + Help + + YES + + + Tentia Help + ? + 1048576 + 2147483647 + + + + + _NSHelpMenu + + + + _NSMainMenu + + + NSFontManager + + + Controller + + + 15 + 2 + {{712, 280}, {397, 581}} + 1685586944 + Tentia + NSWindow + + + + + 256 + + YES + + + 274 + + YES + + YES + Apple HTML pasteboard type + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple URL pasteboard type + Apple Web Archive pasteboard type + NSColor pasteboard type + NSFilenamesPboardType + NSStringPboardType + NeXT RTFD pasteboard type + NeXT Rich Text Format v1.0 pasteboard type + NeXT TIFF v4.0 pasteboard type + WebURLsWithTitlesPboardType + public.png + public.url + public.url-name + + + {397, 581} + + + + + + + 13 + + YES + + YES + + + + + NO + YES + + + {397, 581} + + + + + {{0, 0}, {2560, 1418}} + {10000000000000, 10000000000000} + tentia + YES + + + SUUpdater + + + 15 + 2 + {{1077, 328}, {376, 581}} + 1685586944 + Mentions + NSWindow + + + + + 256 + + YES + + + 274 + + YES + + YES + Apple HTML pasteboard type + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple URL pasteboard type + Apple Web Archive pasteboard type + NSColor pasteboard type + NSFilenamesPboardType + NSStringPboardType + NeXT RTFD pasteboard type + NeXT Rich Text Format v1.0 pasteboard type + NeXT TIFF v4.0 pasteboard type + WebURLsWithTitlesPboardType + public.png + public.url + public.url-name + + + {376, 581} + + + + + + + 12 + + YES + + + + + NO + YES + + + {376, 581} + + + + {{0, 0}, {2560, 1418}} + {10000000000000, 10000000000000} + mentions + YES + + + 7 + 2 + {{641, 502}, {480, 186}} + 1685586944 + Preferences + NSWindow + + + + + 256 + + YES + + + 268 + + YES + + YES + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + NSFilenamesPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT TIFF v4.0 pasteboard type + + + {{20, 20}, {146, 146}} + + + + YES + + 0 + 33554432 + + NSImage + Icon + + 0 + 0 + 0 + YES + + NO + YES + + + + 268 + {{194, 82}, {266, 22}} + + + + _NS:9 + YES + + -1804599231 + 272630784 + + + LucidaGrande + 13 + 1044 + + https://example.tent.is + _NS:9 + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + 3 + MAA + + + + NO + + + + 268 + {{191, 112}, {163, 17}} + + + + _NS:1535 + YES + + 68157504 + 272630784 + Add your entity to log in: + + _NS:1535 + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + + + NO + + + + 268 + {{391, 46}, {75, 32}} + + + _NS:9 + YES + + 67108864 + 134217728 + Login + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{373, 55}, {16, 16}} + + + + _NS:945 + 28938 + 100 + + + {480, 186} + + + + _NS:20 + + {{0, 0}, {2560, 1418}} + {10000000000000, 10000000000000} + preferences + YES + + + YES + + + + + YES + + + terminate: + + + + 448 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + delegate + + + + 564 + + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + performClose: + + + + 193 + + + + toggleContinuousSpellChecking: + + + + 222 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + checkSpelling: + + + + 225 + + + + paste: + + + + 226 + + + + stopSpeaking: + + + + 227 + + + + cut: + + + + 228 + + + + showGuessPanel: + + + + 230 + + + + redo: + + + + 231 + + + + selectAll: + + + + 232 + + + + startSpeaking: + + + + 233 + + + + delete: + + + + 235 + + + + performZoom: + + + + 240 + + + + performFindPanelAction: + + + + 241 + + + + centerSelectionInVisibleArea: + + + + 245 + + + + toggleGrammarChecking: + + + + 347 + + + + toggleSmartInsertDelete: + + + + 355 + + + + toggleAutomaticQuoteSubstitution: + + + + 356 + + + + toggleAutomaticLinkDetection: + + + + 357 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + newDocument: + + + + 371 + + + + capitalizeWord: + + + + 454 + + + + lowercaseWord: + + + + 455 + + + + uppercaseWord: + + + + 456 + + + + toggleAutomaticDashSubstitution: + + + + 460 + + + + orderFrontSubstitutionsPanel: + + + + 461 + + + + toggleAutomaticTextReplacement: + + + + 463 + + + + toggleAutomaticSpellingCorrection: + + + + 466 + + + + performFindPanelAction: + + + + 467 + + + + performFindPanelAction: + + + + 468 + + + + performFindPanelAction: + + + + 469 + + + + pasteAsPlainText: + + + + 471 + + + + showHelp: + + + + 494 + + + + newDocument: + + + + 540 + + + + timelineView + + + + 553 + + + + mentionsView + + + + 562 + + + + timelineViewWindow + + + + 565 + + + + mentionsViewWindow + + + + 566 + + + + globalHotkeyMenuItem + + + + 570 + + + + loginEntityTextField + + + + 605 + + + + login: + + + + 606 + + + + login: + + + + 609 + + + + logout: + + + + 612 + + + + loginViewWindow + + + + 616 + + + + loginActivityIndicator + + + + 622 + + + + makeKeyAndOrderFront: + + + + 547 + + + + checkForUpdates: + + + + 543 + + + + makeKeyAndOrderFront: + + + + 563 + + + + delegate + + + + 569 + + + + makeKeyAndOrderFront: + + + + 611 + + + + value: values.entity + + + + + + value: values.entity + value + values.entity + 2 + + + 619 + + + + + YES + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + YES + + + + + + + + + + + 19 + + + YES + + + + + + 56 + + + YES + + + + + + 217 + + + YES + + + + + + 83 + + + YES + + + + + + 81 + + + YES + + + + + + + + + + + + + 72 + + + + + 82 + + + + + 79 + + + + + 205 + + + YES + + + + + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 214 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 218 + + + YES + + + + + + 216 + + + YES + + + + + + 200 + + + YES + + + + + + + + + + + 219 + + + + + 201 + + + + + 204 + + + + + 220 + + + YES + + + + + + + + + + 213 + + + + + 210 + + + + + 221 + + + + + 208 + + + + + 209 + + + + + 57 + + + YES + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + + + 144 + + + + + 236 + + + + + 131 + + + YES + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 24 + + + YES + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + YES + + + + + + 296 + + + YES + + + + + + + 297 + + + + + 298 + + + + + 211 + + + YES + + + + + + 212 + + + YES + + + + + + + 195 + + + + + 196 + + + + + 346 + + + + + 348 + + + YES + + + + + + 349 + + + YES + + + + + + + + + + + + 350 + + + + + 351 + + + + + 354 + + + + + 419 + + + + + 449 + + + YES + + + + + + 450 + + + YES + + + + + + + + 451 + + + + + 452 + + + + + 453 + + + + + 457 + + + + + 458 + + + + + 459 + + + + + 462 + + + + + 464 + + + + + 465 + + + + + 470 + + + + + 491 + + + YES + + + + + + 492 + + + YES + + + + + + 493 + + + + + 533 + + + + + 535 + + + YES + + + + Timeline + + + 536 + + + YES + + + + + + 537 + + + timeline + + + 541 + + + + + 542 + + + + + 559 + + + YES + + + + Mentions + + + 560 + + + YES + + + + + + 561 + + + + + 592 + + + YES + + + + + + 593 + + + YES + + + + + + + + + + 594 + + + YES + + + + + + 595 + + + + + 596 + + + YES + + + + + + 597 + + + + + 598 + + + YES + + + + + + 599 + + + + + 600 + + + YES + + + + + + 601 + + + + + 602 + + + + + 603 + + + + + 610 + + + + + 613 + + + + + 620 + + + + + 73 + + + + + 551 + + + + + 544 + + + + + + + YES + + YES + -1.IBPluginDependency + -2.IBPluginDependency + -3.IBPluginDependency + 130.IBPluginDependency + 131.IBPluginDependency + 134.IBPluginDependency + 136.IBPluginDependency + 144.IBPluginDependency + 145.IBPluginDependency + 149.IBPluginDependency + 150.IBPluginDependency + 19.IBPluginDependency + 195.IBPluginDependency + 196.IBPluginDependency + 197.IBPluginDependency + 198.IBPluginDependency + 199.IBPluginDependency + 200.IBPluginDependency + 201.IBPluginDependency + 202.IBPluginDependency + 203.IBPluginDependency + 204.IBPluginDependency + 205.IBPluginDependency + 206.IBPluginDependency + 207.IBPluginDependency + 208.IBPluginDependency + 209.IBPluginDependency + 210.IBPluginDependency + 211.IBPluginDependency + 212.IBPluginDependency + 213.IBPluginDependency + 214.IBPluginDependency + 215.IBPluginDependency + 216.IBPluginDependency + 217.IBPluginDependency + 218.IBPluginDependency + 219.IBPluginDependency + 220.IBPluginDependency + 221.IBPluginDependency + 23.IBPluginDependency + 236.IBPluginDependency + 239.IBPluginDependency + 24.IBPluginDependency + 29.IBPluginDependency + 295.IBPluginDependency + 296.IBPluginDependency + 297.IBPluginDependency + 298.IBPluginDependency + 346.IBPluginDependency + 348.IBPluginDependency + 349.IBPluginDependency + 350.IBPluginDependency + 351.IBPluginDependency + 354.IBPluginDependency + 419.IBPluginDependency + 449.IBPluginDependency + 450.IBPluginDependency + 451.IBPluginDependency + 452.IBPluginDependency + 453.IBPluginDependency + 457.IBPluginDependency + 458.IBPluginDependency + 459.IBPluginDependency + 462.IBPluginDependency + 464.IBPluginDependency + 465.IBPluginDependency + 470.IBPluginDependency + 491.IBPluginDependency + 492.IBPluginDependency + 493.IBPluginDependency + 5.IBPluginDependency + 533.IBPluginDependency + 535.IBPluginDependency + 535.IBWindowTemplateEditedContentRect + 535.NSWindowTemplate.visibleAtLaunch + 536.IBPluginDependency + 537.IBPluginDependency + 541.IBPluginDependency + 542.IBPluginDependency + 544.IBPluginDependency + 551.IBPluginDependency + 559.IBPluginDependency + 559.IBWindowTemplateEditedContentRect + 559.NSWindowTemplate.visibleAtLaunch + 56.IBPluginDependency + 560.IBPluginDependency + 561.IBPluginDependency + 57.IBPluginDependency + 58.IBPluginDependency + 592.IBPluginDependency + 592.NSWindowTemplate.visibleAtLaunch + 593.IBPluginDependency + 594.IBPluginDependency + 595.IBPluginDependency + 596.IBPluginDependency + 597.IBPluginDependency + 598.IBPluginDependency + 599.IBPluginDependency + 600.IBPluginDependency + 601.IBPluginDependency + 602.IBPluginDependency + 603.IBPluginDependency + 610.IBPluginDependency + 613.IBPluginDependency + 620.IBPluginDependency + 72.IBPluginDependency + 73.IBPluginDependency + 79.IBPluginDependency + 81.IBPluginDependency + 82.IBPluginDependency + 83.IBPluginDependency + 92.IBPluginDependency + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{202, 175}, {397, 581}} + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.WebKitIBPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{344, 175}, {376, 581}} + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.WebKitIBPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + YES + + + + + + YES + + + + + 627 + + + + YES + + Controller + NSObject + + YES + + YES + login: + logout: + + + YES + id + id + + + + YES + + YES + login: + logout: + + + YES + + login: + id + + + logout: + id + + + + + YES + + YES + globalHotkeyMenuItem + loginActivityIndicator + loginViewWindow + logoLayer + mentionsView + mentionsViewWindow + timelineView + timelineViewWindow + viewDelegate + + + YES + NSMenuItem + NSProgressIndicator + NSWindow + NSImageView + WebView + NSWindow + WebView + NSWindow + ViewDelegate + + + + YES + + YES + globalHotkeyMenuItem + loginActivityIndicator + loginViewWindow + logoLayer + mentionsView + mentionsViewWindow + timelineView + timelineViewWindow + viewDelegate + + + YES + + globalHotkeyMenuItem + NSMenuItem + + + loginActivityIndicator + NSProgressIndicator + + + loginViewWindow + NSWindow + + + logoLayer + NSImageView + + + mentionsView + WebView + + + mentionsViewWindow + NSWindow + + + timelineView + WebView + + + timelineViewWindow + NSWindow + + + viewDelegate + ViewDelegate + + + + + IBProjectSource + ./Classes/Controller.h + + + + SUUpdater + NSObject + + checkForUpdates: + id + + + checkForUpdates: + + checkForUpdates: + id + + + + delegate + id + + + delegate + + delegate + id + + + + IBProjectSource + ./Classes/SUUpdater.h + + + + ViewDelegate + NSObject + + IBProjectSource + ./Classes/ViewDelegate.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + 3 + + YES + + YES + Icon + NSMenuCheckmark + NSMenuMixedState + + + YES + {512, 512} + {11, 11} + {10, 3} + + + + diff --git a/Mac/English.lproj/NewMessageWindow.xib b/Mac/English.lproj/NewMessageWindow.xib new file mode 100644 index 0000000..273c84f --- /dev/null +++ b/Mac/English.lproj/NewMessageWindow.xib @@ -0,0 +1,372 @@ + + + + 1080 + 12C60 + 2843 + 1187.34 + 625.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2843 + + + YES + NSCustomObject + NSTextField + NSTextFieldCell + NSView + NSWindowTemplate + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + YES + + NewMessageWindow + + + FirstResponder + + + 7 + 2 + {{133, 535}, {299, 113}} + 1886913536 + New Post + NSWindow + View + + {94, 86} + + + 256 + + YES + + + 274 + {{0, 22}, {299, 91}} + + + + YES + + -1809842175 + 272629760 + + + LucidaGrande + 13 + 1044 + + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + 3 + MAA + + + + NO + + + + 268 + {{257, 2}, {38, 17}} + + + YES + + 68157504 + 71304192 + 256 + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + + + NO + + + {299, 113} + + + + + {{0, 0}, {2560, 1418}} + {94, 108} + {10000000000000, 10000000000000} + newPost + NO + 22 + YES + + + NSApplication + + + + + YES + + + window + + + + 18 + + + + sendTweet: + + + + 100031 + + + + textField + + + + 100034 + + + + counter + + + + 100038 + + + + delegate + + + + 100035 + + + + + YES + + 0 + + YES + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + 5 + + + YES + + + + Window + + + 6 + + + YES + + + + + + + -3 + + + Application + + + 100028 + + + YES + + + + + + 100029 + + + + + 100036 + + + YES + + + + + + 100037 + + + + + + + YES + + YES + -1.IBPluginDependency + -2.IBPluginDependency + -3.IBPluginDependency + 100028.IBPluginDependency + 100029.IBPluginDependency + 100036.IBPluginDependency + 100037.IBPluginDependency + 5.IBPluginDependency + 5.IBWindowTemplateEditedContentRect + 6.IBPluginDependency + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{127, 736}, {299, 113}} + com.apple.InterfaceBuilder.CocoaPlugin + + + + YES + + + + + + YES + + + + + 100038 + + + + YES + + NewMessageWindow + NSDocument + + sendTweet: + NSControl + + + sendTweet: + + sendTweet: + NSControl + + + + YES + + YES + counter + textField + + + YES + NSTextField + NSTextField + + + + YES + + YES + counter + textField + + + YES + + counter + NSTextField + + + textField + NSTextField + + + + + IBProjectSource + ./Classes/NewMessageWindow.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + 3 + + diff --git a/Mac/Icon.icns b/Mac/Icon.icns new file mode 100644 index 0000000..4359f24 Binary files /dev/null and b/Mac/Icon.icns differ diff --git a/Mac/NewMessageWindow.h b/Mac/NewMessageWindow.h new file mode 100644 index 0000000..7d993e6 --- /dev/null +++ b/Mac/NewMessageWindow.h @@ -0,0 +1,28 @@ +// +// NewTweetWindow.h +// Tentia +// +// Created by Jeena on 16.04.10. +// Licence: BSD (see attached LICENCE.txt file). +// + + +#import + + +@interface NewMessageWindow : NSDocument +{ + IBOutlet NSTextField *textField; + IBOutlet NSTextField *counter; + NSString *inReplyTostatusId; + NSString *inReplyToEntity; +} + +@property (nonatomic, retain) IBOutlet NSTextField *textField; +@property (nonatomic, retain) IBOutlet NSTextField *counter; + +- (IBAction)sendTweet:(NSControl *)control; +- (void)inReplyTo:(NSString *)userName statusId:(NSString *)statusId withString:(NSString *)string; +- (void)withString:(NSString *)aString; + +@end diff --git a/Mac/NewMessageWindow.m b/Mac/NewMessageWindow.m new file mode 100644 index 0000000..98d56c1 --- /dev/null +++ b/Mac/NewMessageWindow.m @@ -0,0 +1,158 @@ +// +// NewTweetWindow.m +// Tentia +// +// Created by Jeena on 16.04.10. +// Licence: BSD (see attached LICENCE.txt file). +// + +#import "NewMessageWindow.h" +#import "Constants.h" +#import "TweetModel.h" + +@interface NewMessageWindow (private) +- (BOOL)isCommandEnterEvent:(NSEvent *)e; +@end + +@implementation NewMessageWindow + +@synthesize textField, counter; + + +- (id)init +{ + self = [super init]; + if (self) { + + // Add your subclass-specific initialization here. + // If an error occurs here, send a [self release] message and return nil. + inReplyTostatusId = @""; + inReplyToEntity = @""; + } + return self; +} + +- (NSString *)windowNibName +{ + // Override returning the nib file name of the document + // If you need to use a subclass of NSWindowController or if your document supports multiple NSWindowControllers, you should remove this method and override -makeWindowControllers instead. + return @"NewMessageWindow"; +} + +- (NSString *)displayName { + return @"New Post"; +} + +- (void)windowControllerDidLoadNib:(NSWindowController *) aController +{ + [super windowControllerDidLoadNib:aController]; + // Add any code here that needs to be executed once the windowController has loaded the document's window. + +} + +- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError +{ + // Insert code here to write your document to data of the specified type. If the given outError != NULL, ensure that you set *outError when returning nil. + + // You can also choose to override -fileWrapperOfType:error:, -writeToURL:ofType:error:, or -writeToURL:ofType:forSaveOperation:originalContentsURL:error: instead. + + // For applications targeted for Panther or earlier systems, you should use the deprecated API -dataRepresentationOfType:. In this case you can also choose to override -fileWrapperRepresentationOfType: or -writeToFile:ofType: instead. + + if ( outError != NULL ) { + *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL]; + } + return nil; +} + +- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError +{ + // Insert code here to read your document from the given data of the specified type. If the given outError != NULL, ensure that you set *outError when returning NO. + + // You can also choose to override -readFromFileWrapper:ofType:error: or -readFromURL:ofType:error: instead. + + // For applications targeted for Panther or earlier systems, you should use the deprecated API -loadDataRepresentation:ofType. In this case you can also choose to override -readFromFile:ofType: or -loadFileWrapperRepresentation:ofType: instead. + + if ( outError != NULL ) { + *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL]; + } + return YES; +} + +- (void)inReplyTo:(NSString *)entity statusId:(NSString *)statusId withString:(NSString *)string { + [textField setStringValue:string]; + NSRange range = {[[textField stringValue] length] , 0}; + [[textField currentEditor] setSelectedRange:range]; + + [inReplyTostatusId release]; + inReplyTostatusId = statusId; + [inReplyTostatusId retain]; + + [inReplyToEntity release]; + inReplyToEntity = entity; + [inReplyToEntity retain]; + + [self controlTextDidChange:nil]; +} + +- (void)withString:(NSString *)aString { + [textField setStringValue:aString]; + NSRange range = {[[textField stringValue] length] , 0}; + [[textField currentEditor] setSelectedRange:range]; + + [self controlTextDidChange:nil]; +} + +-(void)controlTextDidChange:(NSNotification *)aNotification { + NSInteger c = MESSAGE_MAX_LENGTH - [[textField stringValue] length]; + [counter setIntValue:c]; + if(c < 0) { + [counter setTextColor:[NSColor redColor]]; + } else { + [counter setTextColor:[NSColor controlTextColor]]; + } +} + + +#pragma mark Keyboard delegate methods + +- (IBAction)sendTweet:(NSControl *)control { + if ([[control stringValue] length] <= MESSAGE_MAX_LENGTH) { + TweetModel *tweet = [[[TweetModel alloc] init] autorelease]; + tweet.text = [control stringValue]; + tweet.inReplyTostatusId = inReplyTostatusId; + tweet.inReplyToEntity = inReplyToEntity; + [[NSNotificationCenter defaultCenter] postNotificationName:@"sendTweet" object:tweet]; + [self close]; + } else { + NSBeep(); + } + +} + +- (BOOL)isCommandEnterEvent:(NSEvent *)e { + NSUInteger flags = (e.modifierFlags & NSDeviceIndependentModifierFlagsMask); + BOOL isCommand = (flags & NSCommandKeyMask) == NSCommandKeyMask; + BOOL isEnter = (e.keyCode == 0x24); // VK_RETURN + return (isCommand && isEnter); +} + +- (BOOL)control:(NSControl *)control textView:(NSTextView *)fieldEditor doCommandBySelector:(SEL)commandSelector +{ + BOOL retval = NO; + + if (commandSelector == @selector(insertNewline:)) { + retval = YES; // causes Apple to NOT fire the default enter action + textField.stringValue = [NSString stringWithFormat:@"%@\n", textField.stringValue]; + + [[[textField window] fieldEditor:YES forObject:nil] scrollRangeToVisible:NSMakeRange([[textField stringValue] length], 0)]; + [[[textField window] fieldEditor:YES forObject:nil] setSelectedRange:NSMakeRange([[textField stringValue] length], 0)]; + } + + if (commandSelector == @selector(noop:)) { + retval = YES; + [self sendTweet:control]; + } + + return retval; +} +@end diff --git a/Mac/Sparkle.framework/Headers b/Mac/Sparkle.framework/Headers new file mode 120000 index 0000000..a177d2a --- /dev/null +++ b/Mac/Sparkle.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/Mac/Sparkle.framework/Resources b/Mac/Sparkle.framework/Resources new file mode 120000 index 0000000..953ee36 --- /dev/null +++ b/Mac/Sparkle.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/Mac/Sparkle.framework/Sparkle b/Mac/Sparkle.framework/Sparkle new file mode 120000 index 0000000..b2c5273 --- /dev/null +++ b/Mac/Sparkle.framework/Sparkle @@ -0,0 +1 @@ +Versions/Current/Sparkle \ No newline at end of file diff --git a/Mac/Sparkle.framework/Versions/A/Headers/SUAppcast.h b/Mac/Sparkle.framework/Versions/A/Headers/SUAppcast.h new file mode 100644 index 0000000..171148a --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Headers/SUAppcast.h @@ -0,0 +1,33 @@ +// +// SUAppcast.h +// Sparkle +// +// Created by Andy Matuschak on 3/12/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#ifndef SUAPPCAST_H +#define SUAPPCAST_H + +@class SUAppcastItem; +@interface SUAppcast : NSObject { + NSArray *items; + NSString *userAgentString; + id delegate; + NSMutableData *incrementalData; +} + +- (void)fetchAppcastFromURL:(NSURL *)url; +- (void)setDelegate:delegate; +- (void)setUserAgentString:(NSString *)userAgentString; + +- (NSArray *)items; + +@end + +@interface NSObject (SUAppcastDelegate) +- (void)appcastDidFinishLoading:(SUAppcast *)appcast; +- (void)appcast:(SUAppcast *)appcast failedToLoadWithError:(NSError *)error; +@end + +#endif diff --git a/Mac/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h b/Mac/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h new file mode 100644 index 0000000..7f1ca65 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h @@ -0,0 +1,47 @@ +// +// SUAppcastItem.h +// Sparkle +// +// Created by Andy Matuschak on 3/12/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#ifndef SUAPPCASTITEM_H +#define SUAPPCASTITEM_H + +@interface SUAppcastItem : NSObject { + NSString *title; + NSDate *date; + NSString *itemDescription; + + NSURL *releaseNotesURL; + + NSString *DSASignature; + NSString *minimumSystemVersion; + + NSURL *fileURL; + NSString *versionString; + NSString *displayVersionString; + + NSDictionary *propertiesDictionary; +} + +// Initializes with data from a dictionary provided by the RSS class. +- initWithDictionary:(NSDictionary *)dict; + +- (NSString *)title; +- (NSString *)versionString; +- (NSString *)displayVersionString; +- (NSDate *)date; +- (NSString *)itemDescription; +- (NSURL *)releaseNotesURL; +- (NSURL *)fileURL; +- (NSString *)DSASignature; +- (NSString *)minimumSystemVersion; + +// Returns the dictionary provided in initWithDictionary; this might be useful later for extensions. +- (NSDictionary *)propertiesDictionary; + +@end + +#endif diff --git a/Mac/Sparkle.framework/Versions/A/Headers/SUUpdater.h b/Mac/Sparkle.framework/Versions/A/Headers/SUUpdater.h new file mode 100644 index 0000000..e78c4d3 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Headers/SUUpdater.h @@ -0,0 +1,118 @@ +// +// SUUpdater.h +// Sparkle +// +// Created by Andy Matuschak on 1/4/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#ifndef SUUPDATER_H +#define SUUPDATER_H + +#import + +@class SUUpdateDriver, SUAppcastItem, SUHost, SUAppcast; +@interface SUUpdater : NSObject { + NSTimer *checkTimer; + SUUpdateDriver *driver; + + SUHost *host; + IBOutlet id delegate; +} + ++ (SUUpdater *)sharedUpdater; ++ (SUUpdater *)updaterForBundle:(NSBundle *)bundle; +- (NSBundle *)hostBundle; + +- (void)setDelegate:(id)delegate; +- delegate; + +- (void)setAutomaticallyChecksForUpdates:(BOOL)automaticallyChecks; +- (BOOL)automaticallyChecksForUpdates; + +- (void)setUpdateCheckInterval:(NSTimeInterval)interval; +- (NSTimeInterval)updateCheckInterval; + +- (void)setFeedURL:(NSURL *)feedURL; +- (NSURL *)feedURL; + +- (void)setSendsSystemProfile:(BOOL)sendsSystemProfile; +- (BOOL)sendsSystemProfile; + +- (void)setAutomaticallyDownloadsUpdates:(BOOL)automaticallyDownloadsUpdates; +- (BOOL)automaticallyDownloadsUpdates; + +// This IBAction is meant for a main menu item. Hook up any menu item to this action, +// and Sparkle will check for updates and report back its findings verbosely. +- (IBAction)checkForUpdates:sender; + +// This kicks off an update meant to be programmatically initiated. That is, it will display no UI unless it actually finds an update, +// in which case it proceeds as usual. If the fully automated updating is turned on, however, this will invoke that behavior, and if an +// update is found, it will be downloaded and prepped for installation. +- (void)checkForUpdatesInBackground; + +// Date of last update check. Returns null if no check has been performed. +- (NSDate*)lastUpdateCheckDate; + +// This begins a "probing" check for updates which will not actually offer to update to that version. The delegate methods, though, +// (up to updater:didFindValidUpdate: and updaterDidNotFindUpdate:), are called, so you can use that information in your UI. +- (void)checkForUpdateInformation; + +// Call this to appropriately schedule or cancel the update checking timer according to the preferences for time interval and automatic checks. This call does not change the date of the next check, but only the internal NSTimer. +- (void)resetUpdateCycle; + +- (BOOL)updateInProgress; +@end + +@interface NSObject (SUUpdaterDelegateInformalProtocol) +// This method allows you to add extra parameters to the appcast URL, potentially based on whether or not Sparkle will also be sending along the system profile. This method should return an array of dictionaries with keys: "key", "value", "displayKey", "displayValue", the latter two being specifically for display to the user. +- (NSArray *)feedParametersForUpdater:(SUUpdater *)updater sendingSystemProfile:(BOOL)sendingProfile; + +// Use this to override the default behavior for Sparkle prompting the user about automatic update checks. +- (BOOL)updaterShouldPromptForPermissionToCheckForUpdates:(SUUpdater *)bundle; + +// Implement this if you want to do some special handling with the appcast once it finishes loading. +- (void)updater:(SUUpdater *)updater didFinishLoadingAppcast:(SUAppcast *)appcast; + +// If you're using special logic or extensions in your appcast, implement this to use your own logic for finding +// a valid update, if any, in the given appcast. +- (SUAppcastItem *)bestValidUpdateInAppcast:(SUAppcast *)appcast forUpdater:(SUUpdater *)bundle; + +// Sent when a valid update is found by the update driver. +- (void)updater:(SUUpdater *)updater didFindValidUpdate:(SUAppcastItem *)update; + +// Sent when a valid update is not found. +- (void)updaterDidNotFindUpdate:(SUUpdater *)update; + +// Sent immediately before installing the specified update. +- (void)updater:(SUUpdater *)updater willInstallUpdate:(SUAppcastItem *)update; + +// Return YES to delay the relaunch until you do some processing; invoke the given NSInvocation to continue. +- (BOOL)updater:(SUUpdater *)updater shouldPostponeRelaunchForUpdate:(SUAppcastItem *)update untilInvoking:(NSInvocation *)invocation; + +// Called immediately before relaunching. +- (void)updaterWillRelaunchApplication:(SUUpdater *)updater; + +// This method allows you to provide a custom version comparator. +// If you don't implement this method or return nil, the standard version comparator will be used. +- (id )versionComparatorForUpdater:(SUUpdater *)updater; + +// Returns the path which is used to relaunch the client after the update is installed. By default, the path of the host bundle. +- (NSString *)pathToRelaunchForUpdater:(SUUpdater *)updater; + +@end + +// Define some minimum intervals to avoid DOS-like checking attacks. These are in seconds. +#ifdef DEBUG +#define SU_MIN_CHECK_INTERVAL 60 +#else +#define SU_MIN_CHECK_INTERVAL 60*60 +#endif + +#ifdef DEBUG +#define SU_DEFAULT_CHECK_INTERVAL 60 +#else +#define SU_DEFAULT_CHECK_INTERVAL 60*60*24 +#endif + +#endif diff --git a/Mac/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h b/Mac/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h new file mode 100644 index 0000000..3d11ae8 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h @@ -0,0 +1,27 @@ +// +// SUVersionComparisonProtocol.h +// Sparkle +// +// Created by Andy Matuschak on 12/21/07. +// Copyright 2007 Andy Matuschak. All rights reserved. +// + +#ifndef SUVERSIONCOMPARISONPROTOCOL_H +#define SUVERSIONCOMPARISONPROTOCOL_H + +/*! + @protocol + @abstract Implement this protocol to provide version comparison facilities for Sparkle. +*/ +@protocol SUVersionComparison + +/*! + @method + @abstract An abstract method to compare two version strings. + @discussion Should return NSOrderedAscending if b > a, NSOrderedDescending if b < a, and NSOrderedSame if they are equivalent. +*/ +- (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB; + +@end + +#endif diff --git a/Mac/Sparkle.framework/Versions/A/Headers/Sparkle.h b/Mac/Sparkle.framework/Versions/A/Headers/Sparkle.h new file mode 100644 index 0000000..08dd577 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Headers/Sparkle.h @@ -0,0 +1,21 @@ +// +// Sparkle.h +// Sparkle +// +// Created by Andy Matuschak on 3/16/06. (Modified by CDHW on 23/12/07) +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#ifndef SPARKLE_H +#define SPARKLE_H + +// This list should include the shared headers. It doesn't matter if some of them aren't shared (unless +// there are name-space collisions) so we can list all of them to start with: + +#import + +#import +#import +#import + +#endif diff --git a/Mac/Sparkle.framework/Versions/A/Resources/Info.plist b/Mac/Sparkle.framework/Versions/A/Resources/Info.plist new file mode 100644 index 0000000..c7f277d --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + Sparkle + CFBundleIdentifier + org.andymatuschak.Sparkle + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Sparkle + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.5 Beta 6 + CFBundleSignature + ???? + CFBundleVersion + 313 + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/License.txt b/Mac/Sparkle.framework/Versions/A/Resources/License.txt new file mode 100644 index 0000000..20466c4 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/License.txt @@ -0,0 +1,7 @@ +Copyright (c) 2006 Andy Matuschak + +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: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +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. \ No newline at end of file diff --git a/Mac/Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist b/Mac/Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist new file mode 100644 index 0000000..92ef947 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist @@ -0,0 +1,174 @@ + + + + + ADP2,1 + Developer Transition Kit + MacBook1,1 + MacBook (Core Duo) + MacBook2,1 + MacBook (Core 2 Duo) + MacBook4,1 + MacBook (Core 2 Duo Feb 2008) + MacBookAir1,1 + MacBook Air (January 2008) + MacBookPro1,1 + MacBook Pro Core Duo (15-inch) + MacBookPro1,2 + MacBook Pro Core Duo (17-inch) + MacBookPro2,1 + MacBook Pro Core 2 Duo (17-inch) + MacBookPro2,2 + MacBook Pro Core 2 Duo (15-inch) + MacBookPro3,1 + MacBook Pro Core 2 Duo (15-inch LED, Core 2 Duo) + MacBookPro3,2 + MacBook Pro Core 2 Duo (17-inch HD, Core 2 Duo) + MacBookPro4,1 + MacBook Pro (Core 2 Duo Feb 2008) + MacPro1,1 + Mac Pro (four-core) + MacPro2,1 + Mac Pro (eight-core) + MacPro3,1 + Mac Pro (January 2008 4- or 8- core "Harpertown") + Macmini1,1 + Mac Mini (Core Solo/Duo) + PowerBook1,1 + PowerBook G3 + PowerBook2,1 + iBook G3 + PowerBook2,2 + iBook G3 (FireWire) + PowerBook2,3 + iBook G3 + PowerBook2,4 + iBook G3 + PowerBook3,1 + PowerBook G3 (FireWire) + PowerBook3,2 + PowerBook G4 + PowerBook3,3 + PowerBook G4 (Gigabit Ethernet) + PowerBook3,4 + PowerBook G4 (DVI) + PowerBook3,5 + PowerBook G4 (1GHz / 867MHz) + PowerBook4,1 + iBook G3 (Dual USB, Late 2001) + PowerBook4,2 + iBook G3 (16MB VRAM) + PowerBook4,3 + iBook G3 Opaque 16MB VRAM, 32MB VRAM, Early 2003) + PowerBook5,1 + PowerBook G4 (17 inch) + PowerBook5,2 + PowerBook G4 (15 inch FW 800) + PowerBook5,3 + PowerBook G4 (17-inch 1.33GHz) + PowerBook5,4 + PowerBook G4 (15 inch 1.5/1.33GHz) + PowerBook5,5 + PowerBook G4 (17-inch 1.5GHz) + PowerBook5,6 + PowerBook G4 (15 inch 1.67GHz/1.5GHz) + PowerBook5,7 + PowerBook G4 (17-inch 1.67GHz) + PowerBook5,8 + PowerBook G4 (Double layer SD, 15 inch) + PowerBook5,9 + PowerBook G4 (Double layer SD, 17 inch) + PowerBook6,1 + PowerBook G4 (12 inch) + PowerBook6,2 + PowerBook G4 (12 inch, DVI) + PowerBook6,3 + iBook G4 + PowerBook6,4 + PowerBook G4 (12 inch 1.33GHz) + PowerBook6,5 + iBook G4 (Early-Late 2004) + PowerBook6,7 + iBook G4 (Mid 2005) + PowerBook6,8 + PowerBook G4 (12 inch 1.5GHz) + PowerMac1,1 + Power Macintosh G3 (Blue & White) + PowerMac1,2 + Power Macintosh G4 (PCI Graphics) + PowerMac10,1 + Mac Mini G4 + PowerMac10,2 + Mac Mini (Late 2005) + PowerMac11,2 + Power Macintosh G5 (Late 2005) + PowerMac12,1 + iMac G5 (iSight) + PowerMac2,1 + iMac G3 (Slot-loading CD-ROM) + PowerMac2,2 + iMac G3 (Summer 2000) + PowerMac3,1 + Power Macintosh G4 (AGP Graphics) + PowerMac3,2 + Power Macintosh G4 (AGP Graphics) + PowerMac3,3 + Power Macintosh G4 (Gigabit Ethernet) + PowerMac3,4 + Power Macintosh G4 (Digital Audio) + PowerMac3,5 + Power Macintosh G4 (Quick Silver) + PowerMac3,6 + Power Macintosh G4 (Mirrored Drive Door) + PowerMac4,1 + iMac G3 (Early/Summer 2001) + PowerMac4,2 + iMac G4 (Flat Panel) + PowerMac4,4 + eMac + PowerMac4,5 + iMac G4 (17-inch Flat Panel) + PowerMac5,1 + Power Macintosh G4 Cube + PowerMac6,1 + iMac G4 (USB 2.0) + PowerMac6,3 + iMac G4 (20-inch Flat Panel) + PowerMac6,4 + eMac (USB 2.0, 2005) + PowerMac7,2 + Power Macintosh G5 + PowerMac7,3 + Power Macintosh G5 + PowerMac8,1 + iMac G5 + PowerMac8,2 + iMac G5 (Ambient Light Sensor) + PowerMac9,1 + Power Macintosh G5 (Late 2005) + RackMac1,1 + Xserve G4 + RackMac1,2 + Xserve G4 (slot-loading, cluster node) + RackMac3,1 + Xserve G5 + Xserve1,1 + Xserve (Intel Xeon) + Xserve2,1 + Xserve (January 2008 quad-core) + iMac1,1 + iMac G3 (Rev A-D) + iMac4,1 + iMac (Core Duo) + iMac4,2 + iMac for Education (17-inch, Core Duo) + iMac5,1 + iMac (Core 2 Duo, 17 or 20 inch, SuperDrive) + iMac5,2 + iMac (Core 2 Duo, 17 inch, Combo Drive) + iMac6,1 + iMac (Core 2 Duo, 24 inch, SuperDrive) + iMac8,1 + iMac (April 2008) + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/SUStatus.nib/classes.nib b/Mac/Sparkle.framework/Versions/A/Resources/SUStatus.nib/classes.nib new file mode 100644 index 0000000..22f13f8 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/SUStatus.nib/classes.nib @@ -0,0 +1,56 @@ + + + + + IBClasses + + + CLASS + SUWindowController + LANGUAGE + ObjC + SUPERCLASS + NSWindowController + + + CLASS + NSApplication + LANGUAGE + ObjC + SUPERCLASS + NSResponder + + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + CLASS + NSObject + LANGUAGE + ObjC + + + CLASS + SUStatusController + LANGUAGE + ObjC + OUTLETS + + actionButton + NSButton + progressBar + NSProgressIndicator + + SUPERCLASS + SUWindowController + + + IBVersion + 1 + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/SUStatus.nib/info.nib b/Mac/Sparkle.framework/Versions/A/Resources/SUStatus.nib/info.nib new file mode 100644 index 0000000..a9ac867 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/SUStatus.nib/info.nib @@ -0,0 +1,20 @@ + + + + + IBFramework Version + 670 + IBLastKnownRelativeProjectPath + Sparkle.xcodeproj + IBOldestOS + 5 + IBOpenObjects + + 6 + + IBSystem Version + 10A96 + targetFramework + IBCocoaFramework + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/SUStatus.nib/keyedobjects.nib b/Mac/Sparkle.framework/Versions/A/Resources/SUStatus.nib/keyedobjects.nib new file mode 100644 index 0000000..4f1d598 Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/SUStatus.nib/keyedobjects.nib differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 0000000..4b1ab30 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,50 @@ + + + + + IBClasses + + + CLASS + SUWindowController + LANGUAGE + ObjC + SUPERCLASS + NSWindowController + + + ACTIONS + + doNotInstall + id + installLater + id + installNow + id + + CLASS + SUAutomaticUpdateAlert + LANGUAGE + ObjC + SUPERCLASS + SUWindowController + + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + CLASS + NSObject + LANGUAGE + ObjC + + + IBVersion + 1 + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/info.nib b/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 0000000..2e04cfa --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,20 @@ + + + + + IBFramework Version + 667 + IBLastKnownRelativeProjectPath + ../Sparkle.xcodeproj + IBOldestOS + 5 + IBOpenObjects + + 6 + + IBSystem Version + 9D34 + targetFramework + IBCocoaFramework + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000..6b92630 Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/classes.nib b/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/classes.nib new file mode 100644 index 0000000..994d4c3 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/classes.nib @@ -0,0 +1,67 @@ + + + + + IBClasses + + + CLASS + SUWindowController + LANGUAGE + ObjC + SUPERCLASS + NSWindowController + + + CLASS + NSApplication + LANGUAGE + ObjC + SUPERCLASS + NSResponder + + + ACTIONS + + installUpdate + id + remindMeLater + id + skipThisVersion + id + + CLASS + SUUpdateAlert + LANGUAGE + ObjC + OUTLETS + + delegate + id + description + NSTextField + releaseNotesView + WebView + + SUPERCLASS + SUWindowController + + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + CLASS + NSObject + LANGUAGE + ObjC + + + IBVersion + 1 + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/info.nib b/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/info.nib new file mode 100644 index 0000000..2e04cfa --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/info.nib @@ -0,0 +1,20 @@ + + + + + IBFramework Version + 667 + IBLastKnownRelativeProjectPath + ../Sparkle.xcodeproj + IBOldestOS + 5 + IBOpenObjects + + 6 + + IBSystem Version + 9D34 + targetFramework + IBCocoaFramework + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/keyedobjects.nib b/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000..b4353d2 Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/keyedobjects.nib differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib/classes.nib b/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib/classes.nib new file mode 100644 index 0000000..5220a22 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib/classes.nib @@ -0,0 +1,59 @@ + + + + + IBClasses + + + CLASS + SUWindowController + LANGUAGE + ObjC + SUPERCLASS + NSWindowController + + + ACTIONS + + finishPrompt + id + toggleMoreInfo + id + + CLASS + SUUpdatePermissionPrompt + LANGUAGE + ObjC + OUTLETS + + delegate + id + descriptionTextField + NSTextField + moreInfoButton + NSButton + moreInfoView + NSView + + SUPERCLASS + SUWindowController + + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + CLASS + NSObject + LANGUAGE + ObjC + + + IBVersion + 1 + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib/info.nib b/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib/info.nib new file mode 100644 index 0000000..2e04cfa --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib/info.nib @@ -0,0 +1,20 @@ + + + + + IBFramework Version + 667 + IBLastKnownRelativeProjectPath + ../Sparkle.xcodeproj + IBOldestOS + 5 + IBOpenObjects + + 6 + + IBSystem Version + 9D34 + targetFramework + IBCocoaFramework + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib b/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib new file mode 100644 index 0000000..b403a3e Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings b/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings new file mode 100644 index 0000000..b31f928 Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 0000000..4b1ab30 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,50 @@ + + + + + IBClasses + + + CLASS + SUWindowController + LANGUAGE + ObjC + SUPERCLASS + NSWindowController + + + ACTIONS + + doNotInstall + id + installLater + id + installNow + id + + CLASS + SUAutomaticUpdateAlert + LANGUAGE + ObjC + SUPERCLASS + SUWindowController + + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + CLASS + NSObject + LANGUAGE + ObjC + + + IBVersion + 1 + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib b/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 0000000..ab36d31 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,20 @@ + + + + + IBFramework Version + 658 + IBLastKnownRelativeProjectPath + ../Sparkle.xcodeproj + IBOldestOS + 5 + IBOpenObjects + + 6 + + IBSystem Version + 9C7010 + targetFramework + IBCocoaFramework + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000..7630390 Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/classes.nib b/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/classes.nib new file mode 100644 index 0000000..994d4c3 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/classes.nib @@ -0,0 +1,67 @@ + + + + + IBClasses + + + CLASS + SUWindowController + LANGUAGE + ObjC + SUPERCLASS + NSWindowController + + + CLASS + NSApplication + LANGUAGE + ObjC + SUPERCLASS + NSResponder + + + ACTIONS + + installUpdate + id + remindMeLater + id + skipThisVersion + id + + CLASS + SUUpdateAlert + LANGUAGE + ObjC + OUTLETS + + delegate + id + description + NSTextField + releaseNotesView + WebView + + SUPERCLASS + SUWindowController + + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + CLASS + NSObject + LANGUAGE + ObjC + + + IBVersion + 1 + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/info.nib b/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/info.nib new file mode 100644 index 0000000..2fb8a83 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/info.nib @@ -0,0 +1,20 @@ + + + + + IBFramework Version + 670 + IBLastKnownRelativeProjectPath + ../Sparkle.xcodeproj + IBOldestOS + 5 + IBOpenObjects + + 18 + + IBSystem Version + 10A96 + targetFramework + IBCocoaFramework + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nib b/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000..e7e7497 Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nib differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/classes.nib b/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/classes.nib new file mode 100644 index 0000000..5220a22 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/classes.nib @@ -0,0 +1,59 @@ + + + + + IBClasses + + + CLASS + SUWindowController + LANGUAGE + ObjC + SUPERCLASS + NSWindowController + + + ACTIONS + + finishPrompt + id + toggleMoreInfo + id + + CLASS + SUUpdatePermissionPrompt + LANGUAGE + ObjC + OUTLETS + + delegate + id + descriptionTextField + NSTextField + moreInfoButton + NSButton + moreInfoView + NSView + + SUPERCLASS + SUWindowController + + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + CLASS + NSObject + LANGUAGE + ObjC + + + IBVersion + 1 + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/info.nib b/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/info.nib new file mode 100644 index 0000000..b1cd28e --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/info.nib @@ -0,0 +1,21 @@ + + + + + IBFramework Version + 670 + IBLastKnownRelativeProjectPath + ../Sparkle.xcodeproj + IBOldestOS + 5 + IBOpenObjects + + 6 + 41 + + IBSystem Version + 10A96 + targetFramework + IBCocoaFramework + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib b/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib new file mode 100644 index 0000000..e8dc5b8 Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings b/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings new file mode 100644 index 0000000..16e0787 Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 0000000..4b1ab30 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,50 @@ + + + + + IBClasses + + + CLASS + SUWindowController + LANGUAGE + ObjC + SUPERCLASS + NSWindowController + + + ACTIONS + + doNotInstall + id + installLater + id + installNow + id + + CLASS + SUAutomaticUpdateAlert + LANGUAGE + ObjC + SUPERCLASS + SUWindowController + + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + CLASS + NSObject + LANGUAGE + ObjC + + + IBVersion + 1 + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/info.nib b/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 0000000..2e04cfa --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,20 @@ + + + + + IBFramework Version + 667 + IBLastKnownRelativeProjectPath + ../Sparkle.xcodeproj + IBOldestOS + 5 + IBOpenObjects + + 6 + + IBSystem Version + 9D34 + targetFramework + IBCocoaFramework + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000..6b2f938 Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/classes.nib b/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/classes.nib new file mode 100644 index 0000000..994d4c3 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/classes.nib @@ -0,0 +1,67 @@ + + + + + IBClasses + + + CLASS + SUWindowController + LANGUAGE + ObjC + SUPERCLASS + NSWindowController + + + CLASS + NSApplication + LANGUAGE + ObjC + SUPERCLASS + NSResponder + + + ACTIONS + + installUpdate + id + remindMeLater + id + skipThisVersion + id + + CLASS + SUUpdateAlert + LANGUAGE + ObjC + OUTLETS + + delegate + id + description + NSTextField + releaseNotesView + WebView + + SUPERCLASS + SUWindowController + + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + CLASS + NSObject + LANGUAGE + ObjC + + + IBVersion + 1 + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/info.nib b/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/info.nib new file mode 100644 index 0000000..2e04cfa --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/info.nib @@ -0,0 +1,20 @@ + + + + + IBFramework Version + 667 + IBLastKnownRelativeProjectPath + ../Sparkle.xcodeproj + IBOldestOS + 5 + IBOpenObjects + + 6 + + IBSystem Version + 9D34 + targetFramework + IBCocoaFramework + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/keyedobjects.nib b/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000..c9b1e7d Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/keyedobjects.nib differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib/classes.nib b/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib/classes.nib new file mode 100644 index 0000000..5220a22 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib/classes.nib @@ -0,0 +1,59 @@ + + + + + IBClasses + + + CLASS + SUWindowController + LANGUAGE + ObjC + SUPERCLASS + NSWindowController + + + ACTIONS + + finishPrompt + id + toggleMoreInfo + id + + CLASS + SUUpdatePermissionPrompt + LANGUAGE + ObjC + OUTLETS + + delegate + id + descriptionTextField + NSTextField + moreInfoButton + NSButton + moreInfoView + NSView + + SUPERCLASS + SUWindowController + + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + CLASS + NSObject + LANGUAGE + ObjC + + + IBVersion + 1 + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib/info.nib b/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib/info.nib new file mode 100644 index 0000000..3eb7f81 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib/info.nib @@ -0,0 +1,20 @@ + + + + + IBFramework Version + 667 + IBLastKnownRelativeProjectPath + ../../Sparkle.xcodeproj + IBOldestOS + 5 + IBOpenObjects + + 6 + + IBSystem Version + 9D34 + targetFramework + IBCocoaFramework + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib b/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib new file mode 100644 index 0000000..8c54c21 Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings b/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings new file mode 100644 index 0000000..f83ea23 Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 0000000..4b1ab30 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,50 @@ + + + + + IBClasses + + + CLASS + SUWindowController + LANGUAGE + ObjC + SUPERCLASS + NSWindowController + + + ACTIONS + + doNotInstall + id + installLater + id + installNow + id + + CLASS + SUAutomaticUpdateAlert + LANGUAGE + ObjC + SUPERCLASS + SUWindowController + + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + CLASS + NSObject + LANGUAGE + ObjC + + + IBVersion + 1 + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/info.nib b/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 0000000..33a6020 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBFramework Version + 629 + IBOldestOS + 5 + IBOpenObjects + + IBSystem Version + 9D34 + targetFramework + IBCocoaFramework + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000..4cd529a Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/classes.nib b/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/classes.nib new file mode 100644 index 0000000..994d4c3 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/classes.nib @@ -0,0 +1,67 @@ + + + + + IBClasses + + + CLASS + SUWindowController + LANGUAGE + ObjC + SUPERCLASS + NSWindowController + + + CLASS + NSApplication + LANGUAGE + ObjC + SUPERCLASS + NSResponder + + + ACTIONS + + installUpdate + id + remindMeLater + id + skipThisVersion + id + + CLASS + SUUpdateAlert + LANGUAGE + ObjC + OUTLETS + + delegate + id + description + NSTextField + releaseNotesView + WebView + + SUPERCLASS + SUWindowController + + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + CLASS + NSObject + LANGUAGE + ObjC + + + IBVersion + 1 + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/info.nib b/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/info.nib new file mode 100644 index 0000000..d2586ea --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBFramework Version + 629 + IBOldestOS + 5 + IBOpenObjects + + IBSystem Version + 9E17 + targetFramework + IBCocoaFramework + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/keyedobjects.nib b/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000..65dfc95 Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/keyedobjects.nib differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/classes.nib b/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/classes.nib new file mode 100644 index 0000000..5220a22 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/classes.nib @@ -0,0 +1,59 @@ + + + + + IBClasses + + + CLASS + SUWindowController + LANGUAGE + ObjC + SUPERCLASS + NSWindowController + + + ACTIONS + + finishPrompt + id + toggleMoreInfo + id + + CLASS + SUUpdatePermissionPrompt + LANGUAGE + ObjC + OUTLETS + + delegate + id + descriptionTextField + NSTextField + moreInfoButton + NSButton + moreInfoView + NSView + + SUPERCLASS + SUWindowController + + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + CLASS + NSObject + LANGUAGE + ObjC + + + IBVersion + 1 + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/info.nib b/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/info.nib new file mode 100644 index 0000000..d2586ea --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBFramework Version + 629 + IBOldestOS + 5 + IBOpenObjects + + IBSystem Version + 9E17 + targetFramework + IBCocoaFramework + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib b/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib new file mode 100644 index 0000000..4b7cc90 Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings b/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings new file mode 100644 index 0000000..ea175ae Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/fr.lproj b/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/fr.lproj new file mode 120000 index 0000000..88614fe --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/fr.lproj/fr.lproj @@ -0,0 +1 @@ +/Users/andym/Development/Build Products/Release/Sparkle.framework/Resources/fr.lproj \ No newline at end of file diff --git a/Mac/Sparkle.framework/Versions/A/Resources/fr_CA.lproj b/Mac/Sparkle.framework/Versions/A/Resources/fr_CA.lproj new file mode 120000 index 0000000..88614fe --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/fr_CA.lproj @@ -0,0 +1 @@ +/Users/andym/Development/Build Products/Release/Sparkle.framework/Resources/fr.lproj \ No newline at end of file diff --git a/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 0000000..4b1ab30 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,50 @@ + + + + + IBClasses + + + CLASS + SUWindowController + LANGUAGE + ObjC + SUPERCLASS + NSWindowController + + + ACTIONS + + doNotInstall + id + installLater + id + installNow + id + + CLASS + SUAutomaticUpdateAlert + LANGUAGE + ObjC + SUPERCLASS + SUWindowController + + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + CLASS + NSObject + LANGUAGE + ObjC + + + IBVersion + 1 + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/info.nib b/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 0000000..2e04cfa --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,20 @@ + + + + + IBFramework Version + 667 + IBLastKnownRelativeProjectPath + ../Sparkle.xcodeproj + IBOldestOS + 5 + IBOpenObjects + + 6 + + IBSystem Version + 9D34 + targetFramework + IBCocoaFramework + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000..15ba8f4 Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/classes.nib b/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/classes.nib new file mode 100644 index 0000000..994d4c3 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/classes.nib @@ -0,0 +1,67 @@ + + + + + IBClasses + + + CLASS + SUWindowController + LANGUAGE + ObjC + SUPERCLASS + NSWindowController + + + CLASS + NSApplication + LANGUAGE + ObjC + SUPERCLASS + NSResponder + + + ACTIONS + + installUpdate + id + remindMeLater + id + skipThisVersion + id + + CLASS + SUUpdateAlert + LANGUAGE + ObjC + OUTLETS + + delegate + id + description + NSTextField + releaseNotesView + WebView + + SUPERCLASS + SUWindowController + + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + CLASS + NSObject + LANGUAGE + ObjC + + + IBVersion + 1 + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/info.nib b/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/info.nib new file mode 100644 index 0000000..2e04cfa --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/info.nib @@ -0,0 +1,20 @@ + + + + + IBFramework Version + 667 + IBLastKnownRelativeProjectPath + ../Sparkle.xcodeproj + IBOldestOS + 5 + IBOpenObjects + + 6 + + IBSystem Version + 9D34 + targetFramework + IBCocoaFramework + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/keyedobjects.nib b/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000..2984064 Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/keyedobjects.nib differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib/classes.nib b/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib/classes.nib new file mode 100644 index 0000000..5220a22 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib/classes.nib @@ -0,0 +1,59 @@ + + + + + IBClasses + + + CLASS + SUWindowController + LANGUAGE + ObjC + SUPERCLASS + NSWindowController + + + ACTIONS + + finishPrompt + id + toggleMoreInfo + id + + CLASS + SUUpdatePermissionPrompt + LANGUAGE + ObjC + OUTLETS + + delegate + id + descriptionTextField + NSTextField + moreInfoButton + NSButton + moreInfoView + NSView + + SUPERCLASS + SUWindowController + + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + CLASS + NSObject + LANGUAGE + ObjC + + + IBVersion + 1 + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib/info.nib b/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib/info.nib new file mode 100644 index 0000000..c493485 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib/info.nib @@ -0,0 +1,20 @@ + + + + + IBFramework Version + 667 + IBLastKnownRelativeProjectPath + ../Sparkle.xcodeproj + IBOldestOS + 5 + IBOpenObjects + + 5 + + IBSystem Version + 9D34 + targetFramework + IBCocoaFramework + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib b/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib new file mode 100644 index 0000000..55cc2c2 Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings b/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings new file mode 100644 index 0000000..5c410d0 Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 0000000..4b1ab30 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,50 @@ + + + + + IBClasses + + + CLASS + SUWindowController + LANGUAGE + ObjC + SUPERCLASS + NSWindowController + + + ACTIONS + + doNotInstall + id + installLater + id + installNow + id + + CLASS + SUAutomaticUpdateAlert + LANGUAGE + ObjC + SUPERCLASS + SUWindowController + + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + CLASS + NSObject + LANGUAGE + ObjC + + + IBVersion + 1 + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/info.nib b/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 0000000..3f09790 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,18 @@ + + + + + IBFramework Version + 629 + IBOldestOS + 5 + IBOpenObjects + + 6 + + IBSystem Version + 9D34 + targetFramework + IBCocoaFramework + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000..aa38f86 Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/classes.nib b/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/classes.nib new file mode 100644 index 0000000..994d4c3 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/classes.nib @@ -0,0 +1,67 @@ + + + + + IBClasses + + + CLASS + SUWindowController + LANGUAGE + ObjC + SUPERCLASS + NSWindowController + + + CLASS + NSApplication + LANGUAGE + ObjC + SUPERCLASS + NSResponder + + + ACTIONS + + installUpdate + id + remindMeLater + id + skipThisVersion + id + + CLASS + SUUpdateAlert + LANGUAGE + ObjC + OUTLETS + + delegate + id + description + NSTextField + releaseNotesView + WebView + + SUPERCLASS + SUWindowController + + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + CLASS + NSObject + LANGUAGE + ObjC + + + IBVersion + 1 + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/info.nib b/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/info.nib new file mode 100644 index 0000000..d2586ea --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBFramework Version + 629 + IBOldestOS + 5 + IBOpenObjects + + IBSystem Version + 9E17 + targetFramework + IBCocoaFramework + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/keyedobjects.nib b/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000..c82d358 Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/keyedobjects.nib differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/classes.nib b/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/classes.nib new file mode 100644 index 0000000..5220a22 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/classes.nib @@ -0,0 +1,59 @@ + + + + + IBClasses + + + CLASS + SUWindowController + LANGUAGE + ObjC + SUPERCLASS + NSWindowController + + + ACTIONS + + finishPrompt + id + toggleMoreInfo + id + + CLASS + SUUpdatePermissionPrompt + LANGUAGE + ObjC + OUTLETS + + delegate + id + descriptionTextField + NSTextField + moreInfoButton + NSButton + moreInfoView + NSView + + SUPERCLASS + SUWindowController + + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + CLASS + NSObject + LANGUAGE + ObjC + + + IBVersion + 1 + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/info.nib b/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/info.nib new file mode 100644 index 0000000..d2586ea --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBFramework Version + 629 + IBOldestOS + 5 + IBOpenObjects + + IBSystem Version + 9E17 + targetFramework + IBCocoaFramework + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib b/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib new file mode 100644 index 0000000..ac298ce Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings b/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings new file mode 100644 index 0000000..67cf535 Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/relaunch b/Mac/Sparkle.framework/Versions/A/Resources/relaunch new file mode 100755 index 0000000..e7b96d6 Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/relaunch differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 0000000..4b1ab30 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,50 @@ + + + + + IBClasses + + + CLASS + SUWindowController + LANGUAGE + ObjC + SUPERCLASS + NSWindowController + + + ACTIONS + + doNotInstall + id + installLater + id + installNow + id + + CLASS + SUAutomaticUpdateAlert + LANGUAGE + ObjC + SUPERCLASS + SUWindowController + + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + CLASS + NSObject + LANGUAGE + ObjC + + + IBVersion + 1 + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/info.nib b/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 0000000..2b3d425 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,20 @@ + + + + + IBFramework Version + 670 + IBLastKnownRelativeProjectPath + ../Sparkle.xcodeproj + IBOldestOS + 5 + IBOpenObjects + + 6 + + IBSystem Version + 9E17 + targetFramework + IBCocoaFramework + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000..1d4655c Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/classes.nib b/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/classes.nib new file mode 100644 index 0000000..994d4c3 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/classes.nib @@ -0,0 +1,67 @@ + + + + + IBClasses + + + CLASS + SUWindowController + LANGUAGE + ObjC + SUPERCLASS + NSWindowController + + + CLASS + NSApplication + LANGUAGE + ObjC + SUPERCLASS + NSResponder + + + ACTIONS + + installUpdate + id + remindMeLater + id + skipThisVersion + id + + CLASS + SUUpdateAlert + LANGUAGE + ObjC + OUTLETS + + delegate + id + description + NSTextField + releaseNotesView + WebView + + SUPERCLASS + SUWindowController + + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + CLASS + NSObject + LANGUAGE + ObjC + + + IBVersion + 1 + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/info.nib b/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/info.nib new file mode 100644 index 0000000..2b3d425 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/info.nib @@ -0,0 +1,20 @@ + + + + + IBFramework Version + 670 + IBLastKnownRelativeProjectPath + ../Sparkle.xcodeproj + IBOldestOS + 5 + IBOpenObjects + + 6 + + IBSystem Version + 9E17 + targetFramework + IBCocoaFramework + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/keyedobjects.nib b/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000..103b1cf Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/keyedobjects.nib differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/classes.nib b/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/classes.nib new file mode 100644 index 0000000..0f776c8 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/classes.nib @@ -0,0 +1,59 @@ + + + + + IBClasses + + + CLASS + NSObject + LANGUAGE + ObjC + + + CLASS + SUWindowController + LANGUAGE + ObjC + SUPERCLASS + NSWindowController + + + ACTIONS + + finishPrompt + id + toggleMoreInfo + id + + CLASS + SUUpdatePermissionPrompt + LANGUAGE + ObjC + OUTLETS + + delegate + id + descriptionTextField + NSTextField + moreInfoButton + NSButton + moreInfoView + NSView + + SUPERCLASS + SUWindowController + + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + IBVersion + 1 + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/info.nib b/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/info.nib new file mode 100644 index 0000000..5132e29 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/info.nib @@ -0,0 +1,18 @@ + + + + + IBFramework Version + 670 + IBLastKnownRelativeProjectPath + ../Sparkle.xcodeproj + IBOldestOS + 5 + IBOpenObjects + + IBSystem Version + 9E17 + targetFramework + IBCocoaFramework + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib b/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib new file mode 100644 index 0000000..c09d9e7 Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings b/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings new file mode 100644 index 0000000..f3ff9d8 Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 0000000..4b1ab30 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,50 @@ + + + + + IBClasses + + + CLASS + SUWindowController + LANGUAGE + ObjC + SUPERCLASS + NSWindowController + + + ACTIONS + + doNotInstall + id + installLater + id + installNow + id + + CLASS + SUAutomaticUpdateAlert + LANGUAGE + ObjC + SUPERCLASS + SUWindowController + + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + CLASS + NSObject + LANGUAGE + ObjC + + + IBVersion + 1 + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/info.nib b/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 0000000..c5a067e --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,20 @@ + + + + + IBFramework Version + 670 + IBLastKnownRelativeProjectPath + ../Sparkle.xcodeproj + IBOldestOS + 5 + IBOpenObjects + + 6 + + IBSystem Version + 10A96 + targetFramework + IBCocoaFramework + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000..53cb91a Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/classes.nib b/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/classes.nib new file mode 100644 index 0000000..018710a --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/classes.nib @@ -0,0 +1,39 @@ +{ + IBClasses = ( + { + CLASS = FirstResponder; + LANGUAGE = ObjC; + SUPERCLASS = NSObject; + }, + { + CLASS = NSApplication; + LANGUAGE = ObjC; + SUPERCLASS = NSResponder; + }, + { + CLASS = NSObject; + LANGUAGE = ObjC; + }, + { + ACTIONS = { + installUpdate = id; + remindMeLater = id; + skipThisVersion = id; + }; + CLASS = SUUpdateAlert; + LANGUAGE = ObjC; + OUTLETS = { + delegate = id; + description = NSTextField; + releaseNotesView = WebView; + }; + SUPERCLASS = SUWindowController; + }, + { + CLASS = SUWindowController; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/info.nib b/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/info.nib new file mode 100644 index 0000000..6b787d4 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/info.nib @@ -0,0 +1,18 @@ + + + + + IBDocumentLocation + 69 14 356 240 0 0 1280 778 + IBFramework Version + 489.0 + IBLastKnownRelativeProjectPath + ../Sparkle.xcodeproj + IBOldestOS + 5 + IBSystem Version + 9D34 + targetFramework + IBCocoaFramework + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/keyedobjects.nib b/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000..7e6d490 Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/keyedobjects.nib differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/classes.nib b/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/classes.nib new file mode 100644 index 0000000..5220a22 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/classes.nib @@ -0,0 +1,59 @@ + + + + + IBClasses + + + CLASS + SUWindowController + LANGUAGE + ObjC + SUPERCLASS + NSWindowController + + + ACTIONS + + finishPrompt + id + toggleMoreInfo + id + + CLASS + SUUpdatePermissionPrompt + LANGUAGE + ObjC + OUTLETS + + delegate + id + descriptionTextField + NSTextField + moreInfoButton + NSButton + moreInfoView + NSView + + SUPERCLASS + SUWindowController + + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + CLASS + NSObject + LANGUAGE + ObjC + + + IBVersion + 1 + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/info.nib b/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/info.nib new file mode 100644 index 0000000..c5a067e --- /dev/null +++ b/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/info.nib @@ -0,0 +1,20 @@ + + + + + IBFramework Version + 670 + IBLastKnownRelativeProjectPath + ../Sparkle.xcodeproj + IBOldestOS + 5 + IBOpenObjects + + 6 + + IBSystem Version + 10A96 + targetFramework + IBCocoaFramework + + diff --git a/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib b/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib new file mode 100644 index 0000000..64babac Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib differ diff --git a/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings b/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings new file mode 100644 index 0000000..b676a4f Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings differ diff --git a/Mac/Sparkle.framework/Versions/A/Sparkle b/Mac/Sparkle.framework/Versions/A/Sparkle new file mode 100755 index 0000000..0db0a8f Binary files /dev/null and b/Mac/Sparkle.framework/Versions/A/Sparkle differ diff --git a/Mac/Sparkle.framework/Versions/Current b/Mac/Sparkle.framework/Versions/Current new file mode 120000 index 0000000..8c7e5a6 --- /dev/null +++ b/Mac/Sparkle.framework/Versions/Current @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/Mac/Tentia-Info.plist b/Mac/Tentia-Info.plist new file mode 100644 index 0000000..01a5877 --- /dev/null +++ b/Mac/Tentia-Info.plist @@ -0,0 +1,80 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + ???? + + CFBundleTypeIconFile + + CFBundleTypeName + DocumentType + CFBundleTypeOSTypes + + ???? + + CFBundleTypeRole + Editor + NSDocumentClass + NewMessageWindow + + + CFBundleExecutable + Tentia + CFBundleHelpBookFolder + Tentia.help + CFBundleHelpBookName + nu.jabs.apps.tentia.help + CFBundleIconFile + Icon.icns + CFBundleIdentifier + nu.jabs.apps.tentia + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Tentia + CFBundlePackageType + APPL + CFBundleShortVersionString + 0.1.2 + CFBundleSignature + ???? + CFBundleURLTypes + + + CFBundleURLName + nu.jabs.apps.tentia.handler + CFBundleURLSchemes + + tentia + + + + CFBundleVersion + 0.1.2 + LSApplicationCategoryType + public.app-category.lifestyle + LSMinimumSystemVersion + ${MACOSX_DEPLOYMENT_TARGET} + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + NSServices + + SUFeedURL + http://jabs.nu/Tentia/download/Appcast.xml + SUPublicDSAKeyFile + dsa_pub.pem + UTExportedTypeDeclarations + + UTImportedTypeDeclarations + + + diff --git a/Mac/Tentia.xcodeproj/jeena.mode1v3 b/Mac/Tentia.xcodeproj/jeena.mode1v3 new file mode 100644 index 0000000..777a537 --- /dev/null +++ b/Mac/Tentia.xcodeproj/jeena.mode1v3 @@ -0,0 +1,1421 @@ + + + + + ActivePerspectiveName + Project + AllowedModules + + + BundleLoadPath + + MaxInstances + n + Module + PBXSmartGroupTreeModule + Name + Groups and Files Outline View + + + BundleLoadPath + + MaxInstances + n + Module + PBXNavigatorGroup + Name + Editor + + + BundleLoadPath + + MaxInstances + n + Module + XCTaskListModule + Name + Task List + + + BundleLoadPath + + MaxInstances + n + Module + XCDetailModule + Name + File and Smart Group Detail Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXBuildResultsModule + Name + Detailed Build Results Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXProjectFindModule + Name + Project Batch Find Tool + + + BundleLoadPath + + MaxInstances + n + Module + XCProjectFormatConflictsModule + Name + Project Format Conflicts List + + + BundleLoadPath + + MaxInstances + n + Module + PBXBookmarksModule + Name + Bookmarks Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXClassBrowserModule + Name + Class Browser + + + BundleLoadPath + + MaxInstances + n + Module + PBXCVSModule + Name + Source Code Control Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXDebugBreakpointsModule + Name + Debug Breakpoints Tool + + + BundleLoadPath + + MaxInstances + n + Module + XCDockableInspector + Name + Inspector + + + BundleLoadPath + + MaxInstances + n + Module + PBXOpenQuicklyModule + Name + Open Quickly Tool + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugSessionModule + Name + Debugger + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugCLIModule + Name + Debug Console + + + BundleLoadPath + + MaxInstances + n + Module + XCSnapshotModule + Name + Snapshots Tool + + + BundlePath + /Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources + Description + DefaultDescriptionKey + DockingSystemVisible + + Extension + mode1v3 + FavBarConfig + + PBXProjectModuleGUID + 1F68211F1249D25900A03CED + XCBarModuleItemNames + + XCBarModuleItems + + + FirstTimeWindowDisplayed + + Identifier + com.apple.perspectives.project.mode1v3 + MajorVersion + 33 + MinorVersion + 0 + Name + Default + Notifications + + OpenEditors + + PerspectiveWidths + + -1 + -1 + + Perspectives + + + ChosenToolbarItems + + active-combo-popup + action + NSToolbarFlexibleSpaceItem + build-and-go + com.apple.ide.PBXToolbarStopButton + get-info + NSToolbarFlexibleSpaceItem + com.apple.pbx.toolbar.searchfield + + ControllerClassBaseName + + IconName + WindowOfProjectWithEditor + Identifier + perspective.project + IsVertical + + Layout + + + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 287 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 2A37F4AAFDCFA73011CA2CEA + 2A37F4ABFDCFA73011CA2CEA + 2A37F4B8FDCFA73011CA2CEA + 1FFA36C71177D861006C8562 + 2A37F4C3FDCFA73011CA2CEA + 1058C7A6FEA54F5311CA2CBB + 1C37FAAC04509CD000000102 + 1C37FABC05509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 37 + 17 + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {287, 1304}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {304, 1322}} + GroupTreeTableConfiguration + + MainColumn + 287 + + RubberWindowFrame + 469 55 1319 1363 0 0 2560 1418 + + Module + PBXSmartGroupTreeModule + Proportion + 304pt + + + Dock + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20306471E060097A5F4 + PBXProjectModuleLabel + TwittiaCore.js + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CE0B20406471E060097A5F4 + PBXProjectModuleLabel + TwittiaCore.js + _historyCapacity + 0 + bookmark + 1F8D1E4412DF5A0D00571730 + history + + 1F98DCA9124C691A004289ED + 1F98DCAD124C691A004289ED + 1F17508512A972DF004A0B42 + 1F2F793712BD93A600F073BE + 1F27470412D905CA00339B4F + 1F618EAC12DB5D0700E500D9 + 1F618ED112DB60D100E500D9 + 1F618ED212DB60D100E500D9 + 1F618ED312DB60D100E500D9 + 1F618ED412DB60D100E500D9 + 1F618ED512DB60D100E500D9 + 1F618ED612DB60D100E500D9 + 1F618F0212DB665B00E500D9 + 1F618F0312DB665B00E500D9 + 1F618F0412DB665B00E500D9 + 1F618F0512DB665B00E500D9 + 1F8D1E4212DF5A0D00571730 + 1F8D1E4312DF5A0D00571730 + + + SplitCount + 1 + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {1010, 1317}} + RubberWindowFrame + 469 55 1319 1363 0 0 2560 1418 + + Module + PBXNavigatorGroup + Proportion + 1317pt + + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20506471E060097A5F4 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{0, 1322}, {1010, 0}} + RubberWindowFrame + 469 55 1319 1363 0 0 2560 1418 + + Module + XCDetailModule + Proportion + 0pt + + + Proportion + 1010pt + + + Name + Project + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + XCModuleDock + PBXNavigatorGroup + XCDetailModule + + TableOfContents + + 1F8D1E2712DF55D600571730 + 1CE0B1FE06471DED0097A5F4 + 1F8D1E2812DF55D600571730 + 1CE0B20306471E060097A5F4 + 1CE0B20506471E060097A5F4 + + ToolbarConfigUserDefaultsMinorVersion + 2 + ToolbarConfiguration + xcode.toolbar.config.defaultV3 + + + ControllerClassBaseName + + IconName + WindowOfProject + Identifier + perspective.morph + IsVertical + 0 + Layout + + + BecomeActive + 1 + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C08E77C0454961000C914BD + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 11E0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 186 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 29B97314FDCFA39411CA2CEA + 1C37FABC05509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {186, 337}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + 1 + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {203, 355}} + GroupTreeTableConfiguration + + MainColumn + 186 + + RubberWindowFrame + 373 269 690 397 0 0 1440 878 + + Module + PBXSmartGroupTreeModule + Proportion + 100% + + + Name + Morph + PreferredWidth + 300 + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + + TableOfContents + + 11E0B1FE06471DED0097A5F4 + + ToolbarConfiguration + xcode.toolbar.config.default.shortV3 + + + PerspectivesBarVisible + + ShelfIsVisible + + SourceDescription + file at '/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec' + StatusbarIsVisible + + TimeStamp + 0.0 + ToolbarConfigUserDefaultsMinorVersion + 2 + ToolbarDisplayMode + 1 + ToolbarIsVisible + + ToolbarSizeMode + 1 + Type + Perspectives + UpdateMessage + The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? + WindowJustification + 5 + WindowOrderList + + 1F8D1E4612DF5A0D00571730 + 1F8D1E4712DF5A0D00571730 + 1F6821201249D25900A03CED + 1CD10A99069EF8BA00B06720 + 1C78EAAD065D492600B07095 + /Users/jeena/Projects/Twittia/Twittia 2.xcodeproj + + WindowString + 469 55 1319 1363 0 0 2560 1418 + WindowToolsV3 + + + FirstTimeWindowDisplayed + + Identifier + windowTool.build + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528F0623707200166675 + PBXProjectModuleLabel + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {1299, 402}} + RubberWindowFrame + 2771 56 1299 684 2560 0 1920 1200 + + Module + PBXNavigatorGroup + Proportion + 402pt + + + ContentConfiguration + + PBXProjectModuleGUID + XCMainBuildResultsModuleGUID + PBXProjectModuleLabel + Build Results + XCBuildResultsTrigger_Collapse + 1021 + XCBuildResultsTrigger_Open + 1011 + + GeometryConfiguration + + Frame + {{0, 407}, {1299, 236}} + RubberWindowFrame + 2771 56 1299 684 2560 0 1920 1200 + + Module + PBXBuildResultsModule + Proportion + 236pt + + + Proportion + 643pt + + + Name + Build Results + ServiceClasses + + PBXBuildResultsModule + + StatusbarIsVisible + + TableOfContents + + 1F6821201249D25900A03CED + 1F8D1E2912DF55D600571730 + 1CD0528F0623707200166675 + XCMainBuildResultsModuleGUID + + ToolbarConfiguration + xcode.toolbar.config.buildV3 + WindowContentMinSize + 486 300 + WindowString + 2771 56 1299 684 2560 0 1920 1200 + WindowToolGUID + 1F6821201249D25900A03CED + WindowToolIsVisible + + + + FirstTimeWindowDisplayed + + Identifier + windowTool.debugger + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + Debugger + + HorizontalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {316, 203}} + {{316, 0}, {378, 203}} + + + VerticalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {694, 203}} + {{0, 203}, {694, 178}} + + + + LauncherConfigVersion + 8 + PBXProjectModuleGUID + 1C162984064C10D400B95A72 + PBXProjectModuleLabel + Debug - GLUTExamples (Underwater) + + GeometryConfiguration + + DebugConsoleVisible + None + DebugConsoleWindowFrame + {{200, 200}, {500, 300}} + DebugSTDIOWindowFrame + {{200, 200}, {500, 300}} + Frame + {{0, 0}, {694, 381}} + PBXDebugSessionStackFrameViewKey + + DebugVariablesTableConfiguration + + Name + 120 + Value + 85 + Summary + 148 + + Frame + {{316, 0}, {378, 203}} + RubberWindowFrame + 67 996 694 422 0 0 2560 1418 + + RubberWindowFrame + 67 996 694 422 0 0 2560 1418 + + Module + PBXDebugSessionModule + Proportion + 381pt + + + Proportion + 381pt + + + Name + Debugger + ServiceClasses + + PBXDebugSessionModule + + StatusbarIsVisible + + TableOfContents + + 1CD10A99069EF8BA00B06720 + 1F8D1E2A12DF55D600571730 + 1C162984064C10D400B95A72 + 1F8D1E2B12DF55D600571730 + 1F8D1E2C12DF55D600571730 + 1F8D1E2D12DF55D600571730 + 1F8D1E2E12DF55D600571730 + 1F8D1E2F12DF55D600571730 + + ToolbarConfiguration + xcode.toolbar.config.debugV3 + WindowString + 67 996 694 422 0 0 2560 1418 + WindowToolGUID + 1CD10A99069EF8BA00B06720 + WindowToolIsVisible + + + + Identifier + windowTool.find + Layout + + + Dock + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CDD528C0622207200134675 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CD0528D0623707200166675 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {781, 167}} + RubberWindowFrame + 62 385 781 470 0 0 1440 878 + + Module + PBXNavigatorGroup + Proportion + 781pt + + + Proportion + 50% + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528E0623707200166675 + PBXProjectModuleLabel + Project Find + + GeometryConfiguration + + Frame + {{8, 0}, {773, 254}} + RubberWindowFrame + 62 385 781 470 0 0 1440 878 + + Module + PBXProjectFindModule + Proportion + 50% + + + Proportion + 428pt + + + Name + Project Find + ServiceClasses + + PBXProjectFindModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C530D57069F1CE1000CFCEE + 1C530D58069F1CE1000CFCEE + 1C530D59069F1CE1000CFCEE + 1CDD528C0622207200134675 + 1C530D5A069F1CE1000CFCEE + 1CE0B1FE06471DED0097A5F4 + 1CD0528E0623707200166675 + + WindowString + 62 385 781 470 0 0 1440 878 + WindowToolGUID + 1C530D57069F1CE1000CFCEE + WindowToolIsVisible + 0 + + + Identifier + MENUSEPARATOR + + + FirstTimeWindowDisplayed + + Identifier + windowTool.debuggerConsole + IsVertical + + Layout + + + Dock + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAAC065D492600B07095 + PBXProjectModuleLabel + Debugger Console + + GeometryConfiguration + + Frame + {{0, 0}, {968, 946}} + RubberWindowFrame + 2810 187 968 987 2560 0 1920 1200 + + Module + PBXDebugCLIModule + Proportion + 946pt + + + Proportion + 946pt + + + Name + Debugger Console + ServiceClasses + + PBXDebugCLIModule + + StatusbarIsVisible + + TableOfContents + + 1C78EAAD065D492600B07095 + 1F8D1E4512DF5A0D00571730 + 1C78EAAC065D492600B07095 + + ToolbarConfiguration + xcode.toolbar.config.consoleV3 + WindowString + 2810 187 968 987 2560 0 1920 1200 + WindowToolGUID + 1C78EAAD065D492600B07095 + WindowToolIsVisible + + + + Identifier + windowTool.snapshots + Layout + + + Dock + + + Module + XCSnapshotModule + Proportion + 100% + + + Proportion + 100% + + + Name + Snapshots + ServiceClasses + + XCSnapshotModule + + StatusbarIsVisible + Yes + ToolbarConfiguration + xcode.toolbar.config.snapshots + WindowString + 315 824 300 550 0 0 1440 878 + WindowToolIsVisible + Yes + + + Identifier + windowTool.scm + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAB2065D492600B07095 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1C78EAB3065D492600B07095 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {452, 0}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 0pt + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD052920623707200166675 + PBXProjectModuleLabel + SCM + + GeometryConfiguration + + ConsoleFrame + {{0, 259}, {452, 0}} + Frame + {{0, 7}, {452, 259}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + TableConfiguration + + Status + 30 + FileName + 199 + Path + 197.0950012207031 + + TableFrame + {{0, 0}, {452, 250}} + + Module + PBXCVSModule + Proportion + 262pt + + + Proportion + 266pt + + + Name + SCM + ServiceClasses + + PBXCVSModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C78EAB4065D492600B07095 + 1C78EAB5065D492600B07095 + 1C78EAB2065D492600B07095 + 1CD052920623707200166675 + + ToolbarConfiguration + xcode.toolbar.config.scm + WindowString + 743 379 452 308 0 0 1280 1002 + + + FirstTimeWindowDisplayed + + Identifier + windowTool.breakpoints + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C77FABC04509CD000000102 + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + no + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 168 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 1C77FABC04509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {168, 350}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + + + GeometryConfiguration + + Frame + {{0, 0}, {185, 368}} + GroupTreeTableConfiguration + + MainColumn + 168 + + RubberWindowFrame + 836 546 744 409 0 0 2560 1418 + + Module + PBXSmartGroupTreeModule + Proportion + 185pt + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1CA1AED706398EBD00589147 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{190, 0}, {554, 368}} + RubberWindowFrame + 836 546 744 409 0 0 2560 1418 + + Module + XCDetailModule + Proportion + 554pt + + + Proportion + 368pt + + + MajorVersion + 3 + MinorVersion + 0 + Name + Breakpoints + ServiceClasses + + PBXSmartGroupTreeModule + XCDetailModule + + StatusbarIsVisible + + TableOfContents + + 1F618EB812DB5D0700E500D9 + 1F618EB912DB5D0700E500D9 + 1CE0B1FE06471DED0097A5F4 + 1CA1AED706398EBD00589147 + + ToolbarConfiguration + xcode.toolbar.config.breakpointsV3 + WindowString + 836 546 744 409 0 0 2560 1418 + WindowToolGUID + 1F618EB812DB5D0700E500D9 + WindowToolIsVisible + + + + Identifier + windowTool.debugAnimator + Layout + + + Dock + + + Module + PBXNavigatorGroup + Proportion + 100% + + + Proportion + 100% + + + Name + Debug Visualizer + ServiceClasses + + PBXNavigatorGroup + + StatusbarIsVisible + 1 + ToolbarConfiguration + xcode.toolbar.config.debugAnimatorV3 + WindowString + 100 100 700 500 0 0 1280 1002 + + + Identifier + windowTool.bookmarks + Layout + + + Dock + + + Module + PBXBookmarksModule + Proportion + 100% + + + Proportion + 100% + + + Name + Bookmarks + ServiceClasses + + PBXBookmarksModule + + StatusbarIsVisible + 0 + WindowString + 538 42 401 187 0 0 1280 1002 + + + Identifier + windowTool.projectFormatConflicts + Layout + + + Dock + + + Module + XCProjectFormatConflictsModule + Proportion + 100% + + + Proportion + 100% + + + Name + Project Format Conflicts + ServiceClasses + + XCProjectFormatConflictsModule + + StatusbarIsVisible + 0 + WindowContentMinSize + 450 300 + WindowString + 50 850 472 307 0 0 1440 877 + + + Identifier + windowTool.classBrowser + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + OptionsSetName + Hierarchy, all classes + PBXProjectModuleGUID + 1CA6456E063B45B4001379D8 + PBXProjectModuleLabel + Class Browser - NSObject + + GeometryConfiguration + + ClassesFrame + {{0, 0}, {374, 96}} + ClassesTreeTableConfiguration + + PBXClassNameColumnIdentifier + 208 + PBXClassBookColumnIdentifier + 22 + + Frame + {{0, 0}, {630, 331}} + MembersFrame + {{0, 105}, {374, 395}} + MembersTreeTableConfiguration + + PBXMemberTypeIconColumnIdentifier + 22 + PBXMemberNameColumnIdentifier + 216 + PBXMemberTypeColumnIdentifier + 97 + PBXMemberBookColumnIdentifier + 22 + + PBXModuleWindowStatusBarHidden2 + 1 + RubberWindowFrame + 385 179 630 352 0 0 1440 878 + + Module + PBXClassBrowserModule + Proportion + 332pt + + + Proportion + 332pt + + + Name + Class Browser + ServiceClasses + + PBXClassBrowserModule + + StatusbarIsVisible + 0 + TableOfContents + + 1C0AD2AF069F1E9B00FABCE6 + 1C0AD2B0069F1E9B00FABCE6 + 1CA6456E063B45B4001379D8 + + ToolbarConfiguration + xcode.toolbar.config.classbrowser + WindowString + 385 179 630 352 0 0 1440 878 + WindowToolGUID + 1C0AD2AF069F1E9B00FABCE6 + WindowToolIsVisible + 0 + + + Identifier + windowTool.refactoring + IncludeInToolsMenu + 0 + Layout + + + Dock + + + BecomeActive + 1 + GeometryConfiguration + + Frame + {0, 0}, {500, 335} + RubberWindowFrame + {0, 0}, {500, 335} + + Module + XCRefactoringModule + Proportion + 100% + + + Proportion + 100% + + + Name + Refactoring + ServiceClasses + + XCRefactoringModule + + WindowString + 200 200 500 356 0 0 1920 1200 + + + + diff --git a/Mac/Tentia.xcodeproj/jeena.pbxuser b/Mac/Tentia.xcodeproj/jeena.pbxuser new file mode 100644 index 0000000..16fe5ce --- /dev/null +++ b/Mac/Tentia.xcodeproj/jeena.pbxuser @@ -0,0 +1,496 @@ +// !$*UTF8*$! +{ + 1F17508512A972DF004A0B42 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FFA36CB1177D861006C8562 /* default.css */; + name = "default.css: 80"; + rLen = 0; + rLoc = 1037; + rType = 0; + vrLen = 553; + vrLoc = 411; + }; + 1F198FC7117BC4AB0049BEA7 /* README.markdown */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {949, 1237}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 1498}"; + }; + }; + 1F1990DF117BD2250049BEA7 /* Appcast.xml */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {949, 1237}}"; + sepNavSelRange = "{784, 0}"; + sepNavVisRange = "{0, 954}"; + }; + }; + 1F1990E1117BD2650049BEA7 /* ReleaseNotes.html */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {949, 1285}}"; + sepNavSelRange = "{461, 0}"; + sepNavVisRange = "{0, 1964}"; + }; + }; + 1F27470412D905CA00339B4F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FE2FCA6117A8952000504B0 /* dsa_pub.pem */; + name = "dsa_pub.pem: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1178; + vrLoc = 0; + }; + 1F2F793712BD93A600F073BE /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FFA36D51177D879006C8562 /* ViewDelegate.m */; + name = "ViewDelegate.m: 37"; + rLen = 13; + rLoc = 1089; + rType = 0; + vrLen = 1550; + vrLoc = 0; + }; + 1F364396118CBC77008198EF /* OAuth.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {949, 1237}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 636}"; + }; + }; + 1F364397118CBC77008198EF /* OAuth.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1034, 2655}}"; + sepNavSelRange = "{4216, 0}"; + sepNavVisRange = "{2668, 3057}"; + }; + }; + 1F4673E61180F654006CC37C /* TwittiaCore.js */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1013, 5355}}"; + sepNavSelRange = "{1631, 0}"; + sepNavVisRange = "{248, 3030}"; + }; + }; + 1F618EA612DB5D0200E500D9 /* MyDocument.m:108 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = 2A37F4ACFDCFA73011CA2CEA /* MyDocument.m */; + functionName = "-sendTweet:"; + hitCount = 1; + ignoreCount = 0; + lineNumber = 108; + location = Twittia; + modificationTime = 316627463.947617; + originalNumberOfMultipleMatches = 1; + state = 1; + }; + 1F618EAC12DB5D0700E500D9 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2A37F4AEFDCFA73011CA2CEA /* MyDocument.h */; + name = "MyDocument.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 573; + vrLoc = 0; + }; + 1F618EC812DB5E6100E500D9 /* TweetModel.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {949, 1262}}"; + sepNavSelRange = "{358, 0}"; + sepNavVisRange = "{0, 366}"; + }; + }; + 1F618EC912DB5E6100E500D9 /* TweetModel.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {949, 1262}}"; + sepNavSelRange = "{279, 0}"; + sepNavVisRange = "{0, 316}"; + }; + }; + 1F618ED112DB60D100E500D9 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2A37F4ACFDCFA73011CA2CEA /* MyDocument.m */; + name = "MyDocument.m: 107"; + rLen = 0; + rLoc = 3758; + rType = 0; + vrLen = 3377; + vrLoc = 537; + }; + 1F618ED212DB60D100E500D9 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1F618EC812DB5E6100E500D9 /* TweetModel.h */; + name = "TweetModel.h: 18"; + rLen = 0; + rLoc = 358; + rType = 0; + vrLen = 366; + vrLoc = 0; + }; + 1F618ED312DB60D100E500D9 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1F618EC912DB5E6100E500D9 /* TweetModel.m */; + name = "TweetModel.m: 18"; + rLen = 0; + rLoc = 279; + rType = 0; + vrLen = 316; + vrLoc = 0; + }; + 1F618ED412DB60D100E500D9 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FFA36D21177D879006C8562 /* Controller.h */; + name = "Controller.h: 10"; + rLen = 25; + rLoc = 149; + rType = 0; + vrLen = 1539; + vrLoc = 0; + }; + 1F618ED512DB60D100E500D9 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1F364396118CBC77008198EF /* OAuth.h */; + name = "OAuth.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 636; + vrLoc = 0; + }; + 1F618ED612DB60D100E500D9 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1F364397118CBC77008198EF /* OAuth.m */; + name = "OAuth.m: 135"; + rLen = 0; + rLoc = 4216; + rType = 0; + vrLen = 3057; + vrLoc = 2668; + }; + 1F618F0212DB665B00E500D9 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FFA36D31177D879006C8562 /* Controller.m */; + name = "Controller.m: 178"; + rLen = 0; + rLoc = 5952; + rType = 0; + vrLen = 2979; + vrLoc = 4466; + }; + 1F618F0312DB665B00E500D9 /* PlistBookmark */ = { + isa = PlistBookmark; + fRef = 8D15AC360486D014006FF6A4 /* Twittia_2-Info.plist */; + fallbackIsa = PBXBookmark; + isK = 0; + kPath = ( + LSMinimumSystemVersion, + ); + name = "/Users/jeena/Projects/Twittia/Twittia_2-Info.plist"; + rLen = 0; + rLoc = 9223372036854775808; + }; + 1F618F0412DB665B00E500D9 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1F1990DF117BD2250049BEA7 /* Appcast.xml */; + name = "Appcast.xml: 15"; + rLen = 0; + rLoc = 784; + rType = 0; + vrLen = 954; + vrLoc = 0; + }; + 1F618F0512DB665B00E500D9 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1F198FC7117BC4AB0049BEA7 /* README.markdown */; + name = "README.markdown: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1498; + vrLoc = 0; + }; + 1F68210012493A3400A03CED /* Twittia */ = { + isa = PBXExecutable; + activeArgIndices = ( + ); + argumentStrings = ( + ); + autoAttachOnCrash = 1; + breakpointsEnabled = 0; + configStateDict = { + }; + customDataFormattersEnabled = 1; + dataTipCustomDataFormattersEnabled = 1; + dataTipShowTypeColumn = 1; + dataTipSortType = 0; + debuggerPlugin = GDBDebugging; + disassemblyDisplayState = 0; + dylibVariantSuffix = ""; + enableDebugStr = 1; + environmentEntries = ( + ); + executableSystemSymbolLevel = 0; + executableUserSymbolLevel = 0; + libgmallocEnabled = 0; + name = Twittia; + savedGlobals = { + }; + showTypeColumn = 0; + sourceDirectories = ( + ); + variableFormatDictionary = { + }; + }; + 1F68211B12493A5400A03CED /* Source Control */ = { + isa = PBXSourceControlManager; + fallbackIsa = XCSourceControlManager; + isSCMEnabled = 0; + scmConfiguration = { + repositoryNamesForRoots = { + "" = ""; + }; + }; + }; + 1F68211C12493A5400A03CED /* Code sense */ = { + isa = PBXCodeSenseManager; + indexTemplatePath = ""; + }; + 1F77DB46118C5F1C007C7F1E /* Constants.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1115, 3300}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 1114}"; + }; + }; + 1F8D1E4212DF5A0D00571730 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1F1990E1117BD2650049BEA7 /* ReleaseNotes.html */; + name = "ReleaseNotes.html: 16"; + rLen = 0; + rLoc = 461; + rType = 0; + vrLen = 1964; + vrLoc = 0; + }; + 1F8D1E4312DF5A0D00571730 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1F4673E61180F654006CC37C /* TwittiaCore.js */; + name = "TwittiaCore.js: 90"; + rLen = 3; + rLoc = 3369; + rType = 0; + vrLen = 3174; + vrLoc = 376; + }; + 1F8D1E4412DF5A0D00571730 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1F4673E61180F654006CC37C /* TwittiaCore.js */; + name = "TwittiaCore.js: 66"; + rLen = 0; + rLoc = 1631; + rType = 0; + vrLen = 3030; + vrLoc = 248; + }; + 1F98DCA9124C691A004289ED /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1F77DB46118C5F1C007C7F1E /* Constants.m */; + name = "Constants.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1114; + vrLoc = 0; + }; + 1F98DCAD124C691A004289ED /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 1F98DC9D124BFFD7004289ED /* pin.png */; + }; + 1FE2FCA6117A8952000504B0 /* dsa_pub.pem */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {949, 865}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 1178}"; + }; + }; + 1FFA36CB1177D861006C8562 /* default.css */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1115, 3270}}"; + sepNavSelRange = "{1037, 0}"; + sepNavVisRange = "{411, 553}"; + }; + }; + 1FFA36D21177D879006C8562 /* Controller.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {949, 1237}}"; + sepNavSelRange = "{149, 25}"; + sepNavVisRange = "{0, 1539}"; + }; + }; + 1FFA36D31177D879006C8562 /* Controller.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1238, 3285}}"; + sepNavSelRange = "{5834, 0}"; + sepNavVisRange = "{5432, 1211}"; + }; + }; + 1FFA36D51177D879006C8562 /* ViewDelegate.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1517, 1237}}"; + sepNavSelRange = "{1089, 13}"; + sepNavVisRange = "{0, 1550}"; + }; + }; + 2A37F4A9FDCFA73011CA2CEA /* Project object */ = { + activeBuildConfigurationName = Release; + activeExecutable = 1F68210012493A3400A03CED /* Twittia */; + activeTarget = 8D15AC270486D014006FF6A4 /* Twittia */; + addToTargets = ( + 8D15AC270486D014006FF6A4 /* Twittia */, + ); + breakpoints = ( + 1F618EA612DB5D0200E500D9 /* MyDocument.m:108 */, + ); + codeSenseManager = 1F68211C12493A5400A03CED /* Code sense */; + executables = ( + 1F68210012493A3400A03CED /* Twittia */, + ); + perUserDictionary = { + "PBXConfiguration.PBXBreakpointsDataSource.v1:1CA1AED706398EBD00589147" = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXBreakpointsDataSource_BreakpointID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 20, + 198, + 20, + 99, + 99, + 29, + 20, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXBreakpointsDataSource_ActionID, + PBXBreakpointsDataSource_TypeID, + PBXBreakpointsDataSource_BreakpointID, + PBXBreakpointsDataSource_UseID, + PBXBreakpointsDataSource_LocationID, + PBXBreakpointsDataSource_ConditionID, + PBXBreakpointsDataSource_IgnoreCountID, + PBXBreakpointsDataSource_ContinueID, + ); + }; + PBXConfiguration.PBXFileTableDataSource3.PBXBookmarksDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXBookmarksDataSource_NameID; + PBXFileTableDataSourceColumnWidthsKey = ( + 200, + 200, + 580.58349609375, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXBookmarksDataSource_LocationID, + PBXBookmarksDataSource_NameID, + PBXBookmarksDataSource_CommentsID, + ); + }; + PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 771, + 20, + 48, + 43, + 43, + 20, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + PBXFileDataSource_Target_ColumnID, + ); + }; + PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 731, + 60, + 20, + 48.16259765625, + 43, + 43, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXTargetDataSource_PrimaryAttribute, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + ); + }; + PBXPerProjectTemplateStateSaveDate = 316626383; + PBXWorkspaceStateSaveDate = 316626383; + }; + perUserProjectItems = { + 1F17508512A972DF004A0B42 /* PBXTextBookmark */ = 1F17508512A972DF004A0B42 /* PBXTextBookmark */; + 1F27470412D905CA00339B4F /* PBXTextBookmark */ = 1F27470412D905CA00339B4F /* PBXTextBookmark */; + 1F2F793712BD93A600F073BE /* PBXTextBookmark */ = 1F2F793712BD93A600F073BE /* PBXTextBookmark */; + 1F618EAC12DB5D0700E500D9 /* PBXTextBookmark */ = 1F618EAC12DB5D0700E500D9 /* PBXTextBookmark */; + 1F618ED112DB60D100E500D9 /* PBXTextBookmark */ = 1F618ED112DB60D100E500D9 /* PBXTextBookmark */; + 1F618ED212DB60D100E500D9 /* PBXTextBookmark */ = 1F618ED212DB60D100E500D9 /* PBXTextBookmark */; + 1F618ED312DB60D100E500D9 /* PBXTextBookmark */ = 1F618ED312DB60D100E500D9 /* PBXTextBookmark */; + 1F618ED412DB60D100E500D9 /* PBXTextBookmark */ = 1F618ED412DB60D100E500D9 /* PBXTextBookmark */; + 1F618ED512DB60D100E500D9 /* PBXTextBookmark */ = 1F618ED512DB60D100E500D9 /* PBXTextBookmark */; + 1F618ED612DB60D100E500D9 /* PBXTextBookmark */ = 1F618ED612DB60D100E500D9 /* PBXTextBookmark */; + 1F618F0212DB665B00E500D9 /* PBXTextBookmark */ = 1F618F0212DB665B00E500D9 /* PBXTextBookmark */; + 1F618F0312DB665B00E500D9 /* PlistBookmark */ = 1F618F0312DB665B00E500D9 /* PlistBookmark */; + 1F618F0412DB665B00E500D9 /* PBXTextBookmark */ = 1F618F0412DB665B00E500D9 /* PBXTextBookmark */; + 1F618F0512DB665B00E500D9 /* PBXTextBookmark */ = 1F618F0512DB665B00E500D9 /* PBXTextBookmark */; + 1F8D1E4212DF5A0D00571730 /* PBXTextBookmark */ = 1F8D1E4212DF5A0D00571730 /* PBXTextBookmark */; + 1F8D1E4312DF5A0D00571730 /* PBXTextBookmark */ = 1F8D1E4312DF5A0D00571730 /* PBXTextBookmark */; + 1F8D1E4412DF5A0D00571730 /* PBXTextBookmark */ = 1F8D1E4412DF5A0D00571730 /* PBXTextBookmark */; + 1F98DCA9124C691A004289ED /* PBXTextBookmark */ = 1F98DCA9124C691A004289ED /* PBXTextBookmark */; + 1F98DCAD124C691A004289ED /* PBXBookmark */ = 1F98DCAD124C691A004289ED /* PBXBookmark */; + }; + sourceControlManager = 1F68211B12493A5400A03CED /* Source Control */; + userBuildSettings = { + }; + }; + 2A37F4ACFDCFA73011CA2CEA /* MyDocument.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1748, 1755}}"; + sepNavSelRange = "{3758, 0}"; + sepNavVisRange = "{537, 3377}"; + }; + }; + 2A37F4AEFDCFA73011CA2CEA /* MyDocument.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {949, 1262}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 573}"; + }; + }; + 8D15AC270486D014006FF6A4 /* Twittia */ = { + activeExec = 0; + executables = ( + 1F68210012493A3400A03CED /* Twittia */, + ); + }; +} diff --git a/Mac/Tentia.xcodeproj/project.pbxproj b/Mac/Tentia.xcodeproj/project.pbxproj new file mode 100644 index 0000000..35c0252 --- /dev/null +++ b/Mac/Tentia.xcodeproj/project.pbxproj @@ -0,0 +1,490 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 1DDD582C0DA1D0D100B32029 /* NewMessageWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58280DA1D0D100B32029 /* NewMessageWindow.xib */; }; + 1DDD582D0DA1D0D100B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD582A0DA1D0D100B32029 /* MainMenu.xib */; }; + 1F122D49118E1DE100E83B77 /* Icon.icns in Resources */ = {isa = PBXBuildFile; fileRef = 1F122D48118E1DE100E83B77 /* Icon.icns */; }; + 1F1990C6117BCA960049BEA7 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F1990C5117BCA960049BEA7 /* ApplicationServices.framework */; }; + 1F1C8082164824B30010B409 /* Constants.js in Resources */ = {isa = PBXBuildFile; fileRef = 1F1C805A164824760010B409 /* Constants.js */; }; + 1F1C8083164824B30010B409 /* ConversationView.js in Resources */ = {isa = PBXBuildFile; fileRef = 1F1C805B164824760010B409 /* ConversationView.js */; }; + 1F1C8084164824B30010B409 /* Core.js in Resources */ = {isa = PBXBuildFile; fileRef = 1F1C805C164824760010B409 /* Core.js */; }; + 1F1C8085164824B30010B409 /* default-avatar.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F1C805D164824760010B409 /* default-avatar.png */; }; + 1F1C8086164824B30010B409 /* default.css in Resources */ = {isa = PBXBuildFile; fileRef = 1F1C805E164824760010B409 /* default.css */; }; + 1F1C8087164824B30010B409 /* delete.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F1C805F164824760010B409 /* delete.png */; }; + 1F1C8088164824B30010B409 /* enc-base64-min.js in Resources */ = {isa = PBXBuildFile; fileRef = 1F1C8060164824760010B409 /* enc-base64-min.js */; }; + 1F1C8089164824B30010B409 /* even-bg.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F1C8061164824760010B409 /* even-bg.png */; }; + 1F1C808A164824B30010B409 /* hmac-helper.js in Resources */ = {isa = PBXBuildFile; fileRef = 1F1C8062164824760010B409 /* hmac-helper.js */; }; + 1F1C808B164824B30010B409 /* hmac-sha256.js in Resources */ = {isa = PBXBuildFile; fileRef = 1F1C8063164824760010B409 /* hmac-sha256.js */; }; + 1F1C808C164824B30010B409 /* index.html in Resources */ = {isa = PBXBuildFile; fileRef = 1F1C8064164824760010B409 /* index.html */; }; + 1F1C808D164824B30010B409 /* index_oauth.html in Resources */ = {isa = PBXBuildFile; fileRef = 1F1C8065164824760010B409 /* index_oauth.html */; }; + 1F1C808E164824B30010B409 /* jQuery-Plugins.js in Resources */ = {isa = PBXBuildFile; fileRef = 1F1C8066164824760010B409 /* jQuery-Plugins.js */; }; + 1F1C808F164824B30010B409 /* jQuery.js in Resources */ = {isa = PBXBuildFile; fileRef = 1F1C8067164824760010B409 /* jQuery.js */; }; + 1F1C8090164824B30010B409 /* OauthImplementation.js in Resources */ = {isa = PBXBuildFile; fileRef = 1F1C8068164824760010B409 /* OauthImplementation.js */; }; + 1F1C8091164824B30010B409 /* odd-bg.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F1C8069164824760010B409 /* odd-bg.png */; }; + 1F1C8092164824B30010B409 /* pin.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F1C806A164824760010B409 /* pin.png */; }; + 1F1C8093164824B30010B409 /* sprite-icons.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F1C806B164824760010B409 /* sprite-icons.png */; }; + 1F1C8094164824B30010B409 /* TimelineView.js in Resources */ = {isa = PBXBuildFile; fileRef = 1F1C806C164824760010B409 /* TimelineView.js */; }; + 1F1C8095164824B30010B409 /* URI.min.js in Resources */ = {isa = PBXBuildFile; fileRef = 1F1C806D164824760010B409 /* URI.min.js */; }; + 1F618ECA12DB5E6100E500D9 /* TweetModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F618EC912DB5E6100E500D9 /* TweetModel.m */; }; + 1F70619F1178FBB300C85707 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F70619E1178FBB300C85707 /* Carbon.framework */; }; + 1F77DB47118C5F1C007C7F1E /* Constants.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F77DB46118C5F1C007C7F1E /* Constants.m */; }; + 1FA09847144602530079E258 /* libicucore.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FA09846144602530079E258 /* libicucore.dylib */; }; + 1FC254A01427DFAD0035D84B /* AccessToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FC2549B1427D9930035D84B /* AccessToken.m */; }; + 1FE2FC93117A818D000504B0 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FE2FC92117A818D000504B0 /* Sparkle.framework */; }; + 1FE2FCA4117A83B1000504B0 /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 1FE2FC92117A818D000504B0 /* Sparkle.framework */; }; + 1FFA36D71177D879006C8562 /* Controller.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FFA36D31177D879006C8562 /* Controller.m */; }; + 1FFA36D81177D879006C8562 /* ViewDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FFA36D51177D879006C8562 /* ViewDelegate.m */; }; + 1FFA37071177DAF4006C8562 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FFA37061177DAF4006C8562 /* WebKit.framework */; }; + 8D15AC2C0486D014006FF6A4 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 2A37F4B9FDCFA73011CA2CEA /* Credits.rtf */; }; + 8D15AC2F0486D014006FF6A4 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165FFE840EACC02AAC07 /* InfoPlist.strings */; }; + 8D15AC310486D014006FF6A4 /* NewMessageWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A37F4ACFDCFA73011CA2CEA /* NewMessageWindow.m */; settings = {ATTRIBUTES = (); }; }; + 8D15AC320486D014006FF6A4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A37F4B0FDCFA73011CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; + 8D15AC340486D014006FF6A4 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 1FE2FCA1117A82E1000504B0 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 1FE2FCA4117A83B1000504B0 /* Sparkle.framework in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 089C1660FE840EACC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; + 1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 13E42FBA07B3F13500E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; + 1DDD58290DA1D0D100B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/NewMessageWindow.xib; sourceTree = ""; }; + 1DDD582B0DA1D0D100B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = ""; }; + 1F122D48118E1DE100E83B77 /* Icon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = Icon.icns; sourceTree = ""; }; + 1F1990C5117BCA960049BEA7 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = System/Library/Frameworks/ApplicationServices.framework; sourceTree = SDKROOT; }; + 1F1C805A164824760010B409 /* Constants.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Constants.js; sourceTree = ""; }; + 1F1C805B164824760010B409 /* ConversationView.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ConversationView.js; sourceTree = ""; }; + 1F1C805C164824760010B409 /* Core.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Core.js; sourceTree = ""; }; + 1F1C805D164824760010B409 /* default-avatar.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "default-avatar.png"; sourceTree = ""; }; + 1F1C805E164824760010B409 /* default.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = default.css; sourceTree = ""; }; + 1F1C805F164824760010B409 /* delete.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = delete.png; sourceTree = ""; }; + 1F1C8060164824760010B409 /* enc-base64-min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "enc-base64-min.js"; sourceTree = ""; }; + 1F1C8061164824760010B409 /* even-bg.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "even-bg.png"; sourceTree = ""; }; + 1F1C8062164824760010B409 /* hmac-helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "hmac-helper.js"; sourceTree = ""; }; + 1F1C8063164824760010B409 /* hmac-sha256.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "hmac-sha256.js"; sourceTree = ""; }; + 1F1C8064164824760010B409 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; + 1F1C8065164824760010B409 /* index_oauth.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index_oauth.html; sourceTree = ""; }; + 1F1C8066164824760010B409 /* jQuery-Plugins.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "jQuery-Plugins.js"; sourceTree = ""; }; + 1F1C8067164824760010B409 /* jQuery.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jQuery.js; sourceTree = ""; }; + 1F1C8068164824760010B409 /* OauthImplementation.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = OauthImplementation.js; sourceTree = ""; }; + 1F1C8069164824760010B409 /* odd-bg.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "odd-bg.png"; sourceTree = ""; }; + 1F1C806A164824760010B409 /* pin.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = pin.png; sourceTree = ""; }; + 1F1C806B164824760010B409 /* sprite-icons.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sprite-icons.png"; sourceTree = ""; }; + 1F1C806C164824760010B409 /* TimelineView.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = TimelineView.js; sourceTree = ""; }; + 1F1C806D164824760010B409 /* URI.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = URI.min.js; sourceTree = ""; }; + 1F36440E118CC173008198EF /* OAuthConsumer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = OAuthConsumer.framework; sourceTree = ""; }; + 1F618EC812DB5E6100E500D9 /* TweetModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = TweetModel.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 1F618EC912DB5E6100E500D9 /* TweetModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = TweetModel.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 1F70619E1178FBB300C85707 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; }; + 1F77DB45118C5F1C007C7F1E /* Constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = Constants.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 1F77DB46118C5F1C007C7F1E /* Constants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = Constants.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 1FA09846144602530079E258 /* libicucore.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libicucore.dylib; path = usr/lib/libicucore.dylib; sourceTree = SDKROOT; }; + 1FC2549A1427D9930035D84B /* AccessToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = AccessToken.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 1FC2549B1427D9930035D84B /* AccessToken.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = AccessToken.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 1FE2FC92117A818D000504B0 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Sparkle.framework; sourceTree = ""; }; + 1FFA36D21177D879006C8562 /* Controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = Controller.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 1FFA36D31177D879006C8562 /* Controller.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = Controller.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 1FFA36D41177D879006C8562 /* ViewDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewDelegate.h; sourceTree = ""; }; + 1FFA36D51177D879006C8562 /* ViewDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewDelegate.m; sourceTree = ""; }; + 1FFA37061177DAF4006C8562 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; + 2564AD2C0F5327BB00F57823 /* Tentia_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = Tentia_Prefix.pch; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 2A37F4ACFDCFA73011CA2CEA /* NewMessageWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = NewMessageWindow.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 2A37F4AEFDCFA73011CA2CEA /* NewMessageWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = NewMessageWindow.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 2A37F4B0FDCFA73011CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = main.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + 2A37F4BAFDCFA73011CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = English; path = English.lproj/Credits.rtf; sourceTree = ""; }; + 2A37F4C4FDCFA73011CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + 2A37F4C5FDCFA73011CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 8D15AC360486D014006FF6A4 /* Tentia-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Tentia-Info.plist"; sourceTree = ""; }; + 8D15AC370486D014006FF6A4 /* Tentia.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Tentia.app; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8D15AC330486D014006FF6A4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 1FA09847144602530079E258 /* libicucore.dylib in Frameworks */, + 8D15AC340486D014006FF6A4 /* Cocoa.framework in Frameworks */, + 1FFA37071177DAF4006C8562 /* WebKit.framework in Frameworks */, + 1F70619F1178FBB300C85707 /* Carbon.framework in Frameworks */, + 1FE2FC93117A818D000504B0 /* Sparkle.framework in Frameworks */, + 1F1990C6117BCA960049BEA7 /* ApplicationServices.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 1058C7A6FEA54F5311CA2CBB /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + 1F36440E118CC173008198EF /* OAuthConsumer.framework */, + 1FE2FC92117A818D000504B0 /* Sparkle.framework */, + 1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */, + 1FFA37061177DAF4006C8562 /* WebKit.framework */, + 1F70619E1178FBB300C85707 /* Carbon.framework */, + 1F1990C5117BCA960049BEA7 /* ApplicationServices.framework */, + ); + name = "Linked Frameworks"; + sourceTree = ""; + }; + 1058C7A8FEA54F5311CA2CBB /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 2A37F4C4FDCFA73011CA2CEA /* AppKit.framework */, + 13E42FBA07B3F13500E4EEF1 /* CoreData.framework */, + 2A37F4C5FDCFA73011CA2CEA /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 19C28FB0FE9D524F11CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8D15AC370486D014006FF6A4 /* Tentia.app */, + ); + name = Products; + sourceTree = ""; + }; + 1F1C8059164824760010B409 /* WebKit */ = { + isa = PBXGroup; + children = ( + 1F1C805A164824760010B409 /* Constants.js */, + 1F1C805B164824760010B409 /* ConversationView.js */, + 1F1C805C164824760010B409 /* Core.js */, + 1F1C805D164824760010B409 /* default-avatar.png */, + 1F1C805E164824760010B409 /* default.css */, + 1F1C805F164824760010B409 /* delete.png */, + 1F1C8060164824760010B409 /* enc-base64-min.js */, + 1F1C8061164824760010B409 /* even-bg.png */, + 1F1C8062164824760010B409 /* hmac-helper.js */, + 1F1C8063164824760010B409 /* hmac-sha256.js */, + 1F1C8064164824760010B409 /* index.html */, + 1F1C8065164824760010B409 /* index_oauth.html */, + 1F1C8066164824760010B409 /* jQuery-Plugins.js */, + 1F1C8067164824760010B409 /* jQuery.js */, + 1F1C8068164824760010B409 /* OauthImplementation.js */, + 1F1C8069164824760010B409 /* odd-bg.png */, + 1F1C806A164824760010B409 /* pin.png */, + 1F1C806B164824760010B409 /* sprite-icons.png */, + 1F1C806C164824760010B409 /* TimelineView.js */, + 1F1C806D164824760010B409 /* URI.min.js */, + ); + path = WebKit; + sourceTree = ""; + }; + 2A37F4AAFDCFA73011CA2CEA /* Twittia 2 */ = { + isa = PBXGroup; + children = ( + 1FA09846144602530079E258 /* libicucore.dylib */, + 2A37F4ABFDCFA73011CA2CEA /* Classes */, + 2A37F4AFFDCFA73011CA2CEA /* Other Sources */, + 2A37F4B8FDCFA73011CA2CEA /* Resources */, + 2A37F4C3FDCFA73011CA2CEA /* Frameworks */, + 19C28FB0FE9D524F11CA2CBB /* Products */, + ); + name = "Twittia 2"; + sourceTree = ""; + }; + 2A37F4ABFDCFA73011CA2CEA /* Classes */ = { + isa = PBXGroup; + children = ( + 1FFA36D21177D879006C8562 /* Controller.h */, + 1FFA36D31177D879006C8562 /* Controller.m */, + 1FFA36D41177D879006C8562 /* ViewDelegate.h */, + 1FFA36D51177D879006C8562 /* ViewDelegate.m */, + 2A37F4AEFDCFA73011CA2CEA /* NewMessageWindow.h */, + 2A37F4ACFDCFA73011CA2CEA /* NewMessageWindow.m */, + 1F77DB45118C5F1C007C7F1E /* Constants.h */, + 1F77DB46118C5F1C007C7F1E /* Constants.m */, + 1F618EC812DB5E6100E500D9 /* TweetModel.h */, + 1F618EC912DB5E6100E500D9 /* TweetModel.m */, + 1FC2549A1427D9930035D84B /* AccessToken.h */, + 1FC2549B1427D9930035D84B /* AccessToken.m */, + ); + name = Classes; + sourceTree = ""; + }; + 2A37F4AFFDCFA73011CA2CEA /* Other Sources */ = { + isa = PBXGroup; + children = ( + 2564AD2C0F5327BB00F57823 /* Tentia_Prefix.pch */, + 2A37F4B0FDCFA73011CA2CEA /* main.m */, + ); + name = "Other Sources"; + sourceTree = ""; + }; + 2A37F4B8FDCFA73011CA2CEA /* Resources */ = { + isa = PBXGroup; + children = ( + 1F122D48118E1DE100E83B77 /* Icon.icns */, + 1F1C8059164824760010B409 /* WebKit */, + 2A37F4B9FDCFA73011CA2CEA /* Credits.rtf */, + 8D15AC360486D014006FF6A4 /* Tentia-Info.plist */, + 089C165FFE840EACC02AAC07 /* InfoPlist.strings */, + 1DDD58280DA1D0D100B32029 /* NewMessageWindow.xib */, + 1DDD582A0DA1D0D100B32029 /* MainMenu.xib */, + ); + name = Resources; + sourceTree = ""; + }; + 2A37F4C3FDCFA73011CA2CEA /* Frameworks */ = { + isa = PBXGroup; + children = ( + 1058C7A6FEA54F5311CA2CBB /* Linked Frameworks */, + 1058C7A8FEA54F5311CA2CBB /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8D15AC270486D014006FF6A4 /* Twittia */ = { + isa = PBXNativeTarget; + buildConfigurationList = C05733C708A9546B00998B17 /* Build configuration list for PBXNativeTarget "Twittia" */; + buildPhases = ( + 8D15AC2B0486D014006FF6A4 /* Resources */, + 8D15AC300486D014006FF6A4 /* Sources */, + 8D15AC330486D014006FF6A4 /* Frameworks */, + 1FE2FCA1117A82E1000504B0 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Twittia; + productInstallPath = "$(HOME)/Applications"; + productName = "Twittia 2"; + productReference = 8D15AC370486D014006FF6A4 /* Tentia.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 2A37F4A9FDCFA73011CA2CEA /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0450; + }; + buildConfigurationList = C05733CB08A9546B00998B17 /* Build configuration list for PBXProject "Tentia" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + English, + Japanese, + French, + German, + ); + mainGroup = 2A37F4AAFDCFA73011CA2CEA /* Twittia 2 */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8D15AC270486D014006FF6A4 /* Twittia */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D15AC2B0486D014006FF6A4 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1F1C8082164824B30010B409 /* Constants.js in Resources */, + 1F1C8083164824B30010B409 /* ConversationView.js in Resources */, + 1F1C8084164824B30010B409 /* Core.js in Resources */, + 1F1C8085164824B30010B409 /* default-avatar.png in Resources */, + 1F1C8086164824B30010B409 /* default.css in Resources */, + 1F1C8087164824B30010B409 /* delete.png in Resources */, + 1F1C8088164824B30010B409 /* enc-base64-min.js in Resources */, + 1F1C8089164824B30010B409 /* even-bg.png in Resources */, + 1F1C808A164824B30010B409 /* hmac-helper.js in Resources */, + 1F1C808B164824B30010B409 /* hmac-sha256.js in Resources */, + 1F1C808C164824B30010B409 /* index.html in Resources */, + 1F1C808D164824B30010B409 /* index_oauth.html in Resources */, + 1F1C808E164824B30010B409 /* jQuery-Plugins.js in Resources */, + 1F1C808F164824B30010B409 /* jQuery.js in Resources */, + 1F1C8090164824B30010B409 /* OauthImplementation.js in Resources */, + 1F1C8091164824B30010B409 /* odd-bg.png in Resources */, + 1F1C8092164824B30010B409 /* pin.png in Resources */, + 1F1C8093164824B30010B409 /* sprite-icons.png in Resources */, + 1F1C8094164824B30010B409 /* TimelineView.js in Resources */, + 1F1C8095164824B30010B409 /* URI.min.js in Resources */, + 8D15AC2C0486D014006FF6A4 /* Credits.rtf in Resources */, + 8D15AC2F0486D014006FF6A4 /* InfoPlist.strings in Resources */, + 1DDD582C0DA1D0D100B32029 /* NewMessageWindow.xib in Resources */, + 1DDD582D0DA1D0D100B32029 /* MainMenu.xib in Resources */, + 1F122D49118E1DE100E83B77 /* Icon.icns in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8D15AC300486D014006FF6A4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1FC254A01427DFAD0035D84B /* AccessToken.m in Sources */, + 8D15AC310486D014006FF6A4 /* NewMessageWindow.m in Sources */, + 8D15AC320486D014006FF6A4 /* main.m in Sources */, + 1FFA36D71177D879006C8562 /* Controller.m in Sources */, + 1FFA36D81177D879006C8562 /* ViewDelegate.m in Sources */, + 1F77DB47118C5F1C007C7F1E /* Constants.m in Sources */, + 1F618ECA12DB5E6100E500D9 /* TweetModel.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 089C165FFE840EACC02AAC07 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 089C1660FE840EACC02AAC07 /* English */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + 1DDD58280DA1D0D100B32029 /* NewMessageWindow.xib */ = { + isa = PBXVariantGroup; + children = ( + 1DDD58290DA1D0D100B32029 /* English */, + ); + name = NewMessageWindow.xib; + sourceTree = ""; + }; + 1DDD582A0DA1D0D100B32029 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 1DDD582B0DA1D0D100B32029 /* English */, + ); + name = MainMenu.xib; + sourceTree = ""; + }; + 2A37F4B9FDCFA73011CA2CEA /* Credits.rtf */ = { + isa = PBXVariantGroup; + children = ( + 2A37F4BAFDCFA73011CA2CEA /* English */, + ); + name = Credits.rtf; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + C05733C808A9546B00998B17 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)\"", + ); + GCC_DYNAMIC_NO_PIC = NO; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = Tentia_Prefix.pch; + INFOPLIST_FILE = "Tentia-Info.plist"; + INSTALL_PATH = "$(HOME)/Applications"; + ONLY_ACTIVE_ARCH = NO; + PRODUCT_NAME = Tentia; + SDKROOT = ""; + }; + name = Debug; + }; + C05733C908A9546B00998B17 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)\"", + ); + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = Tentia_Prefix.pch; + INFOPLIST_FILE = "Tentia-Info.plist"; + INSTALL_PATH = "$(HOME)/Applications"; + ONLY_ACTIVE_ARCH = NO; + PRODUCT_NAME = Tentia; + SDKROOT = ""; + }; + name = Release; + }; + C05733CC08A9546B00998B17 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.5; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = ""; + }; + name = Debug; + }; + C05733CD08A9546B00998B17 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.5; + ONLY_ACTIVE_ARCH = NO; + SDKROOT = ""; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + C05733C708A9546B00998B17 /* Build configuration list for PBXNativeTarget "Twittia" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C05733C808A9546B00998B17 /* Debug */, + C05733C908A9546B00998B17 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + C05733CB08A9546B00998B17 /* Build configuration list for PBXProject "Tentia" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C05733CC08A9546B00998B17 /* Debug */, + C05733CD08A9546B00998B17 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + }; + rootObject = 2A37F4A9FDCFA73011CA2CEA /* Project object */; +} diff --git a/Mac/Tentia.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Mac/Tentia.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..6cf79f5 --- /dev/null +++ b/Mac/Tentia.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Mac/Tentia.xcodeproj/project.xcworkspace/xcuserdata/jeena.xcuserdatad/UserInterfaceState.xcuserstate b/Mac/Tentia.xcodeproj/project.xcworkspace/xcuserdata/jeena.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..c163e33 Binary files /dev/null and b/Mac/Tentia.xcodeproj/project.xcworkspace/xcuserdata/jeena.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/Mac/Tentia.xcodeproj/project.xcworkspace/xcuserdata/jeena.xcuserdatad/WorkspaceSettings.xcsettings b/Mac/Tentia.xcodeproj/project.xcworkspace/xcuserdata/jeena.xcuserdatad/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..659c876 --- /dev/null +++ b/Mac/Tentia.xcodeproj/project.xcworkspace/xcuserdata/jeena.xcuserdatad/WorkspaceSettings.xcsettings @@ -0,0 +1,10 @@ + + + + + HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges + + SnapshotAutomaticallyBeforeSignificantChanges + + + diff --git a/Mac/Tentia.xcodeproj/xcuserdata/jeena.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist b/Mac/Tentia.xcodeproj/xcuserdata/jeena.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist new file mode 100644 index 0000000..a5446f1 --- /dev/null +++ b/Mac/Tentia.xcodeproj/xcuserdata/jeena.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist @@ -0,0 +1,18 @@ + + + + + + + diff --git a/Mac/Tentia.xcodeproj/xcuserdata/jeena.xcuserdatad/xcschemes/Twittia.xcscheme b/Mac/Tentia.xcodeproj/xcuserdata/jeena.xcuserdatad/xcschemes/Twittia.xcscheme new file mode 100644 index 0000000..bbef1dc --- /dev/null +++ b/Mac/Tentia.xcodeproj/xcuserdata/jeena.xcuserdatad/xcschemes/Twittia.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Mac/Tentia.xcodeproj/xcuserdata/jeena.xcuserdatad/xcschemes/xcschememanagement.plist b/Mac/Tentia.xcodeproj/xcuserdata/jeena.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..7ce27f4 --- /dev/null +++ b/Mac/Tentia.xcodeproj/xcuserdata/jeena.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + Twittia.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 8D15AC270486D014006FF6A4 + + primary + + + + + diff --git a/Mac/Tentia_Prefix.pch b/Mac/Tentia_Prefix.pch new file mode 100644 index 0000000..3eff51c --- /dev/null +++ b/Mac/Tentia_Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'Tentia' target in the 'Tentia' project +// + +#ifdef __OBJC__ + #import +#endif diff --git a/Mac/TweetModel.h b/Mac/TweetModel.h new file mode 100644 index 0000000..51f08b9 --- /dev/null +++ b/Mac/TweetModel.h @@ -0,0 +1,22 @@ +// +// TweetModel.h +// Tentia +// +// Created by Jeena on 10.01.11. +// Copyright 2011 __MyCompanyName__. All rights reserved. +// + +#import + + +@interface TweetModel : NSObject { + NSString *text; + NSString *inReplyTostatusId; + NSString *inReplyToEntity; +} + +@property (nonatomic, retain) NSString *text; +@property (nonatomic, retain) NSString *inReplyTostatusId; +@property (nonatomic, retain) NSString *inReplyToEntity; + +@end diff --git a/Mac/TweetModel.m b/Mac/TweetModel.m new file mode 100644 index 0000000..dc917ea --- /dev/null +++ b/Mac/TweetModel.m @@ -0,0 +1,23 @@ +// +// TweetModel.m +// Tentia +// +// Created by Jeena on 10.01.11. +// Copyright 2011 __MyCompanyName__. All rights reserved. +// + +#import "TweetModel.h" + + +@implementation TweetModel + +@synthesize text, inReplyTostatusId, inReplyToEntity; + +- (void)dealloc { + [text release]; + [inReplyTostatusId release]; + [inReplyToEntity release]; + [super dealloc]; +} + +@end diff --git a/Mac/ViewDelegate.h b/Mac/ViewDelegate.h new file mode 100644 index 0000000..8fc4f46 --- /dev/null +++ b/Mac/ViewDelegate.h @@ -0,0 +1,23 @@ +// +// ViewDelegate.h +// Tentia +// +// Created by Jeena on 15.04.10. +// Licence: BSD (see attached LICENCE.txt file). +// + +#import +#import +#import "Constants.h" + +@interface ViewDelegate : NSObject { + WebView *timelineView; + WebView *mentionsView; + WebView *oauthView; +} + +@property (nonatomic, assign) WebView *timelineView; +@property (nonatomic, assign) WebView *mentionsView; +@property (nonatomic, assign) WebView *oauthView; + +@end diff --git a/Mac/ViewDelegate.m b/Mac/ViewDelegate.m new file mode 100644 index 0000000..ad041fb --- /dev/null +++ b/Mac/ViewDelegate.m @@ -0,0 +1,84 @@ +// +// ViewDelegate.m +// Tentia +// +// Created by Jeena on 15.04.10. +// Licence: BSD (see attached LICENCE.txt file). +// + +#import "ViewDelegate.h" + + +@implementation ViewDelegate + +@synthesize timelineView, mentionsView, oauthView; + +- (void)webView:(WebView *)sender addMessageToConsole:(NSDictionary *)message;{ + + if (![message isKindOfClass:[NSDictionary class]]) return; + + NSString *viewName = @"TimelineView"; + if (sender == mentionsView) viewName = @"MentionsView"; + if (sender == oauthView) viewName = @"OauthView"; + + NSLog(@"js<%@>: %@:%@: %@", + viewName, + [[message objectForKey:@"sourceURL"] lastPathComponent], + [message objectForKey:@"lineNumber"], + [message objectForKey:@"message"] + ); +} + +- (void)webView:(WebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame { + NSString *viewName = @"TimelineView"; + if (sender == mentionsView) viewName = @"MentionsView"; + if (sender == oauthView) viewName = @"OauthView"; + + NSLog(@"jsa<%@>: %@", viewName, message); +} + +- (void)webView:(WebView *)sender decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id )listener { + [listener ignore]; + [[NSWorkspace sharedWorkspace] openURL:[request URL]]; +} + +- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame { + + if (sender == oauthView) { + + [oauthView stringByEvaluatingJavaScriptFromString:@"setTimeout( function() { tentia_oauth = new OauthImplementation(); }, 2);"]; + + } else { + + NSString *action = @"home_timeline"; + NSString *delay = @"1"; + + if (sender == mentionsView) { + action = @"mentions"; + delay = @"1000"; + } + + [sender stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat: + @"setTimeout(function(){ tentia_instance = new Core('%@'); \ + document.getElementsByTagName('body')[0].appendChild(tentia_instance.body); \ + setTimeout(function() { loadPlugin(controller.pluginURL()) }, 1); }, %@);", action, delay]]; + } +} + +- (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItems { + for (NSMenuItem*item in defaultMenuItems) { + if ([[item title] isEqualToString:@"Reload"]) { + [item setAction:@selector(reload:)]; + [item setTarget:self]; + } + } + + return defaultMenuItems; +} + +- (void)reload:(id)sender { + [timelineView stringByEvaluatingJavaScriptFromString:@"tentia_instance.getNewData();"]; + [mentionsView stringByEvaluatingJavaScriptFromString:@"tentia_instance.getNewData();"]; +} + +@end diff --git a/Mac/WebKit/Constants.js b/Mac/WebKit/Constants.js new file mode 100644 index 0000000..179892e --- /dev/null +++ b/Mac/WebKit/Constants.js @@ -0,0 +1,21 @@ +// +// Constants.js +// Tentia +// +// Created by Jeena on 19.09.11. +// Licence: BSD (see attached LICENCE.txt file). +// + + +OAUTH_CONSUMER_KEY = "JPmU8KJhiBKfpohCiWLg" +OAUTH_CONSUMER_SECRET = "jtfSrnDrRcUnL1nqTMcAW0055m63EMClmkxhiBjQ" +OAUTH_SIGNATURE_METHOD = "HMAC-SHA1" +OAUTH_REQUEST_TOKEN_URL = "http://twitter.com/oauth/request_token" +OAUTH_USER_AUTHORIZATION_URL = "http://twitter.com/oauth/authorize" +OAUTH_ACCESS_TOKEN_URL = "http://twitter.com/oauth/access_token" +OAUTH_SERVICE_NAME = "twitter.com" + +APP_NAME = "Tentia"; + +API_PATH = "http://api.twitter.com/1/"; +WEBSITE_PATH = "http://twitter.com/"; diff --git a/Mac/WebKit/ConversationView.js b/Mac/WebKit/ConversationView.js new file mode 100644 index 0000000..e69de29 diff --git a/Mac/WebKit/Core.js b/Mac/WebKit/Core.js new file mode 100644 index 0000000..475c32f --- /dev/null +++ b/Mac/WebKit/Core.js @@ -0,0 +1,457 @@ +// +// Core.js +// Tentia +// +// Created by Jeena on 15.04.10. +// Licence: BSD (see attached LICENCE.txt file). +// + +function Core(action) { + this.max_length = 200; + // this.timeout = 2 * 60 * 1000; + this.timeout = 10 * 1000; // every 10 seconds + this.action = action; + this.getNewData(); + this.unread_mentions = 0; + this.since_id = null; + this.since_id_entity = null; + this.since_time = 0; + + this.body = document.createElement("ol"); + this.body.className = this.action; + this.cache = {}; + this.is_not_init = false; + + var _this = this; + setInterval(function() { _this.getNewData() }, this.timeout); +} + +Core.prototype.newStatus = function(status) { + + if(status != null && status.length > 0) { + for(var i = status.length-1, c=0; i>=c; --i) { + if(this.body.childNodes.length > 0) { + if(this.body.childNodes.length > this.max_length) { + this.body.removeChild(this.body.lastChild); + } + this.body.insertBefore(this.getItem(status[i]), this.body.firstChild); + } else { + this.body.appendChild(this.getItem(status[i])); + } + } + } + + if(this.action == "mentions" && this.is_not_init) { + this.unread_mentions += status.length; + controller.unreadMentions_(this.unread_mentions); + } + this.is_not_init = true; +} + +Core.prototype.logout = function() { + this.body.innerHTML = ""; +} + +Core.prototype.getItem = function(status) { + + var _this = this; + this.since_id = status.id; + this.since_id_entity = status.entity; + + var template = this.getTemplate(); + + template.reply_to.onclick = function() { + var mentions = []; + for (var i = 0; i < status.mentions.length; i++) { + var mention = status.mentions[i]; + if(mention.entity != controller.stringForKey_("entity")) + mentions.push(mention); + }; + replyTo(status.entity, status.id, mentions); + return false; + } + //template.retweet.onclick = function() { template.retweet.className = "hidden"; _this.retweet(status.id_str, template.item); return false; } + + template.username.innerText = status.entity; + template.username.href = status.entity; // FIXME open profile + + findProfileURL(status.entity, function(profile_url) { + if (profile_url) { + getURL(profile_url, "GET", function(resp) { + var profile = JSON.parse(resp.responseText); + var basic = profile["https://tent.io/types/info/basic/v0.1.0"]; + + if (profile && basic) { + if(basic.name) { + template.username.title = template.username.innerText; + template.username.innerText = basic.name; + } + if(basic.avatar_url) { + template.image.onerror = function() { template.image.src = 'default-avatar.png' }; + template.image.src = basic.avatar_url; + } + } + }, null, false); // do not send auth-headers + } + }); + + template.in_reply.parentNode.className = "hidden"; + + template.message.innerHTML = replaceUsernamesWithLinks(replaceURLWithHTMLLinks(status.content.text, status.entities, template.message)); + findMentions(template.message, status.mentions); + + var time = document.createElement("abbr"); + time.innerText = ISODateString(new Date(status.published_at * 1000)); + time.title = time.innerText; + time.className = "timeago"; + $(time).timeago(); + template.ago.appendChild(time); + + // {"type":"Point","coordinates":[57.10803113,12.25854746]} + if (status.content && status.content.location && status.content.location.type == "Point") { + template.geo.href = "http://maps.google.com/maps?q=" + status.content.location.coordinates[0] + "," + status.content.location.coordinates[1]; + template.geo.style.display = ""; + } + + template.source.href = status.app.url; + template.source.innerHTML = status.app.name; + template.source.title = status.app.url; + + return template.item; +} + +Core.prototype.getTemplate = function() { + + if(this.template == "undefined") { + return jQuery.extend(true, {}, this.template); + } + + var a = document.createElement("a"); + + var item = document.createElement("li"); + + var reply_to = a.cloneNode(); + reply_to.className = "reply_to" + reply_to.innerText = " "; + reply_to.href = "#"; + item.appendChild(reply_to); + + var retweet = a.cloneNode(); + retweet.className = "retweet"; + retweet.innerText = " "; + retweet.href = "#"; + // item.appendChild(retweet); // FIXME + + + var image = document.createElement("img"); + image.className = "image"; + image.src = "default-avatar.png"; + image.onmousedown = function(e) { e.preventDefault(); }; + item.appendChild(image); + + var image_username = a.cloneNode(); + image.appendChild(image_username); + + var data = document.createElement("div"); + data.className = "data"; + item.appendChild(data); + + var head = document.createElement("h1"); + data.appendChild(head); + + var username = a.cloneNode(); + head.appendChild(username); + + var in_reply = document.createElement("span"); + in_reply.className = "reply"; + head.appendChild(in_reply); + + var space = document.createTextNode(" "); + head.appendChild(space); + + var geo = document.createElement("a"); + geo.style.display = "none"; + head.appendChild(geo); + + var pin = document.createElement("img"); + pin.src = "pin.png"; + pin.alt = "Map link"; + geo.appendChild(pin); + + var in_reply_text = document.createTextNode(" in reply to "); + in_reply.appendChild(in_reply_text) + + var in_reply_a = a.cloneNode(); + in_reply.appendChild(in_reply_a); + + var message = document.createElement("p"); + message.className = "message"; + data.appendChild(message); + + var images = document.createElement("p") + images.className = "images"; + data.appendChild(images); + + var date = message.cloneNode(); + date.className = "date"; + data.appendChild(date); + + var ago = a.cloneNode(); + date.appendChild(ago); + + var from = document.createTextNode(" from "); + date.appendChild(from) + + var source = document.createElement("a"); + source.className = "source"; + date.appendChild(source) + + this.template = { + item: item, + reply_to: reply_to, + retweet: retweet, + image: image, + username: username, + in_reply: in_reply_a, + message: message, + ago: ago, + source: source, + geo: geo, + images: images + } + + return jQuery.extend(true, {}, this.template); +} + +Core.prototype.getNewData = function() { + + var those = this; + var url = URI(mkApiRootPath("/posts")); + url.addSearch("post_types", "https://tent.io/types/post/status/v0.1.0"); + url.addSearch("limit", this.max_length); + if(this.since_id) { + url.addSearch("since_id", this.since_id); + url.addSearch("since_id_entity", this.since_id_entity); + } + + if (this.action == "mentions") { + url.addSearch("mentioned_entity", controller.stringForKey_("entity")); + } + + var http_method = "GET"; + var callback = function(resp) { + + try { + var json = JSON.parse(resp.responseText) + } catch (e) { + //alert(resp.responseText); + alert(url + " JSON parse error"); + throw e; + } + + those.newStatus(json); + } + + var data = null; + + if (controller.stringForKey_("user_access_token")) { + getURL(url.toString(), http_method, callback, data); // FIXME: error callback + } +} + + +Core.prototype.sendNewMessage = function(content, in_reply_to_status_id, in_reply_to_entity) { + + var _this = this; + + var url = URI(mkApiRootPath("/posts")); + + var http_method = "POST"; + var callback = function(data) { _this.getNewData(); } + + var data = { + "type": "https://tent.io/types/post/status/v0.1.0", + "published_at": (new Date().getTime() / 1000), + "permissions": { + "public": true + }, + "content": { + "text": content, + }, + }; + + var mentions = parseMentions(content, in_reply_to_status_id, in_reply_to_entity); + if (mentions.length > 0) { + data["mentions"] = mentions; + } + + getURL(url.toString(), http_method, callback, JSON.stringify(data)); // FIXME: error callback +} + +/* Helper functions */ + +function replaceURLWithHTMLLinks(text, entities, message_node) { + var exp = /(([^\^]https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_()|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; + return text.replace(exp, "$1"); +} + +function replaceUsernamesWithLinks(text, mentions) { + return text; // FIXME! + var username = /(^|\s)(\^)(\w+)/ig; + var hash = /(^|\s)(#)(\w+)/ig; + text = text.replace(username, "$1$2$3"); + return text.replace(hash, "$1$2$3"); +} + +function replyTo(entity, status_id, mentions) { + var string = "^" + entity.replace("https://", "") + " "; + for (var i = 0; i < mentions.length; i++) { + var e = mentions[i].entity.replace("https://", ""); + if(string.indexOf(e) == -1) string += "^" + e + " "; + } + controller.openNewMessageWindowInReplyTo_statusId_withString_(entity, status_id, string); +} + +function loadPlugin(url) { + var plugin = document.createElement("script"); + plugin.type = "text/javascript"; + plugin.src = url; + document.getElementsByTagName("head")[0].appendChild(plugin); +} + +String.prototype.startsWith = function(prefix) { + return this.indexOf(prefix) === 0; +} + +String.prototype.endsWith = function(suffix) { + return this.match(suffix+"$") == suffix; +}; + +function getUrlVars(url) +{ + var vars = [], hash; + if(url.indexOf("#") > -1) url = url.slice(0, url.indexOf("#")); + var hashes = url.slice(url.indexOf('?') + 1).split('&'); + for(var i = 0; i < hashes.length; i++) + { + hash = hashes[i].split('='); + vars.push(hash[0]); + vars[hash[0]] = hash[1]; + } + return vars; +} + +function replaceShortened(url, message_node) { + var api = "http://api.bitly.com"; + if(url.startsWith("http://j.mp/")) { + api = "http://api.j.mp"; + } + + var api_url = api + "/v3/expand?format=json&apiKey=R_4fc2a1aa461d076556016390fa6400f6&login=twittia&shortUrl=" + url; // FIXME: new api key + + $.ajax({ + url: api_url, + success: function(data) { + var new_url = data.data.expand[0].long_url; + if (new_url) { + var regex = new RegExp(url, "g"); + message_node.innerHTML = message_node.innerHTML.replace(regex, new_url); + } + }, + error:function (xhr, ajaxOptions, thrownError) { + alert(xhr.status); + alert(thrownError); + } + }); +} + +function findMentions(node, mentions) { + var text = node.innerHTML; + var mentions_in_text = []; + var res = text.match(/(\^\S+)/ig); + + if (res) { + for (var i = 0; i < res.length; i++) { + var name = res[i]; + var e = name.substring(1); + if (e.substring(0,7) != "http://" && e.substring(0,8) != "https://") { + e = "https://" + e; + } + for (var j = 0; j < mentions.length; j++) { + var m = mentions[j]; + if(m.entity.startsWith(e)) { + mentions_in_text.push({ + entity: m.entity, + text: name + }); + } + } + } + } + + for (var i = 0; i < mentions_in_text.length; i++) { + var mention = mentions_in_text[i]; + + (function(mention) { // need this closure + findProfileURL(mention.entity, function(profile_url) { + if (profile_url) { + getURL(profile_url, "GET", function(resp) { + var profile = JSON.parse(resp.responseText); + var basic = profile["https://tent.io/types/info/basic/v0.1.0"]; + + if (profile && basic) { + if(basic.name) { + var new_text = node.innerHTML.replace( + mention.text, + "" + + basic.name + + "" + ); + node.innerHTML = new_text; + } + } + }, null, false); // do not send auth-headers + } + }); + })(mention); + } +} + +function parseMentions(text, post_id, entity) { + var mentions = []; + + if (post_id && entity) { + mentions.push({ + post: post_id, + entity: entity + }) + } + + var res = text.match(/(\^\S+)/ig); + + if (res) { + for (var i = 0; i < res.length; i++) { + var e = res[i].substring(1); + if (e.substring(0,7) != "http://" && e.substring(0,8) != "https://") { + e = "https://" + e; + } + if (e != entity) { + mentions.push({entity:e}); + } + } + } + + return mentions; +} + +function ISODateString(d){ + function pad(n){return n<10 ? '0'+n : n} + return d.getUTCFullYear()+'-' + + pad(d.getUTCMonth()+1)+'-' + + pad(d.getUTCDate())+'T' + + pad(d.getUTCHours())+':' + + pad(d.getUTCMinutes())+':' + + pad(d.getUTCSeconds())+'Z' +} + +var tentia_instance; diff --git a/Mac/WebKit/OauthImplementation.js b/Mac/WebKit/OauthImplementation.js new file mode 100644 index 0000000..09e40bb --- /dev/null +++ b/Mac/WebKit/OauthImplementation.js @@ -0,0 +1,142 @@ +// +// OauthImplementation.js +// Tentia +// +// Created by Jeena on 19.09.11. +// Licence: BSD (see attached LICENCE.txt file). +// + +function getUrlVars(url) { + var vars = [], hash; + if(url.indexOf("#") > -1) url = url.slice(0, url.indexOf("#")); + var hashes = url.slice(url.indexOf('?') + 1).split('&'); + for(var i = 0; i < hashes.length; i++) + { + hash = hashes[i].split('='); + vars.push(hash[0]); + vars[hash[0]] = hash[1]; + } + return vars; +} + +function OauthImplementation() { + this.app_info = { + "id": null, + "name": "Tentia", + "description": "A small TentStatus client.", + "url": "http://jabs.nu/Tentia/", + "icon": "http://jabs.nu/Tentia/icon.png", + "redirect_uris": [ + "tentia://oauthtoken" + ], + "scopes": { + "read_posts": "Uses posts to show them in a list", + "write_posts": "Posts on users behalf" + } + }; + this.register_data = null; + this.profile = null; + this.state = null; + + this.authenticate(); +} + +OauthImplementation.prototype.authenticate = function() { + this.entity = controller.stringForKey_("entity"); + this.requestProfileURL(this.entity); +} + +OauthImplementation.prototype.apiRoot = function() { + return this.profile["https://tent.io/types/info/core/v0.1.0"]["servers"][0]; +} + +OauthImplementation.prototype.requestProfileURL = function (entity) { + var those = this; + findProfileURL(entity, function(profile_url) { + those.register(profile_url); + }); +} + +OauthImplementation.prototype.register = function (url) { + var those = this; + getURL(url, "GET", function(resp) { + those.profile = JSON.parse(resp.responseText); + controller.setString_forKey_(those.apiRoot(), "api_root"); + var callback = function(resp) { + var data = JSON.parse(resp.responseText); + those.authRequest(data); + } + getURL(mkApiRootPath("/apps"), "POST", callback, JSON.stringify(those.app_info)); + }); +} + +OauthImplementation.prototype.authRequest = function(register_data) { + // id + // mac_key_id + // mac_key + // mac_algorithm + this.register_data = register_data; + + // Needed for later App Registration Modification + controller.setString_forKey_(register_data["mac_key"], "app_mac_key"); + controller.setString_forKey_(register_data["mac_key_id"], "app_mac_key_id"); + controller.setString_forKey_(register_data["id"], "app_id"); + controller.setString_forKey_(register_data["mac_algorithm"], "app_mac_algorithm"); + + this.state = makeid(19); + var auth = "/oauth/authorize?client_id=" + register_data["id"] + + "&redirect_uri=" + escape(this.app_info["redirect_uris"][0]) + + "&scope=" + Object.keys(this.app_info["scopes"]).join(",") + + "&state=" + this.state + + "&tent_post_types=" + escape("https://tent.io/types/posts/status/v0.1.0"); + + controller.openURL_(this.apiRoot() + auth); +} + +OauthImplementation.prototype.requestAccessToken = function(responseBody) { + // /oauthtoken?code=51d0115b04d1ed94001dde751c5b360f&state=aQfH1VEohYsQr86qqyv + var urlVars = getUrlVars(responseBody); + if(this.state && this.state != "" && urlVars["state"] == this.state) { + + var url = mkApiRootPath("/apps/") + this.register_data["id"] + "/authorizations"; + + var requestBody = JSON.stringify({ + 'code' : urlVars["code"], + 'token_type' : "mac" + }); + + var those = this; + var http_method = "POST"; + var callback = function(resp) { + those.requestAccessTokenTicketFinished(resp.responseText); + }; + + var auth_header = makeAuthHeader( + url, + http_method, + controller.stringForKey_("app_mac_key"), + controller.stringForKey_("app_mac_key_id") + ); + + getURL(url, http_method, callback, requestBody, auth_header); + + } else { + alert("State is not the same: {" + this.state + "} vs {" + urlVars["state"] + "}") + } + + this.state = null; // reset the state +} + +OauthImplementation.prototype.requestAccessTokenTicketFinished = function(responseBody) { + + var access = JSON.parse(responseBody); + + controller.setString_forKey_(access["access_token"], "user_access_token"); + controller.setString_forKey_(access["mac_key"], "user_mac_key"); + controller.setString_forKey_(access["mac_algorithm"], "user_mac_algorithm"); + controller.setString_forKey_(access["token_type"], "user_token_type"); + + controller.loggedIn(); +} + +var tentia_oauth; \ No newline at end of file diff --git a/Mac/WebKit/TimelineView.js b/Mac/WebKit/TimelineView.js new file mode 100644 index 0000000..e69de29 diff --git a/Mac/WebKit/URI.min.js b/Mac/WebKit/URI.min.js new file mode 100644 index 0000000..80b30f0 --- /dev/null +++ b/Mac/WebKit/URI.min.js @@ -0,0 +1,70 @@ +/*! URI.js v1.7.4 http://medialize.github.com/URI.js/ */ +/* build contains: IPv6.js, punycode.js, SecondLevelDomains.js, URI.js, URITemplate.js */ +(function(){("undefined"!==typeof module&&module.exports?module.exports:window).IPv6={best:function(d){var d=d.toLowerCase().split(":"),j=d.length,h=8;""===d[0]&&""===d[1]&&""===d[2]?(d.shift(),d.shift()):""===d[0]&&""===d[1]?d.shift():""===d[j-1]&&""===d[j-2]&&d.pop();j=d.length;-1!==d[j-1].indexOf(".")&&(h=7);var i;for(i=0;if;f++)if("0"===j[0]&&1f&&(j=u,f=s)):"0"==d[i]&&(g=!0,u=i,s=1);s>f&&(j=u,f=s);1>>10&1023|55296),a=56320|a&1023);return b+=z(a)}).join("")}function s(e, +c,k){for(var d=0,e=k?w(e/b):e>>1,e=e+w(e/c);e>x*r>>1;d+=n)e=w(e/x);return w(d+(x+1)*e/(e+a))}function u(a){var b=[],c=a.length,d,g=0,t=k,i=e,m,h,l,q,v;m=a.lastIndexOf(B);0>m&&(m=0);for(h=0;h=c&&j("invalid-input");q=a.charCodeAt(m++);q=10>q-48?q-22:26>q-65?q-65:26>q-97?q-97:n;(q>=n||q>w((y-g)/d))&&j("overflow");g+=q*d;v=l<=i?p:l>=i+r?r:l-i;if(qw(y/q)&&j("overflow");d*= +q}d=b.length+1;i=s(g-h,d,0==h);w(g/d)>y-t&&j("overflow");t+=w(g/d);g%=d;b.splice(g++,0,t)}return f(b)}function g(a){var b,c,d,g,f,t,m,h,l,q=[],v,u,x,a=i(a);v=a.length;b=k;c=0;f=e;for(t=0;tl&&q.push(z(l));for((d=g=q.length)&&q.push(B);d=b&&lw((y-c)/u)&&j("overflow");c+=(m-b)*u;b=m;for(t=0;ty&&j("overflow"),l==b){h=c;for(m=n;;m+=n){l=m<=f?p:m>=f+r?r:m-f;if(h +l+x%h)-0));h=w(x/h)}q.push(z(h+22+75*(26>h)-0));f=s(c,u,d==g);c=0;++d}++c;++b}return q.join("")}var c,m="function"==typeof define&&"object"==typeof define.amd&&define.amd&&define,l="object"==typeof exports&&exports,q="object"==typeof module&&module,y=2147483647,n=36,p=1,r=26,a=38,b=700,e=72,k=128,B="-",t=/[^ -~]/,v=/^xn--/,C={overflow:"Overflow: input needs wider integers to process.",ucs2decode:"UCS-2(decode): illegal sequence",ucs2encode:"UCS-2(encode): illegal value","not-basic":"Illegal input >= 0x80 (not a basic code point)", +"invalid-input":"Invalid input"},x=n-p,w=Math.floor,z=String.fromCharCode,A;c={version:"0.3.0",ucs2:{decode:i,encode:f},decode:u,encode:g,toASCII:function(a){return h(a.split("."),function(a){return t.test(a)?"xn--"+g(a):a}).join(".")},toUnicode:function(a){return h(a.split("."),function(a){return v.test(a)?u(a.slice(4).toLowerCase()):a}).join(".")}};if(l)if(q&&q.exports==l)q.exports=c;else for(A in c)c.hasOwnProperty(A)&&(l[A]=c[A]);else m?define("punycode",c):d.punycode=c})(this); +(function(){var d={list:{ac:"com|gov|mil|net|org",ae:"ac|co|gov|mil|name|net|org|pro|sch",af:"com|edu|gov|net|org",al:"com|edu|gov|mil|net|org",ao:"co|ed|gv|it|og|pb",ar:"com|edu|gob|gov|int|mil|net|org|tur",at:"ac|co|gv|or",au:"asn|com|csiro|edu|gov|id|net|org",ba:"co|com|edu|gov|mil|net|org|rs|unbi|unmo|unsa|untz|unze",bb:"biz|co|com|edu|gov|info|net|org|store|tv",bh:"biz|cc|com|edu|gov|info|net|org",bn:"com|edu|gov|net|org",bo:"com|edu|gob|gov|int|mil|net|org|tv",br:"adm|adv|agr|am|arq|art|ato|b|bio|blog|bmd|cim|cng|cnt|com|coop|ecn|edu|eng|esp|etc|eti|far|flog|fm|fnd|fot|fst|g12|ggf|gov|imb|ind|inf|jor|jus|lel|mat|med|mil|mus|net|nom|not|ntr|odo|org|ppg|pro|psc|psi|qsl|rec|slg|srv|tmp|trd|tur|tv|vet|vlog|wiki|zlg", +bs:"com|edu|gov|net|org",bz:"du|et|om|ov|rg",ca:"ab|bc|mb|nb|nf|nl|ns|nt|nu|on|pe|qc|sk|yk",ck:"biz|co|edu|gen|gov|info|net|org",cn:"ac|ah|bj|com|cq|edu|fj|gd|gov|gs|gx|gz|ha|hb|he|hi|hl|hn|jl|js|jx|ln|mil|net|nm|nx|org|qh|sc|sd|sh|sn|sx|tj|tw|xj|xz|yn|zj",co:"com|edu|gov|mil|net|nom|org",cr:"ac|c|co|ed|fi|go|or|sa",cy:"ac|biz|com|ekloges|gov|ltd|name|net|org|parliament|press|pro|tm","do":"art|com|edu|gob|gov|mil|net|org|sld|web",dz:"art|asso|com|edu|gov|net|org|pol",ec:"com|edu|fin|gov|info|med|mil|net|org|pro", +eg:"com|edu|eun|gov|mil|name|net|org|sci",er:"com|edu|gov|ind|mil|net|org|rochest|w",es:"com|edu|gob|nom|org",et:"biz|com|edu|gov|info|name|net|org",fj:"ac|biz|com|info|mil|name|net|org|pro",fk:"ac|co|gov|net|nom|org",fr:"asso|com|f|gouv|nom|prd|presse|tm",gg:"co|net|org",gh:"com|edu|gov|mil|org",gn:"ac|com|gov|net|org",gr:"com|edu|gov|mil|net|org",gt:"com|edu|gob|ind|mil|net|org",gu:"com|edu|gov|net|org",hk:"com|edu|gov|idv|net|org",id:"ac|co|go|mil|net|or|sch|web",il:"ac|co|gov|idf|k12|muni|net|org", +"in":"ac|co|edu|ernet|firm|gen|gov|i|ind|mil|net|nic|org|res",iq:"com|edu|gov|i|mil|net|org",ir:"ac|co|dnssec|gov|i|id|net|org|sch",it:"edu|gov",je:"co|net|org",jo:"com|edu|gov|mil|name|net|org|sch",jp:"ac|ad|co|ed|go|gr|lg|ne|or",ke:"ac|co|go|info|me|mobi|ne|or|sc",kh:"com|edu|gov|mil|net|org|per",ki:"biz|com|de|edu|gov|info|mob|net|org|tel",km:"asso|com|coop|edu|gouv|k|medecin|mil|nom|notaires|pharmaciens|presse|tm|veterinaire",kn:"edu|gov|net|org",kr:"ac|busan|chungbuk|chungnam|co|daegu|daejeon|es|gangwon|go|gwangju|gyeongbuk|gyeonggi|gyeongnam|hs|incheon|jeju|jeonbuk|jeonnam|k|kg|mil|ms|ne|or|pe|re|sc|seoul|ulsan", +kw:"com|edu|gov|net|org",ky:"com|edu|gov|net|org",kz:"com|edu|gov|mil|net|org",lb:"com|edu|gov|net|org",lk:"assn|com|edu|gov|grp|hotel|int|ltd|net|ngo|org|sch|soc|web",lr:"com|edu|gov|net|org",lv:"asn|com|conf|edu|gov|id|mil|net|org",ly:"com|edu|gov|id|med|net|org|plc|sch",ma:"ac|co|gov|m|net|org|press",mc:"asso|tm",me:"ac|co|edu|gov|its|net|org|priv",mg:"com|edu|gov|mil|nom|org|prd|tm",mk:"com|edu|gov|inf|name|net|org|pro",ml:"com|edu|gov|net|org|presse",mn:"edu|gov|org",mo:"com|edu|gov|net|org", +mt:"com|edu|gov|net|org",mv:"aero|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro",mw:"ac|co|com|coop|edu|gov|int|museum|net|org",mx:"com|edu|gob|net|org",my:"com|edu|gov|mil|name|net|org|sch",nf:"arts|com|firm|info|net|other|per|rec|store|web",ng:"biz|com|edu|gov|mil|mobi|name|net|org|sch",ni:"ac|co|com|edu|gob|mil|net|nom|org",np:"com|edu|gov|mil|net|org",nr:"biz|com|edu|gov|info|net|org",om:"ac|biz|co|com|edu|gov|med|mil|museum|net|org|pro|sch",pe:"com|edu|gob|mil|net|nom|org|sld",ph:"com|edu|gov|i|mil|net|ngo|org", +pk:"biz|com|edu|fam|gob|gok|gon|gop|gos|gov|net|org|web",pl:"art|bialystok|biz|com|edu|gda|gdansk|gorzow|gov|info|katowice|krakow|lodz|lublin|mil|net|ngo|olsztyn|org|poznan|pwr|radom|slupsk|szczecin|torun|warszawa|waw|wroc|wroclaw|zgora",pr:"ac|biz|com|edu|est|gov|info|isla|name|net|org|pro|prof",ps:"com|edu|gov|net|org|plo|sec",pw:"belau|co|ed|go|ne|or",ro:"arts|com|firm|info|nom|nt|org|rec|store|tm|www",rs:"ac|co|edu|gov|in|org",sb:"com|edu|gov|net|org",sc:"com|edu|gov|net|org",sh:"co|com|edu|gov|net|nom|org", +sl:"com|edu|gov|net|org",st:"co|com|consulado|edu|embaixada|gov|mil|net|org|principe|saotome|store",sv:"com|edu|gob|org|red",sz:"ac|co|org",tr:"av|bbs|bel|biz|com|dr|edu|gen|gov|info|k12|name|net|org|pol|tel|tsk|tv|web",tt:"aero|biz|cat|co|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel",tw:"club|com|ebiz|edu|game|gov|idv|mil|net|org",mu:"ac|co|com|gov|net|or|org",mz:"ac|co|edu|gov|org",na:"co|com",nz:"ac|co|cri|geek|gen|govt|health|iwi|maori|mil|net|org|parliament|school", +pa:"abo|ac|com|edu|gob|ing|med|net|nom|org|sld",pt:"com|edu|gov|int|net|nome|org|publ",py:"com|edu|gov|mil|net|org",qa:"com|edu|gov|mil|net|org",re:"asso|com|nom",ru:"ac|adygeya|altai|amur|arkhangelsk|astrakhan|bashkiria|belgorod|bir|bryansk|buryatia|cbg|chel|chelyabinsk|chita|chukotka|chuvashia|com|dagestan|e-burg|edu|gov|grozny|int|irkutsk|ivanovo|izhevsk|jar|joshkar-ola|kalmykia|kaluga|kamchatka|karelia|kazan|kchr|kemerovo|khabarovsk|khakassia|khv|kirov|koenig|komi|kostroma|kranoyarsk|kuban|kurgan|kursk|lipetsk|magadan|mari|mari-el|marine|mil|mordovia|mosreg|msk|murmansk|nalchik|net|nnov|nov|novosibirsk|nsk|omsk|orenburg|org|oryol|penza|perm|pp|pskov|ptz|rnd|ryazan|sakhalin|samara|saratov|simbirsk|smolensk|spb|stavropol|stv|surgut|tambov|tatarstan|tom|tomsk|tsaritsyn|tsk|tula|tuva|tver|tyumen|udm|udmurtia|ulan-ude|vladikavkaz|vladimir|vladivostok|volgograd|vologda|voronezh|vrn|vyatka|yakutia|yamal|yekaterinburg|yuzhno-sakhalinsk", +rw:"ac|co|com|edu|gouv|gov|int|mil|net",sa:"com|edu|gov|med|net|org|pub|sch",sd:"com|edu|gov|info|med|net|org|tv",se:"a|ac|b|bd|c|d|e|f|g|h|i|k|l|m|n|o|org|p|parti|pp|press|r|s|t|tm|u|w|x|y|z",sg:"com|edu|gov|idn|net|org|per",sn:"art|com|edu|gouv|org|perso|univ",sy:"com|edu|gov|mil|net|news|org",th:"ac|co|go|in|mi|net|or",tj:"ac|biz|co|com|edu|go|gov|info|int|mil|name|net|nic|org|test|web",tn:"agrinet|com|defense|edunet|ens|fin|gov|ind|info|intl|mincom|nat|net|org|perso|rnrt|rns|rnu|tourism",tz:"ac|co|go|ne|or", +ua:"biz|cherkassy|chernigov|chernovtsy|ck|cn|co|com|crimea|cv|dn|dnepropetrovsk|donetsk|dp|edu|gov|if|in|ivano-frankivsk|kh|kharkov|kherson|khmelnitskiy|kiev|kirovograd|km|kr|ks|kv|lg|lugansk|lutsk|lviv|me|mk|net|nikolaev|od|odessa|org|pl|poltava|pp|rovno|rv|sebastopol|sumy|te|ternopil|uzhgorod|vinnica|vn|zaporizhzhe|zhitomir|zp|zt",ug:"ac|co|go|ne|or|org|sc",uk:"ac|bl|british-library|co|cym|gov|govt|icnet|jet|lea|ltd|me|mil|mod|national-library-scotland|nel|net|nhs|nic|nls|org|orgn|parliament|plc|police|sch|scot|soc", +us:"dni|fed|isa|kids|nsn",uy:"com|edu|gub|mil|net|org",ve:"co|com|edu|gob|info|mil|net|org|web",vi:"co|com|k12|net|org",vn:"ac|biz|com|edu|gov|health|info|int|name|net|org|pro",ye:"co|com|gov|ltd|me|net|org|plc",yu:"ac|co|edu|gov|org",za:"ac|agric|alt|bourse|city|co|cybernet|db|edu|gov|grondar|iaccess|imt|inca|landesign|law|mil|net|ngo|nis|nom|olivetti|org|pix|school|tm|web",zm:"ac|co|com|edu|gov|net|org|sch"},has_expression:null,is_expression:null,has:function(j){return!!j.match(d.has_expression)}, +is:function(j){return!!j.match(d.is_expression)},get:function(j){return(j=j.match(d.has_expression))&&j[1]||null},init:function(){var j="",h;for(h in d.list)Object.prototype.hasOwnProperty.call(d.list,h)&&(j+="|("+("("+d.list[h]+")."+h)+")");d.has_expression=RegExp("\\.("+j.substr(1)+")$","i");d.is_expression=RegExp("^("+j.substr(1)+")$","i")}};d.init();"undefined"!==typeof module&&module.exports?module.exports=d:window.SecondLevelDomains=d})(); +(function(d){function j(a){return a.replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}function h(a){return"[object Array]"===String(Object.prototype.toString.call(a))}function i(a){return encodeURIComponent(a).replace(/[!'()*]/g,escape).replace(/\*/g,"%2A")}var f="undefined"!==typeof module&&module.exports,s=f?require("./punycode"):window.punycode,u=f?require("./IPv6"):window.IPv6,g=f?require("./SecondLevelDomains"):window.SecondLevelDomains,c=function(a,b){if(!(this instanceof c))return new c(a,b);a=== +d&&(a="undefined"!==typeof location?location.href+"":"");this.href(a);return b!==d?this.absoluteTo(b):this},f=c.prototype;c.protocol_expression=/^[a-z][a-z0-9-+-]*$/i;c.idn_expression=/[^a-z0-9\.-]/i;c.punycode_expression=/(xn--)/i;c.ip4_expression=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;c.ip6_expression=/^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/; +c.find_uri_expression=/\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?\u00ab\u00bb\u201c\u201d\u2018\u2019]))/ig;c.defaultPorts={http:"80",https:"443",ftp:"21"};c.invalid_hostname_characters=/[^a-zA-Z0-9\.-]/;c.encode=i;c.decode=decodeURIComponent;c.iso8859=function(){c.encode=escape;c.decode=unescape};c.unicode=function(){c.encode=i;c.decode=decodeURIComponent}; +c.characters={pathname:{encode:{expression:/%(24|26|2B|2C|3B|3D|3A|40)/ig,map:{"%24":"$","%26":"&","%2B":"+","%2C":",","%3B":";","%3D":"=","%3A":":","%40":"@"}},decode:{expression:/[\/\?#]/g,map:{"/":"%2F","?":"%3F","#":"%23"}}},reserved:{encode:{expression:/%(21|23|24|26|27|28|29|2A|2B|2C|2F|3A|3B|3D|3F|40|5B|5D)/ig,map:{"%3A":":","%2F":"/","%3F":"?","%23":"#","%5B":"[","%5D":"]","%40":"@","%21":"!","%24":"$","%26":"&","%27":"'","%28":"(","%29":")","%2A":"*","%2B":"+","%2C":",","%3B":";","%3D":"="}}}}; +c.encodeQuery=function(a){return c.encode(a+"").replace(/%20/g,"+")};c.decodeQuery=function(a){return c.decode((a+"").replace(/\+/g,"%20"))};c.recodePath=function(a){for(var a=(a+"").split("/"),b=0,e=a.length;bc)return a[0]===b[0]&&"/"===a[0]?"/":"";"/"!==a[c]&&(c=a.substring(0,c).lastIndexOf("/"));return a.substring(0,c+1)};c.withinString=function(a,b){return a.replace(c.find_uri_expression,b)};c.ensureValidHostname=function(a){if(a.match(c.invalid_hostname_characters)){if(!s)throw new TypeError("Hostname '"+ +a+"' contains characters other than [A-Z0-9.-] and Punycode.js is not available");if(s.toASCII(a).match(c.invalid_hostname_characters))throw new TypeError("Hostname '"+a+"' contains characters other than [A-Z0-9.-]");}};f.build=function(a){if(!0===a)this._deferred_build=!0;else if(a===d||this._deferred_build)this._string=c.build(this._parts),this._deferred_build=!1;return this};f.clone=function(){return new c(this)};f.toString=function(){return this.build(!1)._string};f.valueOf=function(){return this.toString()}; +m={protocol:"protocol",username:"username",password:"password",hostname:"hostname",port:"port"};q=function(a){return function(b,e){if(b===d)return this._parts[a]||"";this._parts[a]=b;this.build(!e);return this}};for(l in m)f[l]=q(m[l]);m={query:"?",fragment:"#"};q=function(a,b){return function(e,c){if(e===d)return this._parts[a]||"";null!==e&&(e+="",e[0]===b&&(e=e.substring(1)));this._parts[a]=e;this.build(!c);return this}};for(l in m)f[l]=q(l,m[l]);m={search:["?","query"],hash:["#","fragment"]}; +q=function(a,b){return function(e,c){var d=this[a](e,c);return"string"===typeof d&&d.length?b+d:d}};for(l in m)f[l]=q(m[l][1],m[l][0]);f.pathname=function(a,b){if(a===d||!0===a){var e=this._parts.path||(this._parts.urn?"":"/");return a?c.decodePath(e):e}this._parts.path=a?c.recodePath(a):"/";this.build(!b);return this};f.path=f.pathname;f.href=function(a,b){if(a===d)return this.toString();this._string="";this._parts={protocol:null,username:null,password:null,hostname:null,urn:null,port:null,path:null, +query:null,fragment:null};var e=a instanceof c,k="object"===typeof a&&(a.hostname||a.path),g;if("string"===typeof a)this._parts=c.parse(a);else if(e||k)for(g in e=e?a._parts:a,e)Object.hasOwnProperty.call(this._parts,g)&&(this._parts[g]=e[g]);else throw new TypeError("invalid input");this.build(!b);return this};f.is=function(a){var b=!1,e=!1,d=!1,f=!1,m=!1,l=!1,h=!1,i=!this._parts.urn;this._parts.hostname&&(i=!1,e=c.ip4_expression.test(this._parts.hostname),d=c.ip6_expression.test(this._parts.hostname), +b=e||d,m=(f=!b)&&g&&g.has(this._parts.hostname),l=f&&c.idn_expression.test(this._parts.hostname),h=f&&c.punycode_expression.test(this._parts.hostname));switch(a.toLowerCase()){case "relative":return i;case "absolute":return!i;case "domain":case "name":return f;case "sld":return m;case "ip":return b;case "ip4":case "ipv4":case "inet4":return e;case "ip6":case "ipv6":case "inet6":return d;case "idn":return l;case "url":return!this._parts.urn;case "urn":return!!this._parts.urn;case "punycode":return h}return null}; +var y=f.protocol,n=f.port,p=f.hostname;f.protocol=function(a,b){if(a!==d&&a&&(a=a.replace(/:(\/\/)?$/,""),a.match(/[^a-zA-z0-9\.+-]/)))throw new TypeError("Protocol '"+a+"' contains characters other than [A-Z0-9.+-]");return y.call(this,a,b)};f.scheme=f.protocol;f.port=function(a,b){if(this._parts.urn)return a===d?"":this;if(a!==d&&(0===a&&(a=null),a&&(a+="",":"===a[0]&&(a=a.substring(1)),a.match(/[^0-9]/))))throw new TypeError("Port '"+a+"' contains characters other than [0-9]");return n.call(this, +a,b)};f.hostname=function(a,b){if(this._parts.urn)return a===d?"":this;if(a!==d){var e={};c.parseHost(a,e);a=e.hostname}return p.call(this,a,b)};f.host=function(a,b){if(this._parts.urn)return a===d?"":this;if(a===d)return this._parts.hostname?c.buildHost(this._parts):"";c.parseHost(a,this._parts);this.build(!b);return this};f.authority=function(a,b){if(this._parts.urn)return a===d?"":this;if(a===d)return this._parts.hostname?c.buildAuthority(this._parts):"";c.parseAuthority(a,this._parts);this.build(!b); +return this};f.userinfo=function(a,b){if(this._parts.urn)return a===d?"":this;if(a===d){if(!this._parts.username)return"";var e=c.buildUserinfo(this._parts);return e.substring(0,e.length-1)}"@"!==a[a.length-1]&&(a+="@");c.parseUserinfo(a,this._parts);this.build(!b);return this};f.subdomain=function(a,b){if(this._parts.urn)return a===d?"":this;if(a===d){if(!this._parts.hostname||this.is("IP"))return"";var e=this._parts.hostname.length-this.domain().length-1;return this._parts.hostname.substring(0, +e)||""}e=this._parts.hostname.length-this.domain().length;e=this._parts.hostname.substring(0,e);e=RegExp("^"+j(e));a&&"."!==a[a.length-1]&&(a+=".");a&&c.ensureValidHostname(a);this._parts.hostname=this._parts.hostname.replace(e,a);this.build(!b);return this};f.domain=function(a,b){if(this._parts.urn)return a===d?"":this;"boolean"===typeof a&&(b=a,a=d);if(a===d){if(!this._parts.hostname||this.is("IP"))return"";var e=this._parts.hostname.match(/\./g);if(e&&2>e.length)return this._parts.hostname;e=this._parts.hostname.length- +this.tld(b).length-1;e=this._parts.hostname.lastIndexOf(".",e-1)+1;return this._parts.hostname.substring(e)||""}if(!a)throw new TypeError("cannot set domain empty");c.ensureValidHostname(a);!this._parts.hostname||this.is("IP")?this._parts.hostname=a:(e=RegExp(j(this.domain())+"$"),this._parts.hostname=this._parts.hostname.replace(e,a));this.build(!b);return this};f.tld=function(a,b){if(this._parts.urn)return a===d?"":this;"boolean"===typeof a&&(b=a,a=d);if(a===d){if(!this._parts.hostname||this.is("IP"))return""; +var c=this._parts.hostname.lastIndexOf("."),c=this._parts.hostname.substring(c+1);return!0!==b&&g&&g.list[c.toLowerCase()]?g.get(this._parts.hostname)||c:c}if(a)if(a.match(/[^a-zA-Z0-9-]/))if(g&&g.is(a))c=RegExp(j(this.tld())+"$"),this._parts.hostname=this._parts.hostname.replace(c,a);else throw new TypeError("TLD '"+a+"' contains characters other than [A-Z0-9]");else{if(!this._parts.hostname||this.is("IP"))throw new ReferenceError("cannot set TLD on non-domain host");c=RegExp(j(this.tld())+"$"); +this._parts.hostname=this._parts.hostname.replace(c,a)}else throw new TypeError("cannot set TLD empty");this.build(!b);return this};f.directory=function(a,b){if(this._parts.urn)return a===d?"":this;if(a===d||!0===a){if(!this._parts.path&&!this._parts.hostname)return"";if("/"===this._parts.path)return"/";var e=this._parts.path.length-this.filename().length-1,e=this._parts.path.substring(0,e)||(this._parts.hostname?"/":"");return a?c.decodePath(e):e}e=this._parts.path.length-this.filename().length; +e=this._parts.path.substring(0,e);e=RegExp("^"+j(e));this.is("relative")||(a||(a="/"),"/"!==a[0]&&(a="/"+a));a&&"/"!==a[a.length-1]&&(a+="/");a=c.recodePath(a);this._parts.path=this._parts.path.replace(e,a);this.build(!b);return this};f.filename=function(a,b){if(this._parts.urn)return a===d?"":this;if(a===d||!0===a){if(!this._parts.path||"/"===this._parts.path)return"";var e=this._parts.path.lastIndexOf("/"),e=this._parts.path.substring(e+1);return a?c.decodePathSegment(e):e}e=!1;"/"===a[0]&&(a=a.substring(1)); +a.match(/\.?\//)&&(e=!0);var k=RegExp(j(this.filename())+"$"),a=c.recodePath(a);this._parts.path=this._parts.path.replace(k,a);e?this.normalizePath(b):this.build(!b);return this};f.suffix=function(a,b){if(this._parts.urn)return a===d?"":this;if(a===d||!0===a){if(!this._parts.path||"/"===this._parts.path)return"";var e=this.filename(),k=e.lastIndexOf(".");if(-1===k)return"";e=e.substring(k+1);e=/^[a-z0-9%]+$/i.test(e)?e:"";return a?c.decodePathSegment(e):e}"."===a[0]&&(a=a.substring(1));if(e=this.suffix())k= +a?RegExp(j(e)+"$"):RegExp(j("."+e)+"$");else{if(!a)return this;this._parts.path+="."+c.recodePath(a)}k&&(a=c.recodePath(a),this._parts.path=this._parts.path.replace(k,a));this.build(!b);return this};f.segment=function(a,b,c){var k=this._parts.urn?":":"/",g=this.path(),f="/"===g.substring(0,1),g=g.split(k);"number"!==typeof a&&(c=b,b=a,a=d);if(a!==d&&"number"!==typeof a)throw Error("Bad segment '"+a+"', must be 0-based integer");f&&g.shift();0>a&&(a=Math.max(g.length+a,0));if(b===d)return a===d?g: +g[a];if(null===a||g[a]===d)if(h(b))g=b;else{if(b||"string"===typeof b&&b.length)""===g[g.length-1]?g[g.length-1]=b:g.push(b)}else b||"string"===typeof b&&b.length?g[a]=b:g.splice(a,1);f&&g.unshift("");return this.path(g.join(k),c)};var r=f.query;f.query=function(a,b){return!0===a?c.parseQuery(this._parts.query):a!==d&&"string"!==typeof a?(this._parts.query=c.buildQuery(a),this.build(!b),this):r.call(this,a,b)};f.addQuery=function(a,b,e){var d=c.parseQuery(this._parts.query);c.addQuery(d,a,b);this._parts.query= +c.buildQuery(d);"string"!==typeof a&&(e=b);this.build(!e);return this};f.removeQuery=function(a,b,e){var d=c.parseQuery(this._parts.query);c.removeQuery(d,a,b);this._parts.query=c.buildQuery(d);"string"!==typeof a&&(e=b);this.build(!e);return this};f.addSearch=f.addQuery;f.removeSearch=f.removeQuery;f.normalize=function(){return this._parts.urn?this.normalizeProtocol(!1).normalizeQuery(!1).normalizeFragment(!1).build():this.normalizeProtocol(!1).normalizeHostname(!1).normalizePort(!1).normalizePath(!1).normalizeQuery(!1).normalizeFragment(!1).build()}; +f.normalizeProtocol=function(a){"string"===typeof this._parts.protocol&&(this._parts.protocol=this._parts.protocol.toLowerCase(),this.build(!a));return this};f.normalizeHostname=function(a){this._parts.hostname&&(this.is("IDN")&&s?this._parts.hostname=s.toASCII(this._parts.hostname):this.is("IPv6")&&u&&(this._parts.hostname=u.best(this._parts.hostname)),this._parts.hostname=this._parts.hostname.toLowerCase(),this.build(!a));return this};f.normalizePort=function(a){"string"===typeof this._parts.protocol&& +this._parts.port===c.defaultPorts[this._parts.protocol]&&(this._parts.port=null,this.build(!a));return this};f.normalizePath=function(a){if(this._parts.urn||!this._parts.path||"/"===this._parts.path)return this;var b,e,d=this._parts.path,g,f;"/"!==d[0]&&("."===d[0]&&(e=d.substring(0,d.indexOf("/"))),b=!0,d="/"+d);for(d=d.replace(/(\/(\.\/)+)|\/{2,}/g,"/");;){g=d.indexOf("/../");if(-1===g)break;else if(0===g){d=d.substring(3);break}f=d.substring(0,g).lastIndexOf("/");-1===f&&(f=g);d=d.substring(0, +f)+d.substring(g+3)}b&&this.is("relative")&&(d=e?e+d:d.substring(1));d=c.recodePath(d);this._parts.path=d;this.build(!a);return this};f.normalizePathname=f.normalizePath;f.normalizeQuery=function(a){"string"===typeof this._parts.query&&(this._parts.query.length?this.query(c.parseQuery(this._parts.query)):this._parts.query=null,this.build(!a));return this};f.normalizeFragment=function(a){this._parts.fragment||(this._parts.fragment=null,this.build(!a));return this};f.normalizeSearch=f.normalizeQuery; +f.normalizeHash=f.normalizeFragment;f.iso8859=function(){var a=c.encode,b=c.decode;c.encode=escape;c.decode=decodeURIComponent;this.normalize();c.encode=a;c.decode=b;return this};f.unicode=function(){var a=c.encode,b=c.decode;c.encode=i;c.decode=unescape;this.normalize();c.encode=a;c.decode=b;return this};f.readable=function(){var a=this.clone();a.username("").password("").normalize();var b="";a._parts.protocol&&(b+=a._parts.protocol+"://");a._parts.hostname&&(a.is("punycode")&&s?(b+=s.toUnicode(a._parts.hostname), +a._parts.port&&(b+=":"+a._parts.port)):b+=a.host());a._parts.hostname&&(a._parts.path&&"/"!==a._parts.path[0])&&(b+="/");b+=a.path(!0);if(a._parts.query){for(var e="",g=0,f=a._parts.query.split("&"),m=f.length;g>>2]>>>24-8*(a%4)&255)<<16|(e[a+1>>>2]>>>24-8*((a+1)%4)&255)<<8|e[a+2>>>2]>>>24-8*((a+2)%4)&255,g=0;4>g&&a+0.75*g>>6*(3-g)&63));if(e=c.charAt(64))for(;b.length%4;)b.push(e);return b.join("")},parse:function(b){var b=b.replace(/\s/g,""),e=b.length,f=this._map,c=f.charAt(64);c&&(c=b.indexOf(c),-1!=c&&(e=c)); +for(var c=[],a=0,d=0;d>>6-2*(d%4);c[a>>>2]|=(g|h)<<24-8*(a%4);a++}return i.create(c,a)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}})(); diff --git a/Mac/WebKit/even-bg.png b/Mac/WebKit/even-bg.png new file mode 100644 index 0000000..3166a2b Binary files /dev/null and b/Mac/WebKit/even-bg.png differ diff --git a/Mac/WebKit/hmac-helper.js b/Mac/WebKit/hmac-helper.js new file mode 100644 index 0000000..f3ad041 --- /dev/null +++ b/Mac/WebKit/hmac-helper.js @@ -0,0 +1,122 @@ +// its different for app authentication and user authentication: +// for apps its id: mac_key_id and secret: mac_key, +// for users its id: access_token and secret:mac_key + +function getURL(url, http_method, callback, data, auth_header) { + $.ajax({ + beforeSend: function(xhr) { + if (data) xhr.setRequestHeader("Content-Length", data.length); + + if (auth_header) { // if is_set? auth_header + xhr.setRequestHeader("Authorization", auth_header); + } else { + var user_access_token = controller.stringForKey_("user_access_token"); + if (auth_header !== false && user_access_token) { + auth_header = makeAuthHeader( + url, + http_method, + controller.stringForKey_("user_mac_key"), + user_access_token + ) + xhr.setRequestHeader("Authorization", auth_header); + } + } + }, + url: url, + accepts: "application/vnd.tent.v0+json", + contentType: "application/vnd.tent.v0+json", + type: http_method, + complete: callback, + data: data, + processData: false, + error: function(xhr, ajaxOptions, thrownError) { + alert("getURL " + xhr.statusText + " " + http_method + " (" + url + "): '" + xhr.responseText + "'"); + } + }); +} + +function makeAuthHeader(url, http_method, mac_key, mac_key_id) { + + url = URI(url); + var nonce = makeid(8); + var time_stamp = parseInt((new Date).getTime() / 1000, 10); + + var port = url.port(); + if (!port) { + port = url.protocol() == "https" ? "443" : "80"; + } + + var normalizedRequestString = "" + + time_stamp + '\n' + + nonce + '\n' + + http_method + '\n' + + url.path() + url.search() + url.hash() + '\n' + + url.hostname() + '\n' + + port + '\n' + + '\n' ; + + var hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, mac_key); + hmac.update(normalizedRequestString); + var hash = hmac.finalize(); + var mac = hash.toString(CryptoJS.enc.Base64); + + return 'MAC id="' + mac_key_id + + '", ts="' + time_stamp + + '", nonce="' + nonce + + '", mac="' + mac + '"'; +} + +function makeid(len) { + var text = ""; + var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + + for( var i=0; i < len; i++ ) + text += possible.charAt(Math.floor(Math.random() * possible.length)); + + return text; +} + +function findProfileURL(entity, callback) { + $.ajax({ + url: entity, + type: "HEAD", + complete: function(resp) { + if(resp) { + var headers = resp.getAllResponseHeaders(); + var regex = /Link: <([^>]*)>; rel="https:\/\/tent.io\/rels\/profile"/; // FIXME: parse it! + var ret = headers.match(regex); + var profile_url = null; + if(ret && ret.length > 1) { + var profile_url = ret[1]; + if (profile_url == "/profile") { + profile_url = entity + "/profile"; + } + } + + if (profile_url) { + callback(profile_url); + } + } + }, + error: function(xhr, ajaxOptions, thrownError) { + alert("findProfileURL " + xhr.statusText + " (" + entity + "): " + xhr.responseText); + } + }); +} + +function mkApiRootPath(path) { + var api_root = controller.stringForKey_("api_root"); + if((api_root.substring(api_root.length - 1, api_root.length) != "/") && (path.substring(0, 1) != "/")) { + api_root += "/"; + } else if((api_root.substring(api_root.length - 1, api_root.length) == "/") && (path.substring(0, 1) == "/")) { + api_root = api_root.substring(0, api_root.length -1); + } + return api_root + path; +} + +function debug(string) { + if (typeof string == "Object") { + string = JSON.stirngify(string); + } + alert("DEBUG: " + string); +} \ No newline at end of file diff --git a/Mac/WebKit/hmac-sha256.js b/Mac/WebKit/hmac-sha256.js new file mode 100644 index 0000000..a143d84 --- /dev/null +++ b/Mac/WebKit/hmac-sha256.js @@ -0,0 +1,17 @@ +/* +CryptoJS v3.0.2 +code.google.com/p/crypto-js +(c) 2009-2012 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +var CryptoJS=CryptoJS||function(h,i){var e={},f=e.lib={},l=f.Base=function(){function a(){}return{extend:function(j){a.prototype=this;var d=new a;j&&d.mixIn(j);d.$super=this;return d},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var d in a)a.hasOwnProperty(d)&&(this[d]=a[d]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.$super.extend(this)}}}(),k=f.WordArray=l.extend({init:function(a,j){a= +this.words=a||[];this.sigBytes=j!=i?j:4*a.length},toString:function(a){return(a||m).stringify(this)},concat:function(a){var j=this.words,d=a.words,c=this.sigBytes,a=a.sigBytes;this.clamp();if(c%4)for(var b=0;b>>2]|=(d[b>>>2]>>>24-8*(b%4)&255)<<24-8*((c+b)%4);else if(65535>>2]=d[b>>>2];else j.push.apply(j,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,b=this.sigBytes;a[b>>>2]&=4294967295<<32-8*(b%4);a.length=h.ceil(b/4)},clone:function(){var a= +l.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var b=[],d=0;d>>2]>>>24-8*(c%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join("")},parse:function(a){for(var b=a.length,d=[],c=0;c>>3]|=parseInt(a.substr(c,2),16)<<24-4*(c%8);return k.create(d,b/2)}},q=o.Latin1={stringify:function(a){for(var b= +a.words,a=a.sigBytes,d=[],c=0;c>>2]>>>24-8*(c%4)&255));return d.join("")},parse:function(a){for(var b=a.length,d=[],c=0;c>>2]|=(a.charCodeAt(c)&255)<<24-8*(c%4);return k.create(d,b)}},r=o.Utf8={stringify:function(a){try{return decodeURIComponent(escape(q.stringify(a)))}catch(b){throw Error("Malformed UTF-8 data");}},parse:function(a){return q.parse(unescape(encodeURIComponent(a)))}},b=f.BufferedBlockAlgorithm=l.extend({reset:function(){this._data=k.create(); +this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=r.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var b=this._data,d=b.words,c=b.sigBytes,e=this.blockSize,g=c/(4*e),g=a?h.ceil(g):h.max((g|0)-this._minBufferSize,0),a=g*e,c=h.min(4*a,c);if(a){for(var f=0;fg;)e(b)&&(8>g&&(k[g]=f(h.pow(b,0.5))),o[g]=f(h.pow(b,1/3)),g++),b++})();var m=[],l=l.SHA256=e.extend({_doReset:function(){this._hash=f.create(k.slice(0))},_doProcessBlock:function(e,f){for(var b=this._hash.words,g=b[0],a=b[1],j=b[2],d=b[3],c=b[4],h=b[5],l=b[6],k=b[7],n=0;64> +n;n++){if(16>n)m[n]=e[f+n]|0;else{var i=m[n-15],p=m[n-2];m[n]=((i<<25|i>>>7)^(i<<14|i>>>18)^i>>>3)+m[n-7]+((p<<15|p>>>17)^(p<<13|p>>>19)^p>>>10)+m[n-16]}i=k+((c<<26|c>>>6)^(c<<21|c>>>11)^(c<<7|c>>>25))+(c&h^~c&l)+o[n]+m[n];p=((g<<30|g>>>2)^(g<<19|g>>>13)^(g<<10|g>>>22))+(g&a^g&j^a&j);k=l;l=h;h=c;c=d+i|0;d=j;j=a;a=g;g=i+p|0}b[0]=b[0]+g|0;b[1]=b[1]+a|0;b[2]=b[2]+j|0;b[3]=b[3]+d|0;b[4]=b[4]+c|0;b[5]=b[5]+h|0;b[6]=b[6]+l|0;b[7]=b[7]+k|0},_doFinalize:function(){var e=this._data,f=e.words,b=8*this._nDataBytes, +g=8*e.sigBytes;f[g>>>5]|=128<<24-g%32;f[(g+64>>>9<<4)+15]=b;e.sigBytes=4*f.length;this._process()}});i.SHA256=e._createHelper(l);i.HmacSHA256=e._createHmacHelper(l)})(Math); +(function(){var h=CryptoJS,i=h.enc.Utf8;h.algo.HMAC=h.lib.Base.extend({init:function(e,f){e=this._hasher=e.create();"string"==typeof f&&(f=i.parse(f));var h=e.blockSize,k=4*h;f.sigBytes>k&&(f=e.finalize(f));for(var o=this._oKey=f.clone(),m=this._iKey=f.clone(),q=o.words,r=m.words,b=0;b + + + Tentia + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Mac/WebKit/index_oauth.html b/Mac/WebKit/index_oauth.html new file mode 100644 index 0000000..ccdb02c --- /dev/null +++ b/Mac/WebKit/index_oauth.html @@ -0,0 +1,16 @@ + + + + Tentia + + + + + + + + + + + + \ No newline at end of file diff --git a/Mac/WebKit/jQuery-Plugins.js b/Mac/WebKit/jQuery-Plugins.js new file mode 100644 index 0000000..c865d25 --- /dev/null +++ b/Mac/WebKit/jQuery-Plugins.js @@ -0,0 +1,330 @@ + +(function ($) { + $.format = (function () { + + var parseMonth = function(value){ + + switch(value){ + case "Jan": + return "01"; + break; + case "Feb": + return "02"; + break; + case "Mar": + return "03"; + break; + case "Apr": + return "04"; + break; + case "May": + return "05"; + break; + case "Jun": + return "06"; + break; + case "Jul": + return "07"; + break; + case "Aug": + return "08"; + break; + case "Sep": + return "09"; + break; + case "Oct": + return "10"; + break; + case "Nov": + return "11"; + break; + case "Dec": + return "12"; + break; + default: + return value; + } + }; + + var parseTime = function(value){ + var retValue = value; + if(retValue.indexOf(".") != -1){ + retValue = retValue.substring(0, retValue.indexOf(".")); + } + + var values3 = retValue.split(":"); + + if(values3.length == 3){ + hour = values3[0]; + minute = values3[1]; + second = values3[2]; + + return { + time: retValue, + hour: hour, + minute: minute, + second: second + }; + } else { + return { + time: "", + hour: "", + minute: "", + second: "" + }; + } + }; + + return { + date: function(value, format){ + //value = new java.util.Date() + //2009-12-18 10:54:50.546 + try{ + var values = value.split(" "); + var year = null; + var month = null; + var dayOfMonth = null; + var time = null; //json, time, hour, minute, second + + switch(values.length){ + case 6://Wed Jan 13 10:43:41 CET 2010 + year = values[5]; + month = parseMonth(values[1]); + dayOfMonth = values[2]; + time = parseTime(values[3]); + break; + case 2://2009-12-18 10:54:50.546 + var values2 = values[0].split("-"); + year = values2[0]; + month = values2[1]; + dayOfMonth = values2[2]; + time = parseTime(values[1]); + break; + default: + return value; + } + + + var pattern = ""; + var retValue = ""; + + for(i = 0; i < format.length; i++){ + var currentPattern = format.charAt(i); + pattern += currentPattern; + switch(pattern){ + case "dd": + retValue += dayOfMonth; + pattern = ""; + break; + case "MM": + retValue += month; + pattern = ""; + break; + case "yyyy": + retValue += year; + pattern = ""; + break; + case "HH": + retValue += time.hour; + pattern = ""; + break; + case "hh": + retValue += time.hour; + pattern = ""; + break; + case "mm": + retValue += time.minute; + pattern = ""; + break; + case "ss": + retValue += time.second; + pattern = ""; + break; + case " ": + retValue += currentPattern; + pattern = ""; + break; + case "/": + retValue += currentPattern; + pattern = ""; + break; + case ":": + retValue += currentPattern; + pattern = ""; + break; + default: + if(pattern.length == 2 && pattern.indexOf("y") != 0){ + retValue += pattern.substring(0, 1); + pattern = pattern.substring(1, 2); + } else if((pattern.length == 3 && pattern.indexOf("yyy") == -1)){ + pattern = ""; + } + } + } + return retValue; + } catch(e) { + return value; + } + } + }; + })(); +}(jQuery)); + + +$(document).ready(function() { + $(".shortDateFormat").each(function(idx, elem) { + if ($(elem).is(":input")){ + $(elem).val($.format.date($(elem).val(), 'dd/MM/yyyy')); + } else { + $(elem).text($.format.date($(elem).text(), 'dd/MM/yyyy')); + } + }); + $(".longDateFormat").each(function(idx, elem) { + if ($(elem).is(":input")){ + $(elem).val($.format.date($(elem).val(), 'dd/MM/yyyy hh:mm:ss')); + } else { + $(elem).text($.format.date($(elem).text(), 'dd/MM/yyyy hh:mm:ss')); + } + }); +}); + +/* + * timeago: a jQuery plugin, version: 0.8.2 (2010-02-16) + * @requires jQuery v1.2.3 or later + * + * Timeago is a jQuery plugin that makes it easy to support automatically + * updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago"). + * + * For usage and examples, visit: + * http://timeago.yarp.com/ + * + * Licensed under the MIT: + * http://www.opensource.org/licenses/mit-license.php + * + * Copyright (c) 2008-2010, Ryan McGeary (ryanonjavascript -[at]- mcgeary [*dot*] org) + */ +(function($) { + $.timeago = function(timestamp) { + if (timestamp instanceof Date) return inWords(timestamp); + else if (typeof timestamp == "string") return inWords($.timeago.parse(timestamp)); + else return inWords($.timeago.datetime(timestamp)); + }; + var $t = $.timeago; + + $.extend($.timeago, { + settings: { + refreshMillis: 60000, + allowFuture: false, + strings: { + prefixAgo: null, + prefixFromNow: null, + suffixAgo: "ago", + suffixFromNow: "from now", + ago: null, // DEPRECATED, use suffixAgo + fromNow: null, // DEPRECATED, use suffixFromNow + seconds: "less than a minute", + minute: "about a minute", + minutes: "%d minutes", + hour: "about an hour", + hours: "about %d hours", + day: "a day", + days: "%d days", + month: "about a month", + months: "%d months", + year: "about a year", + years: "%d years" + } + }, + inWords: function(distanceMillis) { + var $l = this.settings.strings; + var prefix = $l.prefixAgo; + var suffix = $l.suffixAgo || $l.ago; + if (this.settings.allowFuture) { + if (distanceMillis < 0) { + prefix = $l.prefixFromNow; + suffix = $l.suffixFromNow || $l.fromNow; + } + distanceMillis = Math.abs(distanceMillis); + } + + var seconds = distanceMillis / 1000; + var minutes = seconds / 60; + var hours = minutes / 60; + var days = hours / 24; + var years = days / 365; + + var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) || + seconds < 90 && substitute($l.minute, 1) || + minutes < 45 && substitute($l.minutes, Math.round(minutes)) || + minutes < 90 && substitute($l.hour, 1) || + hours < 24 && substitute($l.hours, Math.round(hours)) || + hours < 48 && substitute($l.day, 1) || + days < 30 && substitute($l.days, Math.floor(days)) || + days < 60 && substitute($l.month, 1) || + days < 365 && substitute($l.months, Math.floor(days / 30)) || + years < 2 && substitute($l.year, 1) || + substitute($l.years, Math.floor(years)); + + return $.trim([prefix, words, suffix].join(" ")); + }, + parse: function(iso8601) { + var s = $.trim(iso8601); + s = s.replace(/-/,"/").replace(/-/,"/"); + s = s.replace(/T/," ").replace(/Z/," UTC"); + s = s.replace(/([\+-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400 + return new Date(s); + }, + datetime: function(elem) { + // jQuery's `is()` doesn't play well with HTML5 in IE + var isTime = $(elem).get(0).tagName.toLowerCase() == "time"; // $(elem).is("time"); + var iso8601 = isTime ? $(elem).attr("datetime") : $(elem).attr("title"); + return $t.parse(iso8601); + } + }); + + $.fn.timeago = function() { + var self = this; + self.each(refresh); + + var $s = $t.settings; + if ($s.refreshMillis > 0) { + setInterval(function() { self.each(refresh); }, $s.refreshMillis); + } + return self; + }; + + function refresh() { + var data = prepareData(this); + if (!isNaN(data.datetime)) { + $(this).text(inWords(data.datetime)); + } + return this; + } + + function prepareData(element) { + element = $(element); + if (!element.data("timeago")) { + element.data("timeago", { datetime: $t.datetime(element) }); + var text = $.trim(element.text()); + if (text.length > 0) element.attr("title", text); + } + return element.data("timeago"); + } + + function inWords(date) { + return $t.inWords(distance(date)); + } + + function distance(date) { + return (new Date().getTime() - date.getTime()); + } + + function substitute(stringOrFunction, value) { + var string = $.isFunction(stringOrFunction) ? stringOrFunction(value) : stringOrFunction; + return string.replace(/%d/i, value); + } + + // fix for IE6 suckage + document.createElement("abbr"); + document.createElement("time"); +})(jQuery); diff --git a/Mac/WebKit/jQuery.js b/Mac/WebKit/jQuery.js new file mode 100644 index 0000000..7c24308 --- /dev/null +++ b/Mac/WebKit/jQuery.js @@ -0,0 +1,154 @@ +/*! + * jQuery JavaScript Library v1.4.2 + * http://jquery.com/ + * + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2010, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Sat Feb 13 22:33:48 2010 -0500 + */ +(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, +Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& +(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, +a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== +"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, +function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
a"; +var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, +parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= +false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= +s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, +applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; +else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, +a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== +w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, +cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= +c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); +a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, +function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); +k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), +C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= +e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& +f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; +if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", +e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, +"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, +d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, +e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); +t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| +g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, +CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, +g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, +text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, +setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= +h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== +"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, +h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& +q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; +if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); +(function(){var g=s.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: +function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= +{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== +"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", +d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? +a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== +1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= +c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, +wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, +prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, +this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); +return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, +""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); +return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", +""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= +c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? +c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= +function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= +Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, +"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= +a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= +a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== +"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, +serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), +function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, +global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& +e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? +"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== +false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= +false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", +c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| +d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); +g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== +1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== +"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; +if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== +"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| +c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; +this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= +this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, +e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
"; +a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); +c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, +d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- +f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": +"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in +e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff --git a/Mac/WebKit/odd-bg.png b/Mac/WebKit/odd-bg.png new file mode 100644 index 0000000..b822a14 Binary files /dev/null and b/Mac/WebKit/odd-bg.png differ diff --git a/Mac/WebKit/pin.png b/Mac/WebKit/pin.png new file mode 100644 index 0000000..32ce008 Binary files /dev/null and b/Mac/WebKit/pin.png differ diff --git a/Mac/WebKit/sprite-icons.png b/Mac/WebKit/sprite-icons.png new file mode 100644 index 0000000..7336e51 Binary files /dev/null and b/Mac/WebKit/sprite-icons.png differ diff --git a/Mac/main.m b/Mac/main.m new file mode 100644 index 0000000..951da87 --- /dev/null +++ b/Mac/main.m @@ -0,0 +1,14 @@ +// +// main.m +// Tentia +// +// Created by Jeena on 16.04.10. +// Licence: BSD (see attached LICENCE.txt file). +// + +#import + +int main(int argc, char *argv[]) +{ + return NSApplicationMain(argc, (const char **) argv); +} diff --git a/WebKit/Constants.js b/WebKit/Constants.js new file mode 100644 index 0000000..179892e --- /dev/null +++ b/WebKit/Constants.js @@ -0,0 +1,21 @@ +// +// Constants.js +// Tentia +// +// Created by Jeena on 19.09.11. +// Licence: BSD (see attached LICENCE.txt file). +// + + +OAUTH_CONSUMER_KEY = "JPmU8KJhiBKfpohCiWLg" +OAUTH_CONSUMER_SECRET = "jtfSrnDrRcUnL1nqTMcAW0055m63EMClmkxhiBjQ" +OAUTH_SIGNATURE_METHOD = "HMAC-SHA1" +OAUTH_REQUEST_TOKEN_URL = "http://twitter.com/oauth/request_token" +OAUTH_USER_AUTHORIZATION_URL = "http://twitter.com/oauth/authorize" +OAUTH_ACCESS_TOKEN_URL = "http://twitter.com/oauth/access_token" +OAUTH_SERVICE_NAME = "twitter.com" + +APP_NAME = "Tentia"; + +API_PATH = "http://api.twitter.com/1/"; +WEBSITE_PATH = "http://twitter.com/"; diff --git a/WebKit/ConversationView.js b/WebKit/ConversationView.js new file mode 100644 index 0000000..e69de29 diff --git a/WebKit/Core.js b/WebKit/Core.js new file mode 100644 index 0000000..475c32f --- /dev/null +++ b/WebKit/Core.js @@ -0,0 +1,457 @@ +// +// Core.js +// Tentia +// +// Created by Jeena on 15.04.10. +// Licence: BSD (see attached LICENCE.txt file). +// + +function Core(action) { + this.max_length = 200; + // this.timeout = 2 * 60 * 1000; + this.timeout = 10 * 1000; // every 10 seconds + this.action = action; + this.getNewData(); + this.unread_mentions = 0; + this.since_id = null; + this.since_id_entity = null; + this.since_time = 0; + + this.body = document.createElement("ol"); + this.body.className = this.action; + this.cache = {}; + this.is_not_init = false; + + var _this = this; + setInterval(function() { _this.getNewData() }, this.timeout); +} + +Core.prototype.newStatus = function(status) { + + if(status != null && status.length > 0) { + for(var i = status.length-1, c=0; i>=c; --i) { + if(this.body.childNodes.length > 0) { + if(this.body.childNodes.length > this.max_length) { + this.body.removeChild(this.body.lastChild); + } + this.body.insertBefore(this.getItem(status[i]), this.body.firstChild); + } else { + this.body.appendChild(this.getItem(status[i])); + } + } + } + + if(this.action == "mentions" && this.is_not_init) { + this.unread_mentions += status.length; + controller.unreadMentions_(this.unread_mentions); + } + this.is_not_init = true; +} + +Core.prototype.logout = function() { + this.body.innerHTML = ""; +} + +Core.prototype.getItem = function(status) { + + var _this = this; + this.since_id = status.id; + this.since_id_entity = status.entity; + + var template = this.getTemplate(); + + template.reply_to.onclick = function() { + var mentions = []; + for (var i = 0; i < status.mentions.length; i++) { + var mention = status.mentions[i]; + if(mention.entity != controller.stringForKey_("entity")) + mentions.push(mention); + }; + replyTo(status.entity, status.id, mentions); + return false; + } + //template.retweet.onclick = function() { template.retweet.className = "hidden"; _this.retweet(status.id_str, template.item); return false; } + + template.username.innerText = status.entity; + template.username.href = status.entity; // FIXME open profile + + findProfileURL(status.entity, function(profile_url) { + if (profile_url) { + getURL(profile_url, "GET", function(resp) { + var profile = JSON.parse(resp.responseText); + var basic = profile["https://tent.io/types/info/basic/v0.1.0"]; + + if (profile && basic) { + if(basic.name) { + template.username.title = template.username.innerText; + template.username.innerText = basic.name; + } + if(basic.avatar_url) { + template.image.onerror = function() { template.image.src = 'default-avatar.png' }; + template.image.src = basic.avatar_url; + } + } + }, null, false); // do not send auth-headers + } + }); + + template.in_reply.parentNode.className = "hidden"; + + template.message.innerHTML = replaceUsernamesWithLinks(replaceURLWithHTMLLinks(status.content.text, status.entities, template.message)); + findMentions(template.message, status.mentions); + + var time = document.createElement("abbr"); + time.innerText = ISODateString(new Date(status.published_at * 1000)); + time.title = time.innerText; + time.className = "timeago"; + $(time).timeago(); + template.ago.appendChild(time); + + // {"type":"Point","coordinates":[57.10803113,12.25854746]} + if (status.content && status.content.location && status.content.location.type == "Point") { + template.geo.href = "http://maps.google.com/maps?q=" + status.content.location.coordinates[0] + "," + status.content.location.coordinates[1]; + template.geo.style.display = ""; + } + + template.source.href = status.app.url; + template.source.innerHTML = status.app.name; + template.source.title = status.app.url; + + return template.item; +} + +Core.prototype.getTemplate = function() { + + if(this.template == "undefined") { + return jQuery.extend(true, {}, this.template); + } + + var a = document.createElement("a"); + + var item = document.createElement("li"); + + var reply_to = a.cloneNode(); + reply_to.className = "reply_to" + reply_to.innerText = " "; + reply_to.href = "#"; + item.appendChild(reply_to); + + var retweet = a.cloneNode(); + retweet.className = "retweet"; + retweet.innerText = " "; + retweet.href = "#"; + // item.appendChild(retweet); // FIXME + + + var image = document.createElement("img"); + image.className = "image"; + image.src = "default-avatar.png"; + image.onmousedown = function(e) { e.preventDefault(); }; + item.appendChild(image); + + var image_username = a.cloneNode(); + image.appendChild(image_username); + + var data = document.createElement("div"); + data.className = "data"; + item.appendChild(data); + + var head = document.createElement("h1"); + data.appendChild(head); + + var username = a.cloneNode(); + head.appendChild(username); + + var in_reply = document.createElement("span"); + in_reply.className = "reply"; + head.appendChild(in_reply); + + var space = document.createTextNode(" "); + head.appendChild(space); + + var geo = document.createElement("a"); + geo.style.display = "none"; + head.appendChild(geo); + + var pin = document.createElement("img"); + pin.src = "pin.png"; + pin.alt = "Map link"; + geo.appendChild(pin); + + var in_reply_text = document.createTextNode(" in reply to "); + in_reply.appendChild(in_reply_text) + + var in_reply_a = a.cloneNode(); + in_reply.appendChild(in_reply_a); + + var message = document.createElement("p"); + message.className = "message"; + data.appendChild(message); + + var images = document.createElement("p") + images.className = "images"; + data.appendChild(images); + + var date = message.cloneNode(); + date.className = "date"; + data.appendChild(date); + + var ago = a.cloneNode(); + date.appendChild(ago); + + var from = document.createTextNode(" from "); + date.appendChild(from) + + var source = document.createElement("a"); + source.className = "source"; + date.appendChild(source) + + this.template = { + item: item, + reply_to: reply_to, + retweet: retweet, + image: image, + username: username, + in_reply: in_reply_a, + message: message, + ago: ago, + source: source, + geo: geo, + images: images + } + + return jQuery.extend(true, {}, this.template); +} + +Core.prototype.getNewData = function() { + + var those = this; + var url = URI(mkApiRootPath("/posts")); + url.addSearch("post_types", "https://tent.io/types/post/status/v0.1.0"); + url.addSearch("limit", this.max_length); + if(this.since_id) { + url.addSearch("since_id", this.since_id); + url.addSearch("since_id_entity", this.since_id_entity); + } + + if (this.action == "mentions") { + url.addSearch("mentioned_entity", controller.stringForKey_("entity")); + } + + var http_method = "GET"; + var callback = function(resp) { + + try { + var json = JSON.parse(resp.responseText) + } catch (e) { + //alert(resp.responseText); + alert(url + " JSON parse error"); + throw e; + } + + those.newStatus(json); + } + + var data = null; + + if (controller.stringForKey_("user_access_token")) { + getURL(url.toString(), http_method, callback, data); // FIXME: error callback + } +} + + +Core.prototype.sendNewMessage = function(content, in_reply_to_status_id, in_reply_to_entity) { + + var _this = this; + + var url = URI(mkApiRootPath("/posts")); + + var http_method = "POST"; + var callback = function(data) { _this.getNewData(); } + + var data = { + "type": "https://tent.io/types/post/status/v0.1.0", + "published_at": (new Date().getTime() / 1000), + "permissions": { + "public": true + }, + "content": { + "text": content, + }, + }; + + var mentions = parseMentions(content, in_reply_to_status_id, in_reply_to_entity); + if (mentions.length > 0) { + data["mentions"] = mentions; + } + + getURL(url.toString(), http_method, callback, JSON.stringify(data)); // FIXME: error callback +} + +/* Helper functions */ + +function replaceURLWithHTMLLinks(text, entities, message_node) { + var exp = /(([^\^]https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_()|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; + return text.replace(exp, "$1"); +} + +function replaceUsernamesWithLinks(text, mentions) { + return text; // FIXME! + var username = /(^|\s)(\^)(\w+)/ig; + var hash = /(^|\s)(#)(\w+)/ig; + text = text.replace(username, "$1$2$3"); + return text.replace(hash, "$1$2$3"); +} + +function replyTo(entity, status_id, mentions) { + var string = "^" + entity.replace("https://", "") + " "; + for (var i = 0; i < mentions.length; i++) { + var e = mentions[i].entity.replace("https://", ""); + if(string.indexOf(e) == -1) string += "^" + e + " "; + } + controller.openNewMessageWindowInReplyTo_statusId_withString_(entity, status_id, string); +} + +function loadPlugin(url) { + var plugin = document.createElement("script"); + plugin.type = "text/javascript"; + plugin.src = url; + document.getElementsByTagName("head")[0].appendChild(plugin); +} + +String.prototype.startsWith = function(prefix) { + return this.indexOf(prefix) === 0; +} + +String.prototype.endsWith = function(suffix) { + return this.match(suffix+"$") == suffix; +}; + +function getUrlVars(url) +{ + var vars = [], hash; + if(url.indexOf("#") > -1) url = url.slice(0, url.indexOf("#")); + var hashes = url.slice(url.indexOf('?') + 1).split('&'); + for(var i = 0; i < hashes.length; i++) + { + hash = hashes[i].split('='); + vars.push(hash[0]); + vars[hash[0]] = hash[1]; + } + return vars; +} + +function replaceShortened(url, message_node) { + var api = "http://api.bitly.com"; + if(url.startsWith("http://j.mp/")) { + api = "http://api.j.mp"; + } + + var api_url = api + "/v3/expand?format=json&apiKey=R_4fc2a1aa461d076556016390fa6400f6&login=twittia&shortUrl=" + url; // FIXME: new api key + + $.ajax({ + url: api_url, + success: function(data) { + var new_url = data.data.expand[0].long_url; + if (new_url) { + var regex = new RegExp(url, "g"); + message_node.innerHTML = message_node.innerHTML.replace(regex, new_url); + } + }, + error:function (xhr, ajaxOptions, thrownError) { + alert(xhr.status); + alert(thrownError); + } + }); +} + +function findMentions(node, mentions) { + var text = node.innerHTML; + var mentions_in_text = []; + var res = text.match(/(\^\S+)/ig); + + if (res) { + for (var i = 0; i < res.length; i++) { + var name = res[i]; + var e = name.substring(1); + if (e.substring(0,7) != "http://" && e.substring(0,8) != "https://") { + e = "https://" + e; + } + for (var j = 0; j < mentions.length; j++) { + var m = mentions[j]; + if(m.entity.startsWith(e)) { + mentions_in_text.push({ + entity: m.entity, + text: name + }); + } + } + } + } + + for (var i = 0; i < mentions_in_text.length; i++) { + var mention = mentions_in_text[i]; + + (function(mention) { // need this closure + findProfileURL(mention.entity, function(profile_url) { + if (profile_url) { + getURL(profile_url, "GET", function(resp) { + var profile = JSON.parse(resp.responseText); + var basic = profile["https://tent.io/types/info/basic/v0.1.0"]; + + if (profile && basic) { + if(basic.name) { + var new_text = node.innerHTML.replace( + mention.text, + "" + + basic.name + + "" + ); + node.innerHTML = new_text; + } + } + }, null, false); // do not send auth-headers + } + }); + })(mention); + } +} + +function parseMentions(text, post_id, entity) { + var mentions = []; + + if (post_id && entity) { + mentions.push({ + post: post_id, + entity: entity + }) + } + + var res = text.match(/(\^\S+)/ig); + + if (res) { + for (var i = 0; i < res.length; i++) { + var e = res[i].substring(1); + if (e.substring(0,7) != "http://" && e.substring(0,8) != "https://") { + e = "https://" + e; + } + if (e != entity) { + mentions.push({entity:e}); + } + } + } + + return mentions; +} + +function ISODateString(d){ + function pad(n){return n<10 ? '0'+n : n} + return d.getUTCFullYear()+'-' + + pad(d.getUTCMonth()+1)+'-' + + pad(d.getUTCDate())+'T' + + pad(d.getUTCHours())+':' + + pad(d.getUTCMinutes())+':' + + pad(d.getUTCSeconds())+'Z' +} + +var tentia_instance; diff --git a/WebKit/OauthImplementation.js b/WebKit/OauthImplementation.js new file mode 100644 index 0000000..09e40bb --- /dev/null +++ b/WebKit/OauthImplementation.js @@ -0,0 +1,142 @@ +// +// OauthImplementation.js +// Tentia +// +// Created by Jeena on 19.09.11. +// Licence: BSD (see attached LICENCE.txt file). +// + +function getUrlVars(url) { + var vars = [], hash; + if(url.indexOf("#") > -1) url = url.slice(0, url.indexOf("#")); + var hashes = url.slice(url.indexOf('?') + 1).split('&'); + for(var i = 0; i < hashes.length; i++) + { + hash = hashes[i].split('='); + vars.push(hash[0]); + vars[hash[0]] = hash[1]; + } + return vars; +} + +function OauthImplementation() { + this.app_info = { + "id": null, + "name": "Tentia", + "description": "A small TentStatus client.", + "url": "http://jabs.nu/Tentia/", + "icon": "http://jabs.nu/Tentia/icon.png", + "redirect_uris": [ + "tentia://oauthtoken" + ], + "scopes": { + "read_posts": "Uses posts to show them in a list", + "write_posts": "Posts on users behalf" + } + }; + this.register_data = null; + this.profile = null; + this.state = null; + + this.authenticate(); +} + +OauthImplementation.prototype.authenticate = function() { + this.entity = controller.stringForKey_("entity"); + this.requestProfileURL(this.entity); +} + +OauthImplementation.prototype.apiRoot = function() { + return this.profile["https://tent.io/types/info/core/v0.1.0"]["servers"][0]; +} + +OauthImplementation.prototype.requestProfileURL = function (entity) { + var those = this; + findProfileURL(entity, function(profile_url) { + those.register(profile_url); + }); +} + +OauthImplementation.prototype.register = function (url) { + var those = this; + getURL(url, "GET", function(resp) { + those.profile = JSON.parse(resp.responseText); + controller.setString_forKey_(those.apiRoot(), "api_root"); + var callback = function(resp) { + var data = JSON.parse(resp.responseText); + those.authRequest(data); + } + getURL(mkApiRootPath("/apps"), "POST", callback, JSON.stringify(those.app_info)); + }); +} + +OauthImplementation.prototype.authRequest = function(register_data) { + // id + // mac_key_id + // mac_key + // mac_algorithm + this.register_data = register_data; + + // Needed for later App Registration Modification + controller.setString_forKey_(register_data["mac_key"], "app_mac_key"); + controller.setString_forKey_(register_data["mac_key_id"], "app_mac_key_id"); + controller.setString_forKey_(register_data["id"], "app_id"); + controller.setString_forKey_(register_data["mac_algorithm"], "app_mac_algorithm"); + + this.state = makeid(19); + var auth = "/oauth/authorize?client_id=" + register_data["id"] + + "&redirect_uri=" + escape(this.app_info["redirect_uris"][0]) + + "&scope=" + Object.keys(this.app_info["scopes"]).join(",") + + "&state=" + this.state + + "&tent_post_types=" + escape("https://tent.io/types/posts/status/v0.1.0"); + + controller.openURL_(this.apiRoot() + auth); +} + +OauthImplementation.prototype.requestAccessToken = function(responseBody) { + // /oauthtoken?code=51d0115b04d1ed94001dde751c5b360f&state=aQfH1VEohYsQr86qqyv + var urlVars = getUrlVars(responseBody); + if(this.state && this.state != "" && urlVars["state"] == this.state) { + + var url = mkApiRootPath("/apps/") + this.register_data["id"] + "/authorizations"; + + var requestBody = JSON.stringify({ + 'code' : urlVars["code"], + 'token_type' : "mac" + }); + + var those = this; + var http_method = "POST"; + var callback = function(resp) { + those.requestAccessTokenTicketFinished(resp.responseText); + }; + + var auth_header = makeAuthHeader( + url, + http_method, + controller.stringForKey_("app_mac_key"), + controller.stringForKey_("app_mac_key_id") + ); + + getURL(url, http_method, callback, requestBody, auth_header); + + } else { + alert("State is not the same: {" + this.state + "} vs {" + urlVars["state"] + "}") + } + + this.state = null; // reset the state +} + +OauthImplementation.prototype.requestAccessTokenTicketFinished = function(responseBody) { + + var access = JSON.parse(responseBody); + + controller.setString_forKey_(access["access_token"], "user_access_token"); + controller.setString_forKey_(access["mac_key"], "user_mac_key"); + controller.setString_forKey_(access["mac_algorithm"], "user_mac_algorithm"); + controller.setString_forKey_(access["token_type"], "user_token_type"); + + controller.loggedIn(); +} + +var tentia_oauth; \ No newline at end of file diff --git a/WebKit/TimelineView.js b/WebKit/TimelineView.js new file mode 100644 index 0000000..e69de29 diff --git a/WebKit/URI.min.js b/WebKit/URI.min.js new file mode 100644 index 0000000..80b30f0 --- /dev/null +++ b/WebKit/URI.min.js @@ -0,0 +1,70 @@ +/*! URI.js v1.7.4 http://medialize.github.com/URI.js/ */ +/* build contains: IPv6.js, punycode.js, SecondLevelDomains.js, URI.js, URITemplate.js */ +(function(){("undefined"!==typeof module&&module.exports?module.exports:window).IPv6={best:function(d){var d=d.toLowerCase().split(":"),j=d.length,h=8;""===d[0]&&""===d[1]&&""===d[2]?(d.shift(),d.shift()):""===d[0]&&""===d[1]?d.shift():""===d[j-1]&&""===d[j-2]&&d.pop();j=d.length;-1!==d[j-1].indexOf(".")&&(h=7);var i;for(i=0;if;f++)if("0"===j[0]&&1f&&(j=u,f=s)):"0"==d[i]&&(g=!0,u=i,s=1);s>f&&(j=u,f=s);1>>10&1023|55296),a=56320|a&1023);return b+=z(a)}).join("")}function s(e, +c,k){for(var d=0,e=k?w(e/b):e>>1,e=e+w(e/c);e>x*r>>1;d+=n)e=w(e/x);return w(d+(x+1)*e/(e+a))}function u(a){var b=[],c=a.length,d,g=0,t=k,i=e,m,h,l,q,v;m=a.lastIndexOf(B);0>m&&(m=0);for(h=0;h=c&&j("invalid-input");q=a.charCodeAt(m++);q=10>q-48?q-22:26>q-65?q-65:26>q-97?q-97:n;(q>=n||q>w((y-g)/d))&&j("overflow");g+=q*d;v=l<=i?p:l>=i+r?r:l-i;if(qw(y/q)&&j("overflow");d*= +q}d=b.length+1;i=s(g-h,d,0==h);w(g/d)>y-t&&j("overflow");t+=w(g/d);g%=d;b.splice(g++,0,t)}return f(b)}function g(a){var b,c,d,g,f,t,m,h,l,q=[],v,u,x,a=i(a);v=a.length;b=k;c=0;f=e;for(t=0;tl&&q.push(z(l));for((d=g=q.length)&&q.push(B);d=b&&lw((y-c)/u)&&j("overflow");c+=(m-b)*u;b=m;for(t=0;ty&&j("overflow"),l==b){h=c;for(m=n;;m+=n){l=m<=f?p:m>=f+r?r:m-f;if(h +l+x%h)-0));h=w(x/h)}q.push(z(h+22+75*(26>h)-0));f=s(c,u,d==g);c=0;++d}++c;++b}return q.join("")}var c,m="function"==typeof define&&"object"==typeof define.amd&&define.amd&&define,l="object"==typeof exports&&exports,q="object"==typeof module&&module,y=2147483647,n=36,p=1,r=26,a=38,b=700,e=72,k=128,B="-",t=/[^ -~]/,v=/^xn--/,C={overflow:"Overflow: input needs wider integers to process.",ucs2decode:"UCS-2(decode): illegal sequence",ucs2encode:"UCS-2(encode): illegal value","not-basic":"Illegal input >= 0x80 (not a basic code point)", +"invalid-input":"Invalid input"},x=n-p,w=Math.floor,z=String.fromCharCode,A;c={version:"0.3.0",ucs2:{decode:i,encode:f},decode:u,encode:g,toASCII:function(a){return h(a.split("."),function(a){return t.test(a)?"xn--"+g(a):a}).join(".")},toUnicode:function(a){return h(a.split("."),function(a){return v.test(a)?u(a.slice(4).toLowerCase()):a}).join(".")}};if(l)if(q&&q.exports==l)q.exports=c;else for(A in c)c.hasOwnProperty(A)&&(l[A]=c[A]);else m?define("punycode",c):d.punycode=c})(this); +(function(){var d={list:{ac:"com|gov|mil|net|org",ae:"ac|co|gov|mil|name|net|org|pro|sch",af:"com|edu|gov|net|org",al:"com|edu|gov|mil|net|org",ao:"co|ed|gv|it|og|pb",ar:"com|edu|gob|gov|int|mil|net|org|tur",at:"ac|co|gv|or",au:"asn|com|csiro|edu|gov|id|net|org",ba:"co|com|edu|gov|mil|net|org|rs|unbi|unmo|unsa|untz|unze",bb:"biz|co|com|edu|gov|info|net|org|store|tv",bh:"biz|cc|com|edu|gov|info|net|org",bn:"com|edu|gov|net|org",bo:"com|edu|gob|gov|int|mil|net|org|tv",br:"adm|adv|agr|am|arq|art|ato|b|bio|blog|bmd|cim|cng|cnt|com|coop|ecn|edu|eng|esp|etc|eti|far|flog|fm|fnd|fot|fst|g12|ggf|gov|imb|ind|inf|jor|jus|lel|mat|med|mil|mus|net|nom|not|ntr|odo|org|ppg|pro|psc|psi|qsl|rec|slg|srv|tmp|trd|tur|tv|vet|vlog|wiki|zlg", +bs:"com|edu|gov|net|org",bz:"du|et|om|ov|rg",ca:"ab|bc|mb|nb|nf|nl|ns|nt|nu|on|pe|qc|sk|yk",ck:"biz|co|edu|gen|gov|info|net|org",cn:"ac|ah|bj|com|cq|edu|fj|gd|gov|gs|gx|gz|ha|hb|he|hi|hl|hn|jl|js|jx|ln|mil|net|nm|nx|org|qh|sc|sd|sh|sn|sx|tj|tw|xj|xz|yn|zj",co:"com|edu|gov|mil|net|nom|org",cr:"ac|c|co|ed|fi|go|or|sa",cy:"ac|biz|com|ekloges|gov|ltd|name|net|org|parliament|press|pro|tm","do":"art|com|edu|gob|gov|mil|net|org|sld|web",dz:"art|asso|com|edu|gov|net|org|pol",ec:"com|edu|fin|gov|info|med|mil|net|org|pro", +eg:"com|edu|eun|gov|mil|name|net|org|sci",er:"com|edu|gov|ind|mil|net|org|rochest|w",es:"com|edu|gob|nom|org",et:"biz|com|edu|gov|info|name|net|org",fj:"ac|biz|com|info|mil|name|net|org|pro",fk:"ac|co|gov|net|nom|org",fr:"asso|com|f|gouv|nom|prd|presse|tm",gg:"co|net|org",gh:"com|edu|gov|mil|org",gn:"ac|com|gov|net|org",gr:"com|edu|gov|mil|net|org",gt:"com|edu|gob|ind|mil|net|org",gu:"com|edu|gov|net|org",hk:"com|edu|gov|idv|net|org",id:"ac|co|go|mil|net|or|sch|web",il:"ac|co|gov|idf|k12|muni|net|org", +"in":"ac|co|edu|ernet|firm|gen|gov|i|ind|mil|net|nic|org|res",iq:"com|edu|gov|i|mil|net|org",ir:"ac|co|dnssec|gov|i|id|net|org|sch",it:"edu|gov",je:"co|net|org",jo:"com|edu|gov|mil|name|net|org|sch",jp:"ac|ad|co|ed|go|gr|lg|ne|or",ke:"ac|co|go|info|me|mobi|ne|or|sc",kh:"com|edu|gov|mil|net|org|per",ki:"biz|com|de|edu|gov|info|mob|net|org|tel",km:"asso|com|coop|edu|gouv|k|medecin|mil|nom|notaires|pharmaciens|presse|tm|veterinaire",kn:"edu|gov|net|org",kr:"ac|busan|chungbuk|chungnam|co|daegu|daejeon|es|gangwon|go|gwangju|gyeongbuk|gyeonggi|gyeongnam|hs|incheon|jeju|jeonbuk|jeonnam|k|kg|mil|ms|ne|or|pe|re|sc|seoul|ulsan", +kw:"com|edu|gov|net|org",ky:"com|edu|gov|net|org",kz:"com|edu|gov|mil|net|org",lb:"com|edu|gov|net|org",lk:"assn|com|edu|gov|grp|hotel|int|ltd|net|ngo|org|sch|soc|web",lr:"com|edu|gov|net|org",lv:"asn|com|conf|edu|gov|id|mil|net|org",ly:"com|edu|gov|id|med|net|org|plc|sch",ma:"ac|co|gov|m|net|org|press",mc:"asso|tm",me:"ac|co|edu|gov|its|net|org|priv",mg:"com|edu|gov|mil|nom|org|prd|tm",mk:"com|edu|gov|inf|name|net|org|pro",ml:"com|edu|gov|net|org|presse",mn:"edu|gov|org",mo:"com|edu|gov|net|org", +mt:"com|edu|gov|net|org",mv:"aero|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro",mw:"ac|co|com|coop|edu|gov|int|museum|net|org",mx:"com|edu|gob|net|org",my:"com|edu|gov|mil|name|net|org|sch",nf:"arts|com|firm|info|net|other|per|rec|store|web",ng:"biz|com|edu|gov|mil|mobi|name|net|org|sch",ni:"ac|co|com|edu|gob|mil|net|nom|org",np:"com|edu|gov|mil|net|org",nr:"biz|com|edu|gov|info|net|org",om:"ac|biz|co|com|edu|gov|med|mil|museum|net|org|pro|sch",pe:"com|edu|gob|mil|net|nom|org|sld",ph:"com|edu|gov|i|mil|net|ngo|org", +pk:"biz|com|edu|fam|gob|gok|gon|gop|gos|gov|net|org|web",pl:"art|bialystok|biz|com|edu|gda|gdansk|gorzow|gov|info|katowice|krakow|lodz|lublin|mil|net|ngo|olsztyn|org|poznan|pwr|radom|slupsk|szczecin|torun|warszawa|waw|wroc|wroclaw|zgora",pr:"ac|biz|com|edu|est|gov|info|isla|name|net|org|pro|prof",ps:"com|edu|gov|net|org|plo|sec",pw:"belau|co|ed|go|ne|or",ro:"arts|com|firm|info|nom|nt|org|rec|store|tm|www",rs:"ac|co|edu|gov|in|org",sb:"com|edu|gov|net|org",sc:"com|edu|gov|net|org",sh:"co|com|edu|gov|net|nom|org", +sl:"com|edu|gov|net|org",st:"co|com|consulado|edu|embaixada|gov|mil|net|org|principe|saotome|store",sv:"com|edu|gob|org|red",sz:"ac|co|org",tr:"av|bbs|bel|biz|com|dr|edu|gen|gov|info|k12|name|net|org|pol|tel|tsk|tv|web",tt:"aero|biz|cat|co|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel",tw:"club|com|ebiz|edu|game|gov|idv|mil|net|org",mu:"ac|co|com|gov|net|or|org",mz:"ac|co|edu|gov|org",na:"co|com",nz:"ac|co|cri|geek|gen|govt|health|iwi|maori|mil|net|org|parliament|school", +pa:"abo|ac|com|edu|gob|ing|med|net|nom|org|sld",pt:"com|edu|gov|int|net|nome|org|publ",py:"com|edu|gov|mil|net|org",qa:"com|edu|gov|mil|net|org",re:"asso|com|nom",ru:"ac|adygeya|altai|amur|arkhangelsk|astrakhan|bashkiria|belgorod|bir|bryansk|buryatia|cbg|chel|chelyabinsk|chita|chukotka|chuvashia|com|dagestan|e-burg|edu|gov|grozny|int|irkutsk|ivanovo|izhevsk|jar|joshkar-ola|kalmykia|kaluga|kamchatka|karelia|kazan|kchr|kemerovo|khabarovsk|khakassia|khv|kirov|koenig|komi|kostroma|kranoyarsk|kuban|kurgan|kursk|lipetsk|magadan|mari|mari-el|marine|mil|mordovia|mosreg|msk|murmansk|nalchik|net|nnov|nov|novosibirsk|nsk|omsk|orenburg|org|oryol|penza|perm|pp|pskov|ptz|rnd|ryazan|sakhalin|samara|saratov|simbirsk|smolensk|spb|stavropol|stv|surgut|tambov|tatarstan|tom|tomsk|tsaritsyn|tsk|tula|tuva|tver|tyumen|udm|udmurtia|ulan-ude|vladikavkaz|vladimir|vladivostok|volgograd|vologda|voronezh|vrn|vyatka|yakutia|yamal|yekaterinburg|yuzhno-sakhalinsk", +rw:"ac|co|com|edu|gouv|gov|int|mil|net",sa:"com|edu|gov|med|net|org|pub|sch",sd:"com|edu|gov|info|med|net|org|tv",se:"a|ac|b|bd|c|d|e|f|g|h|i|k|l|m|n|o|org|p|parti|pp|press|r|s|t|tm|u|w|x|y|z",sg:"com|edu|gov|idn|net|org|per",sn:"art|com|edu|gouv|org|perso|univ",sy:"com|edu|gov|mil|net|news|org",th:"ac|co|go|in|mi|net|or",tj:"ac|biz|co|com|edu|go|gov|info|int|mil|name|net|nic|org|test|web",tn:"agrinet|com|defense|edunet|ens|fin|gov|ind|info|intl|mincom|nat|net|org|perso|rnrt|rns|rnu|tourism",tz:"ac|co|go|ne|or", +ua:"biz|cherkassy|chernigov|chernovtsy|ck|cn|co|com|crimea|cv|dn|dnepropetrovsk|donetsk|dp|edu|gov|if|in|ivano-frankivsk|kh|kharkov|kherson|khmelnitskiy|kiev|kirovograd|km|kr|ks|kv|lg|lugansk|lutsk|lviv|me|mk|net|nikolaev|od|odessa|org|pl|poltava|pp|rovno|rv|sebastopol|sumy|te|ternopil|uzhgorod|vinnica|vn|zaporizhzhe|zhitomir|zp|zt",ug:"ac|co|go|ne|or|org|sc",uk:"ac|bl|british-library|co|cym|gov|govt|icnet|jet|lea|ltd|me|mil|mod|national-library-scotland|nel|net|nhs|nic|nls|org|orgn|parliament|plc|police|sch|scot|soc", +us:"dni|fed|isa|kids|nsn",uy:"com|edu|gub|mil|net|org",ve:"co|com|edu|gob|info|mil|net|org|web",vi:"co|com|k12|net|org",vn:"ac|biz|com|edu|gov|health|info|int|name|net|org|pro",ye:"co|com|gov|ltd|me|net|org|plc",yu:"ac|co|edu|gov|org",za:"ac|agric|alt|bourse|city|co|cybernet|db|edu|gov|grondar|iaccess|imt|inca|landesign|law|mil|net|ngo|nis|nom|olivetti|org|pix|school|tm|web",zm:"ac|co|com|edu|gov|net|org|sch"},has_expression:null,is_expression:null,has:function(j){return!!j.match(d.has_expression)}, +is:function(j){return!!j.match(d.is_expression)},get:function(j){return(j=j.match(d.has_expression))&&j[1]||null},init:function(){var j="",h;for(h in d.list)Object.prototype.hasOwnProperty.call(d.list,h)&&(j+="|("+("("+d.list[h]+")."+h)+")");d.has_expression=RegExp("\\.("+j.substr(1)+")$","i");d.is_expression=RegExp("^("+j.substr(1)+")$","i")}};d.init();"undefined"!==typeof module&&module.exports?module.exports=d:window.SecondLevelDomains=d})(); +(function(d){function j(a){return a.replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}function h(a){return"[object Array]"===String(Object.prototype.toString.call(a))}function i(a){return encodeURIComponent(a).replace(/[!'()*]/g,escape).replace(/\*/g,"%2A")}var f="undefined"!==typeof module&&module.exports,s=f?require("./punycode"):window.punycode,u=f?require("./IPv6"):window.IPv6,g=f?require("./SecondLevelDomains"):window.SecondLevelDomains,c=function(a,b){if(!(this instanceof c))return new c(a,b);a=== +d&&(a="undefined"!==typeof location?location.href+"":"");this.href(a);return b!==d?this.absoluteTo(b):this},f=c.prototype;c.protocol_expression=/^[a-z][a-z0-9-+-]*$/i;c.idn_expression=/[^a-z0-9\.-]/i;c.punycode_expression=/(xn--)/i;c.ip4_expression=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;c.ip6_expression=/^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/; +c.find_uri_expression=/\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?\u00ab\u00bb\u201c\u201d\u2018\u2019]))/ig;c.defaultPorts={http:"80",https:"443",ftp:"21"};c.invalid_hostname_characters=/[^a-zA-Z0-9\.-]/;c.encode=i;c.decode=decodeURIComponent;c.iso8859=function(){c.encode=escape;c.decode=unescape};c.unicode=function(){c.encode=i;c.decode=decodeURIComponent}; +c.characters={pathname:{encode:{expression:/%(24|26|2B|2C|3B|3D|3A|40)/ig,map:{"%24":"$","%26":"&","%2B":"+","%2C":",","%3B":";","%3D":"=","%3A":":","%40":"@"}},decode:{expression:/[\/\?#]/g,map:{"/":"%2F","?":"%3F","#":"%23"}}},reserved:{encode:{expression:/%(21|23|24|26|27|28|29|2A|2B|2C|2F|3A|3B|3D|3F|40|5B|5D)/ig,map:{"%3A":":","%2F":"/","%3F":"?","%23":"#","%5B":"[","%5D":"]","%40":"@","%21":"!","%24":"$","%26":"&","%27":"'","%28":"(","%29":")","%2A":"*","%2B":"+","%2C":",","%3B":";","%3D":"="}}}}; +c.encodeQuery=function(a){return c.encode(a+"").replace(/%20/g,"+")};c.decodeQuery=function(a){return c.decode((a+"").replace(/\+/g,"%20"))};c.recodePath=function(a){for(var a=(a+"").split("/"),b=0,e=a.length;bc)return a[0]===b[0]&&"/"===a[0]?"/":"";"/"!==a[c]&&(c=a.substring(0,c).lastIndexOf("/"));return a.substring(0,c+1)};c.withinString=function(a,b){return a.replace(c.find_uri_expression,b)};c.ensureValidHostname=function(a){if(a.match(c.invalid_hostname_characters)){if(!s)throw new TypeError("Hostname '"+ +a+"' contains characters other than [A-Z0-9.-] and Punycode.js is not available");if(s.toASCII(a).match(c.invalid_hostname_characters))throw new TypeError("Hostname '"+a+"' contains characters other than [A-Z0-9.-]");}};f.build=function(a){if(!0===a)this._deferred_build=!0;else if(a===d||this._deferred_build)this._string=c.build(this._parts),this._deferred_build=!1;return this};f.clone=function(){return new c(this)};f.toString=function(){return this.build(!1)._string};f.valueOf=function(){return this.toString()}; +m={protocol:"protocol",username:"username",password:"password",hostname:"hostname",port:"port"};q=function(a){return function(b,e){if(b===d)return this._parts[a]||"";this._parts[a]=b;this.build(!e);return this}};for(l in m)f[l]=q(m[l]);m={query:"?",fragment:"#"};q=function(a,b){return function(e,c){if(e===d)return this._parts[a]||"";null!==e&&(e+="",e[0]===b&&(e=e.substring(1)));this._parts[a]=e;this.build(!c);return this}};for(l in m)f[l]=q(l,m[l]);m={search:["?","query"],hash:["#","fragment"]}; +q=function(a,b){return function(e,c){var d=this[a](e,c);return"string"===typeof d&&d.length?b+d:d}};for(l in m)f[l]=q(m[l][1],m[l][0]);f.pathname=function(a,b){if(a===d||!0===a){var e=this._parts.path||(this._parts.urn?"":"/");return a?c.decodePath(e):e}this._parts.path=a?c.recodePath(a):"/";this.build(!b);return this};f.path=f.pathname;f.href=function(a,b){if(a===d)return this.toString();this._string="";this._parts={protocol:null,username:null,password:null,hostname:null,urn:null,port:null,path:null, +query:null,fragment:null};var e=a instanceof c,k="object"===typeof a&&(a.hostname||a.path),g;if("string"===typeof a)this._parts=c.parse(a);else if(e||k)for(g in e=e?a._parts:a,e)Object.hasOwnProperty.call(this._parts,g)&&(this._parts[g]=e[g]);else throw new TypeError("invalid input");this.build(!b);return this};f.is=function(a){var b=!1,e=!1,d=!1,f=!1,m=!1,l=!1,h=!1,i=!this._parts.urn;this._parts.hostname&&(i=!1,e=c.ip4_expression.test(this._parts.hostname),d=c.ip6_expression.test(this._parts.hostname), +b=e||d,m=(f=!b)&&g&&g.has(this._parts.hostname),l=f&&c.idn_expression.test(this._parts.hostname),h=f&&c.punycode_expression.test(this._parts.hostname));switch(a.toLowerCase()){case "relative":return i;case "absolute":return!i;case "domain":case "name":return f;case "sld":return m;case "ip":return b;case "ip4":case "ipv4":case "inet4":return e;case "ip6":case "ipv6":case "inet6":return d;case "idn":return l;case "url":return!this._parts.urn;case "urn":return!!this._parts.urn;case "punycode":return h}return null}; +var y=f.protocol,n=f.port,p=f.hostname;f.protocol=function(a,b){if(a!==d&&a&&(a=a.replace(/:(\/\/)?$/,""),a.match(/[^a-zA-z0-9\.+-]/)))throw new TypeError("Protocol '"+a+"' contains characters other than [A-Z0-9.+-]");return y.call(this,a,b)};f.scheme=f.protocol;f.port=function(a,b){if(this._parts.urn)return a===d?"":this;if(a!==d&&(0===a&&(a=null),a&&(a+="",":"===a[0]&&(a=a.substring(1)),a.match(/[^0-9]/))))throw new TypeError("Port '"+a+"' contains characters other than [0-9]");return n.call(this, +a,b)};f.hostname=function(a,b){if(this._parts.urn)return a===d?"":this;if(a!==d){var e={};c.parseHost(a,e);a=e.hostname}return p.call(this,a,b)};f.host=function(a,b){if(this._parts.urn)return a===d?"":this;if(a===d)return this._parts.hostname?c.buildHost(this._parts):"";c.parseHost(a,this._parts);this.build(!b);return this};f.authority=function(a,b){if(this._parts.urn)return a===d?"":this;if(a===d)return this._parts.hostname?c.buildAuthority(this._parts):"";c.parseAuthority(a,this._parts);this.build(!b); +return this};f.userinfo=function(a,b){if(this._parts.urn)return a===d?"":this;if(a===d){if(!this._parts.username)return"";var e=c.buildUserinfo(this._parts);return e.substring(0,e.length-1)}"@"!==a[a.length-1]&&(a+="@");c.parseUserinfo(a,this._parts);this.build(!b);return this};f.subdomain=function(a,b){if(this._parts.urn)return a===d?"":this;if(a===d){if(!this._parts.hostname||this.is("IP"))return"";var e=this._parts.hostname.length-this.domain().length-1;return this._parts.hostname.substring(0, +e)||""}e=this._parts.hostname.length-this.domain().length;e=this._parts.hostname.substring(0,e);e=RegExp("^"+j(e));a&&"."!==a[a.length-1]&&(a+=".");a&&c.ensureValidHostname(a);this._parts.hostname=this._parts.hostname.replace(e,a);this.build(!b);return this};f.domain=function(a,b){if(this._parts.urn)return a===d?"":this;"boolean"===typeof a&&(b=a,a=d);if(a===d){if(!this._parts.hostname||this.is("IP"))return"";var e=this._parts.hostname.match(/\./g);if(e&&2>e.length)return this._parts.hostname;e=this._parts.hostname.length- +this.tld(b).length-1;e=this._parts.hostname.lastIndexOf(".",e-1)+1;return this._parts.hostname.substring(e)||""}if(!a)throw new TypeError("cannot set domain empty");c.ensureValidHostname(a);!this._parts.hostname||this.is("IP")?this._parts.hostname=a:(e=RegExp(j(this.domain())+"$"),this._parts.hostname=this._parts.hostname.replace(e,a));this.build(!b);return this};f.tld=function(a,b){if(this._parts.urn)return a===d?"":this;"boolean"===typeof a&&(b=a,a=d);if(a===d){if(!this._parts.hostname||this.is("IP"))return""; +var c=this._parts.hostname.lastIndexOf("."),c=this._parts.hostname.substring(c+1);return!0!==b&&g&&g.list[c.toLowerCase()]?g.get(this._parts.hostname)||c:c}if(a)if(a.match(/[^a-zA-Z0-9-]/))if(g&&g.is(a))c=RegExp(j(this.tld())+"$"),this._parts.hostname=this._parts.hostname.replace(c,a);else throw new TypeError("TLD '"+a+"' contains characters other than [A-Z0-9]");else{if(!this._parts.hostname||this.is("IP"))throw new ReferenceError("cannot set TLD on non-domain host");c=RegExp(j(this.tld())+"$"); +this._parts.hostname=this._parts.hostname.replace(c,a)}else throw new TypeError("cannot set TLD empty");this.build(!b);return this};f.directory=function(a,b){if(this._parts.urn)return a===d?"":this;if(a===d||!0===a){if(!this._parts.path&&!this._parts.hostname)return"";if("/"===this._parts.path)return"/";var e=this._parts.path.length-this.filename().length-1,e=this._parts.path.substring(0,e)||(this._parts.hostname?"/":"");return a?c.decodePath(e):e}e=this._parts.path.length-this.filename().length; +e=this._parts.path.substring(0,e);e=RegExp("^"+j(e));this.is("relative")||(a||(a="/"),"/"!==a[0]&&(a="/"+a));a&&"/"!==a[a.length-1]&&(a+="/");a=c.recodePath(a);this._parts.path=this._parts.path.replace(e,a);this.build(!b);return this};f.filename=function(a,b){if(this._parts.urn)return a===d?"":this;if(a===d||!0===a){if(!this._parts.path||"/"===this._parts.path)return"";var e=this._parts.path.lastIndexOf("/"),e=this._parts.path.substring(e+1);return a?c.decodePathSegment(e):e}e=!1;"/"===a[0]&&(a=a.substring(1)); +a.match(/\.?\//)&&(e=!0);var k=RegExp(j(this.filename())+"$"),a=c.recodePath(a);this._parts.path=this._parts.path.replace(k,a);e?this.normalizePath(b):this.build(!b);return this};f.suffix=function(a,b){if(this._parts.urn)return a===d?"":this;if(a===d||!0===a){if(!this._parts.path||"/"===this._parts.path)return"";var e=this.filename(),k=e.lastIndexOf(".");if(-1===k)return"";e=e.substring(k+1);e=/^[a-z0-9%]+$/i.test(e)?e:"";return a?c.decodePathSegment(e):e}"."===a[0]&&(a=a.substring(1));if(e=this.suffix())k= +a?RegExp(j(e)+"$"):RegExp(j("."+e)+"$");else{if(!a)return this;this._parts.path+="."+c.recodePath(a)}k&&(a=c.recodePath(a),this._parts.path=this._parts.path.replace(k,a));this.build(!b);return this};f.segment=function(a,b,c){var k=this._parts.urn?":":"/",g=this.path(),f="/"===g.substring(0,1),g=g.split(k);"number"!==typeof a&&(c=b,b=a,a=d);if(a!==d&&"number"!==typeof a)throw Error("Bad segment '"+a+"', must be 0-based integer");f&&g.shift();0>a&&(a=Math.max(g.length+a,0));if(b===d)return a===d?g: +g[a];if(null===a||g[a]===d)if(h(b))g=b;else{if(b||"string"===typeof b&&b.length)""===g[g.length-1]?g[g.length-1]=b:g.push(b)}else b||"string"===typeof b&&b.length?g[a]=b:g.splice(a,1);f&&g.unshift("");return this.path(g.join(k),c)};var r=f.query;f.query=function(a,b){return!0===a?c.parseQuery(this._parts.query):a!==d&&"string"!==typeof a?(this._parts.query=c.buildQuery(a),this.build(!b),this):r.call(this,a,b)};f.addQuery=function(a,b,e){var d=c.parseQuery(this._parts.query);c.addQuery(d,a,b);this._parts.query= +c.buildQuery(d);"string"!==typeof a&&(e=b);this.build(!e);return this};f.removeQuery=function(a,b,e){var d=c.parseQuery(this._parts.query);c.removeQuery(d,a,b);this._parts.query=c.buildQuery(d);"string"!==typeof a&&(e=b);this.build(!e);return this};f.addSearch=f.addQuery;f.removeSearch=f.removeQuery;f.normalize=function(){return this._parts.urn?this.normalizeProtocol(!1).normalizeQuery(!1).normalizeFragment(!1).build():this.normalizeProtocol(!1).normalizeHostname(!1).normalizePort(!1).normalizePath(!1).normalizeQuery(!1).normalizeFragment(!1).build()}; +f.normalizeProtocol=function(a){"string"===typeof this._parts.protocol&&(this._parts.protocol=this._parts.protocol.toLowerCase(),this.build(!a));return this};f.normalizeHostname=function(a){this._parts.hostname&&(this.is("IDN")&&s?this._parts.hostname=s.toASCII(this._parts.hostname):this.is("IPv6")&&u&&(this._parts.hostname=u.best(this._parts.hostname)),this._parts.hostname=this._parts.hostname.toLowerCase(),this.build(!a));return this};f.normalizePort=function(a){"string"===typeof this._parts.protocol&& +this._parts.port===c.defaultPorts[this._parts.protocol]&&(this._parts.port=null,this.build(!a));return this};f.normalizePath=function(a){if(this._parts.urn||!this._parts.path||"/"===this._parts.path)return this;var b,e,d=this._parts.path,g,f;"/"!==d[0]&&("."===d[0]&&(e=d.substring(0,d.indexOf("/"))),b=!0,d="/"+d);for(d=d.replace(/(\/(\.\/)+)|\/{2,}/g,"/");;){g=d.indexOf("/../");if(-1===g)break;else if(0===g){d=d.substring(3);break}f=d.substring(0,g).lastIndexOf("/");-1===f&&(f=g);d=d.substring(0, +f)+d.substring(g+3)}b&&this.is("relative")&&(d=e?e+d:d.substring(1));d=c.recodePath(d);this._parts.path=d;this.build(!a);return this};f.normalizePathname=f.normalizePath;f.normalizeQuery=function(a){"string"===typeof this._parts.query&&(this._parts.query.length?this.query(c.parseQuery(this._parts.query)):this._parts.query=null,this.build(!a));return this};f.normalizeFragment=function(a){this._parts.fragment||(this._parts.fragment=null,this.build(!a));return this};f.normalizeSearch=f.normalizeQuery; +f.normalizeHash=f.normalizeFragment;f.iso8859=function(){var a=c.encode,b=c.decode;c.encode=escape;c.decode=decodeURIComponent;this.normalize();c.encode=a;c.decode=b;return this};f.unicode=function(){var a=c.encode,b=c.decode;c.encode=i;c.decode=unescape;this.normalize();c.encode=a;c.decode=b;return this};f.readable=function(){var a=this.clone();a.username("").password("").normalize();var b="";a._parts.protocol&&(b+=a._parts.protocol+"://");a._parts.hostname&&(a.is("punycode")&&s?(b+=s.toUnicode(a._parts.hostname), +a._parts.port&&(b+=":"+a._parts.port)):b+=a.host());a._parts.hostname&&(a._parts.path&&"/"!==a._parts.path[0])&&(b+="/");b+=a.path(!0);if(a._parts.query){for(var e="",g=0,f=a._parts.query.split("&"),m=f.length;g>>2]>>>24-8*(a%4)&255)<<16|(e[a+1>>>2]>>>24-8*((a+1)%4)&255)<<8|e[a+2>>>2]>>>24-8*((a+2)%4)&255,g=0;4>g&&a+0.75*g>>6*(3-g)&63));if(e=c.charAt(64))for(;b.length%4;)b.push(e);return b.join("")},parse:function(b){var b=b.replace(/\s/g,""),e=b.length,f=this._map,c=f.charAt(64);c&&(c=b.indexOf(c),-1!=c&&(e=c)); +for(var c=[],a=0,d=0;d>>6-2*(d%4);c[a>>>2]|=(g|h)<<24-8*(a%4);a++}return i.create(c,a)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}})(); diff --git a/WebKit/even-bg.png b/WebKit/even-bg.png new file mode 100644 index 0000000..3166a2b Binary files /dev/null and b/WebKit/even-bg.png differ diff --git a/WebKit/hmac-helper.js b/WebKit/hmac-helper.js new file mode 100644 index 0000000..f3ad041 --- /dev/null +++ b/WebKit/hmac-helper.js @@ -0,0 +1,122 @@ +// its different for app authentication and user authentication: +// for apps its id: mac_key_id and secret: mac_key, +// for users its id: access_token and secret:mac_key + +function getURL(url, http_method, callback, data, auth_header) { + $.ajax({ + beforeSend: function(xhr) { + if (data) xhr.setRequestHeader("Content-Length", data.length); + + if (auth_header) { // if is_set? auth_header + xhr.setRequestHeader("Authorization", auth_header); + } else { + var user_access_token = controller.stringForKey_("user_access_token"); + if (auth_header !== false && user_access_token) { + auth_header = makeAuthHeader( + url, + http_method, + controller.stringForKey_("user_mac_key"), + user_access_token + ) + xhr.setRequestHeader("Authorization", auth_header); + } + } + }, + url: url, + accepts: "application/vnd.tent.v0+json", + contentType: "application/vnd.tent.v0+json", + type: http_method, + complete: callback, + data: data, + processData: false, + error: function(xhr, ajaxOptions, thrownError) { + alert("getURL " + xhr.statusText + " " + http_method + " (" + url + "): '" + xhr.responseText + "'"); + } + }); +} + +function makeAuthHeader(url, http_method, mac_key, mac_key_id) { + + url = URI(url); + var nonce = makeid(8); + var time_stamp = parseInt((new Date).getTime() / 1000, 10); + + var port = url.port(); + if (!port) { + port = url.protocol() == "https" ? "443" : "80"; + } + + var normalizedRequestString = "" + + time_stamp + '\n' + + nonce + '\n' + + http_method + '\n' + + url.path() + url.search() + url.hash() + '\n' + + url.hostname() + '\n' + + port + '\n' + + '\n' ; + + var hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, mac_key); + hmac.update(normalizedRequestString); + var hash = hmac.finalize(); + var mac = hash.toString(CryptoJS.enc.Base64); + + return 'MAC id="' + mac_key_id + + '", ts="' + time_stamp + + '", nonce="' + nonce + + '", mac="' + mac + '"'; +} + +function makeid(len) { + var text = ""; + var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + + for( var i=0; i < len; i++ ) + text += possible.charAt(Math.floor(Math.random() * possible.length)); + + return text; +} + +function findProfileURL(entity, callback) { + $.ajax({ + url: entity, + type: "HEAD", + complete: function(resp) { + if(resp) { + var headers = resp.getAllResponseHeaders(); + var regex = /Link: <([^>]*)>; rel="https:\/\/tent.io\/rels\/profile"/; // FIXME: parse it! + var ret = headers.match(regex); + var profile_url = null; + if(ret && ret.length > 1) { + var profile_url = ret[1]; + if (profile_url == "/profile") { + profile_url = entity + "/profile"; + } + } + + if (profile_url) { + callback(profile_url); + } + } + }, + error: function(xhr, ajaxOptions, thrownError) { + alert("findProfileURL " + xhr.statusText + " (" + entity + "): " + xhr.responseText); + } + }); +} + +function mkApiRootPath(path) { + var api_root = controller.stringForKey_("api_root"); + if((api_root.substring(api_root.length - 1, api_root.length) != "/") && (path.substring(0, 1) != "/")) { + api_root += "/"; + } else if((api_root.substring(api_root.length - 1, api_root.length) == "/") && (path.substring(0, 1) == "/")) { + api_root = api_root.substring(0, api_root.length -1); + } + return api_root + path; +} + +function debug(string) { + if (typeof string == "Object") { + string = JSON.stirngify(string); + } + alert("DEBUG: " + string); +} \ No newline at end of file diff --git a/WebKit/hmac-sha256.js b/WebKit/hmac-sha256.js new file mode 100644 index 0000000..a143d84 --- /dev/null +++ b/WebKit/hmac-sha256.js @@ -0,0 +1,17 @@ +/* +CryptoJS v3.0.2 +code.google.com/p/crypto-js +(c) 2009-2012 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +var CryptoJS=CryptoJS||function(h,i){var e={},f=e.lib={},l=f.Base=function(){function a(){}return{extend:function(j){a.prototype=this;var d=new a;j&&d.mixIn(j);d.$super=this;return d},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var d in a)a.hasOwnProperty(d)&&(this[d]=a[d]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.$super.extend(this)}}}(),k=f.WordArray=l.extend({init:function(a,j){a= +this.words=a||[];this.sigBytes=j!=i?j:4*a.length},toString:function(a){return(a||m).stringify(this)},concat:function(a){var j=this.words,d=a.words,c=this.sigBytes,a=a.sigBytes;this.clamp();if(c%4)for(var b=0;b>>2]|=(d[b>>>2]>>>24-8*(b%4)&255)<<24-8*((c+b)%4);else if(65535>>2]=d[b>>>2];else j.push.apply(j,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,b=this.sigBytes;a[b>>>2]&=4294967295<<32-8*(b%4);a.length=h.ceil(b/4)},clone:function(){var a= +l.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var b=[],d=0;d>>2]>>>24-8*(c%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join("")},parse:function(a){for(var b=a.length,d=[],c=0;c>>3]|=parseInt(a.substr(c,2),16)<<24-4*(c%8);return k.create(d,b/2)}},q=o.Latin1={stringify:function(a){for(var b= +a.words,a=a.sigBytes,d=[],c=0;c>>2]>>>24-8*(c%4)&255));return d.join("")},parse:function(a){for(var b=a.length,d=[],c=0;c>>2]|=(a.charCodeAt(c)&255)<<24-8*(c%4);return k.create(d,b)}},r=o.Utf8={stringify:function(a){try{return decodeURIComponent(escape(q.stringify(a)))}catch(b){throw Error("Malformed UTF-8 data");}},parse:function(a){return q.parse(unescape(encodeURIComponent(a)))}},b=f.BufferedBlockAlgorithm=l.extend({reset:function(){this._data=k.create(); +this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=r.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var b=this._data,d=b.words,c=b.sigBytes,e=this.blockSize,g=c/(4*e),g=a?h.ceil(g):h.max((g|0)-this._minBufferSize,0),a=g*e,c=h.min(4*a,c);if(a){for(var f=0;fg;)e(b)&&(8>g&&(k[g]=f(h.pow(b,0.5))),o[g]=f(h.pow(b,1/3)),g++),b++})();var m=[],l=l.SHA256=e.extend({_doReset:function(){this._hash=f.create(k.slice(0))},_doProcessBlock:function(e,f){for(var b=this._hash.words,g=b[0],a=b[1],j=b[2],d=b[3],c=b[4],h=b[5],l=b[6],k=b[7],n=0;64> +n;n++){if(16>n)m[n]=e[f+n]|0;else{var i=m[n-15],p=m[n-2];m[n]=((i<<25|i>>>7)^(i<<14|i>>>18)^i>>>3)+m[n-7]+((p<<15|p>>>17)^(p<<13|p>>>19)^p>>>10)+m[n-16]}i=k+((c<<26|c>>>6)^(c<<21|c>>>11)^(c<<7|c>>>25))+(c&h^~c&l)+o[n]+m[n];p=((g<<30|g>>>2)^(g<<19|g>>>13)^(g<<10|g>>>22))+(g&a^g&j^a&j);k=l;l=h;h=c;c=d+i|0;d=j;j=a;a=g;g=i+p|0}b[0]=b[0]+g|0;b[1]=b[1]+a|0;b[2]=b[2]+j|0;b[3]=b[3]+d|0;b[4]=b[4]+c|0;b[5]=b[5]+h|0;b[6]=b[6]+l|0;b[7]=b[7]+k|0},_doFinalize:function(){var e=this._data,f=e.words,b=8*this._nDataBytes, +g=8*e.sigBytes;f[g>>>5]|=128<<24-g%32;f[(g+64>>>9<<4)+15]=b;e.sigBytes=4*f.length;this._process()}});i.SHA256=e._createHelper(l);i.HmacSHA256=e._createHmacHelper(l)})(Math); +(function(){var h=CryptoJS,i=h.enc.Utf8;h.algo.HMAC=h.lib.Base.extend({init:function(e,f){e=this._hasher=e.create();"string"==typeof f&&(f=i.parse(f));var h=e.blockSize,k=4*h;f.sigBytes>k&&(f=e.finalize(f));for(var o=this._oKey=f.clone(),m=this._iKey=f.clone(),q=o.words,r=m.words,b=0;b + + + Tentia + + + + + + + + + + + + + + \ No newline at end of file diff --git a/WebKit/index_oauth.html b/WebKit/index_oauth.html new file mode 100644 index 0000000..ccdb02c --- /dev/null +++ b/WebKit/index_oauth.html @@ -0,0 +1,16 @@ + + + + Tentia + + + + + + + + + + + + \ No newline at end of file diff --git a/WebKit/jQuery-Plugins.js b/WebKit/jQuery-Plugins.js new file mode 100644 index 0000000..c865d25 --- /dev/null +++ b/WebKit/jQuery-Plugins.js @@ -0,0 +1,330 @@ + +(function ($) { + $.format = (function () { + + var parseMonth = function(value){ + + switch(value){ + case "Jan": + return "01"; + break; + case "Feb": + return "02"; + break; + case "Mar": + return "03"; + break; + case "Apr": + return "04"; + break; + case "May": + return "05"; + break; + case "Jun": + return "06"; + break; + case "Jul": + return "07"; + break; + case "Aug": + return "08"; + break; + case "Sep": + return "09"; + break; + case "Oct": + return "10"; + break; + case "Nov": + return "11"; + break; + case "Dec": + return "12"; + break; + default: + return value; + } + }; + + var parseTime = function(value){ + var retValue = value; + if(retValue.indexOf(".") != -1){ + retValue = retValue.substring(0, retValue.indexOf(".")); + } + + var values3 = retValue.split(":"); + + if(values3.length == 3){ + hour = values3[0]; + minute = values3[1]; + second = values3[2]; + + return { + time: retValue, + hour: hour, + minute: minute, + second: second + }; + } else { + return { + time: "", + hour: "", + minute: "", + second: "" + }; + } + }; + + return { + date: function(value, format){ + //value = new java.util.Date() + //2009-12-18 10:54:50.546 + try{ + var values = value.split(" "); + var year = null; + var month = null; + var dayOfMonth = null; + var time = null; //json, time, hour, minute, second + + switch(values.length){ + case 6://Wed Jan 13 10:43:41 CET 2010 + year = values[5]; + month = parseMonth(values[1]); + dayOfMonth = values[2]; + time = parseTime(values[3]); + break; + case 2://2009-12-18 10:54:50.546 + var values2 = values[0].split("-"); + year = values2[0]; + month = values2[1]; + dayOfMonth = values2[2]; + time = parseTime(values[1]); + break; + default: + return value; + } + + + var pattern = ""; + var retValue = ""; + + for(i = 0; i < format.length; i++){ + var currentPattern = format.charAt(i); + pattern += currentPattern; + switch(pattern){ + case "dd": + retValue += dayOfMonth; + pattern = ""; + break; + case "MM": + retValue += month; + pattern = ""; + break; + case "yyyy": + retValue += year; + pattern = ""; + break; + case "HH": + retValue += time.hour; + pattern = ""; + break; + case "hh": + retValue += time.hour; + pattern = ""; + break; + case "mm": + retValue += time.minute; + pattern = ""; + break; + case "ss": + retValue += time.second; + pattern = ""; + break; + case " ": + retValue += currentPattern; + pattern = ""; + break; + case "/": + retValue += currentPattern; + pattern = ""; + break; + case ":": + retValue += currentPattern; + pattern = ""; + break; + default: + if(pattern.length == 2 && pattern.indexOf("y") != 0){ + retValue += pattern.substring(0, 1); + pattern = pattern.substring(1, 2); + } else if((pattern.length == 3 && pattern.indexOf("yyy") == -1)){ + pattern = ""; + } + } + } + return retValue; + } catch(e) { + return value; + } + } + }; + })(); +}(jQuery)); + + +$(document).ready(function() { + $(".shortDateFormat").each(function(idx, elem) { + if ($(elem).is(":input")){ + $(elem).val($.format.date($(elem).val(), 'dd/MM/yyyy')); + } else { + $(elem).text($.format.date($(elem).text(), 'dd/MM/yyyy')); + } + }); + $(".longDateFormat").each(function(idx, elem) { + if ($(elem).is(":input")){ + $(elem).val($.format.date($(elem).val(), 'dd/MM/yyyy hh:mm:ss')); + } else { + $(elem).text($.format.date($(elem).text(), 'dd/MM/yyyy hh:mm:ss')); + } + }); +}); + +/* + * timeago: a jQuery plugin, version: 0.8.2 (2010-02-16) + * @requires jQuery v1.2.3 or later + * + * Timeago is a jQuery plugin that makes it easy to support automatically + * updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago"). + * + * For usage and examples, visit: + * http://timeago.yarp.com/ + * + * Licensed under the MIT: + * http://www.opensource.org/licenses/mit-license.php + * + * Copyright (c) 2008-2010, Ryan McGeary (ryanonjavascript -[at]- mcgeary [*dot*] org) + */ +(function($) { + $.timeago = function(timestamp) { + if (timestamp instanceof Date) return inWords(timestamp); + else if (typeof timestamp == "string") return inWords($.timeago.parse(timestamp)); + else return inWords($.timeago.datetime(timestamp)); + }; + var $t = $.timeago; + + $.extend($.timeago, { + settings: { + refreshMillis: 60000, + allowFuture: false, + strings: { + prefixAgo: null, + prefixFromNow: null, + suffixAgo: "ago", + suffixFromNow: "from now", + ago: null, // DEPRECATED, use suffixAgo + fromNow: null, // DEPRECATED, use suffixFromNow + seconds: "less than a minute", + minute: "about a minute", + minutes: "%d minutes", + hour: "about an hour", + hours: "about %d hours", + day: "a day", + days: "%d days", + month: "about a month", + months: "%d months", + year: "about a year", + years: "%d years" + } + }, + inWords: function(distanceMillis) { + var $l = this.settings.strings; + var prefix = $l.prefixAgo; + var suffix = $l.suffixAgo || $l.ago; + if (this.settings.allowFuture) { + if (distanceMillis < 0) { + prefix = $l.prefixFromNow; + suffix = $l.suffixFromNow || $l.fromNow; + } + distanceMillis = Math.abs(distanceMillis); + } + + var seconds = distanceMillis / 1000; + var minutes = seconds / 60; + var hours = minutes / 60; + var days = hours / 24; + var years = days / 365; + + var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) || + seconds < 90 && substitute($l.minute, 1) || + minutes < 45 && substitute($l.minutes, Math.round(minutes)) || + minutes < 90 && substitute($l.hour, 1) || + hours < 24 && substitute($l.hours, Math.round(hours)) || + hours < 48 && substitute($l.day, 1) || + days < 30 && substitute($l.days, Math.floor(days)) || + days < 60 && substitute($l.month, 1) || + days < 365 && substitute($l.months, Math.floor(days / 30)) || + years < 2 && substitute($l.year, 1) || + substitute($l.years, Math.floor(years)); + + return $.trim([prefix, words, suffix].join(" ")); + }, + parse: function(iso8601) { + var s = $.trim(iso8601); + s = s.replace(/-/,"/").replace(/-/,"/"); + s = s.replace(/T/," ").replace(/Z/," UTC"); + s = s.replace(/([\+-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400 + return new Date(s); + }, + datetime: function(elem) { + // jQuery's `is()` doesn't play well with HTML5 in IE + var isTime = $(elem).get(0).tagName.toLowerCase() == "time"; // $(elem).is("time"); + var iso8601 = isTime ? $(elem).attr("datetime") : $(elem).attr("title"); + return $t.parse(iso8601); + } + }); + + $.fn.timeago = function() { + var self = this; + self.each(refresh); + + var $s = $t.settings; + if ($s.refreshMillis > 0) { + setInterval(function() { self.each(refresh); }, $s.refreshMillis); + } + return self; + }; + + function refresh() { + var data = prepareData(this); + if (!isNaN(data.datetime)) { + $(this).text(inWords(data.datetime)); + } + return this; + } + + function prepareData(element) { + element = $(element); + if (!element.data("timeago")) { + element.data("timeago", { datetime: $t.datetime(element) }); + var text = $.trim(element.text()); + if (text.length > 0) element.attr("title", text); + } + return element.data("timeago"); + } + + function inWords(date) { + return $t.inWords(distance(date)); + } + + function distance(date) { + return (new Date().getTime() - date.getTime()); + } + + function substitute(stringOrFunction, value) { + var string = $.isFunction(stringOrFunction) ? stringOrFunction(value) : stringOrFunction; + return string.replace(/%d/i, value); + } + + // fix for IE6 suckage + document.createElement("abbr"); + document.createElement("time"); +})(jQuery); diff --git a/WebKit/jQuery.js b/WebKit/jQuery.js new file mode 100644 index 0000000..7c24308 --- /dev/null +++ b/WebKit/jQuery.js @@ -0,0 +1,154 @@ +/*! + * jQuery JavaScript Library v1.4.2 + * http://jquery.com/ + * + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2010, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Sat Feb 13 22:33:48 2010 -0500 + */ +(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, +Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& +(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, +a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== +"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, +function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
a"; +var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, +parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= +false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= +s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, +applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; +else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, +a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== +w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, +cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= +c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); +a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, +function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); +k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), +C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= +e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& +f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; +if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", +e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, +"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, +d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, +e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); +t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| +g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, +CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, +g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, +text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, +setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= +h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== +"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, +h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& +q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; +if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); +(function(){var g=s.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: +function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= +{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== +"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", +d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? +a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== +1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= +c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, +wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, +prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, +this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); +return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, +""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); +return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", +""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= +c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? +c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= +function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= +Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, +"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= +a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= +a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== +"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, +serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), +function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, +global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& +e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? +"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== +false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= +false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", +c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| +d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); +g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== +1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== +"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; +if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== +"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| +c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; +this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= +this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, +e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
"; +a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); +c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, +d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- +f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": +"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in +e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff --git a/WebKit/odd-bg.png b/WebKit/odd-bg.png new file mode 100644 index 0000000..b822a14 Binary files /dev/null and b/WebKit/odd-bg.png differ diff --git a/WebKit/pin.png b/WebKit/pin.png new file mode 100644 index 0000000..32ce008 Binary files /dev/null and b/WebKit/pin.png differ diff --git a/WebKit/sprite-icons.png b/WebKit/sprite-icons.png new file mode 100644 index 0000000..7336e51 Binary files /dev/null and b/WebKit/sprite-icons.png differ diff --git a/publish/Appcast.xml b/publish/Appcast.xml new file mode 100755 index 0000000..9b89135 --- /dev/null +++ b/publish/Appcast.xml @@ -0,0 +1,20 @@ + + + + Tentia's Changelog + http://jabs.nu/Tentia/download/Appcast.xml + Most recent changes with links to updates. + en + + Version 0.1.2 + 10.5.0 + http://jabs.nu/Tentia/download/ReleaseNotes.html + Sun, 04 Nov 2012 17:30:32 +0100 + + + + diff --git a/publish/ReleaseNotes.html b/publish/ReleaseNotes.html new file mode 100644 index 0000000..df6285d --- /dev/null +++ b/publish/ReleaseNotes.html @@ -0,0 +1,32 @@ + + + + Tentia Release Notes + + + + +

Tentia 0.1.2

+

Bugfixes

+

Mentions now appear as realnames

+ +
+ +

Tentia 0.1.1

+

Bugfixes

+

Changed to send on Cmd+Enter.

+ +
+ +

Tentia 0.1.0

+

First attempt to rewrite the old Twitter client Twittia to a new and shiny Tent client Tentia.

+ + + \ No newline at end of file diff --git a/publish/Tentia.psd b/publish/Tentia.psd new file mode 100644 index 0000000..1ff7f5d Binary files /dev/null and b/publish/Tentia.psd differ diff --git a/publish/dsa_pub.pem b/publish/dsa_pub.pem new file mode 100644 index 0000000..4c959f3 --- /dev/null +++ b/publish/dsa_pub.pem @@ -0,0 +1,20 @@ +-----BEGIN PUBLIC KEY----- +MIIDPDCCAi4GByqGSM44BAEwggIhAoIBAQDjho3c9LB9TBv/wUQSegtiD2Q/YFjK +HvJH2ndtw2MIwd9iLA4JgXuZAZHpIa+YV7vU97TCvdRmO50VkfULkRona2SjE8lR +oK3VMOkJNGlAK0MfNgDF3/KcI7W6wTZRq/QLLI9Hi1oUpfheDCrrONyvHhCRW5UD +Rm/1Y/TltWfvDi2XmzvVFc9ISnuWoAntzp0IshWeAkcpDLbXJ3u9GudVAHeowEps ++BlMHMrzKPyvviRp0skJkmYvDpZn1YI9WhI4a65hPvgGO7a0/bgc1WbI6nR9mx6f +v+L37eqXoAJ+jrd2BaxD73BH7gBidO3xEYP0oUAxi1xkh2t587yyPU9lAhUAkKxj +3QWYyr+bYg6PDQyx2XpU+hcCggEBAJjhPOB+yLjbobEKJLzdjYujO0XMKVwej6k9 +14lCems95gwjWVS8t8rLAEYcheUPsz4rAid0ONCRQYbWmMBksv6AuXYH/qQM0BcB +DXtXnTRjUkDHCyWw+/QnkiQ+oHrzsZHPO1j+gsLOvZw2dfC1DUHHqsqaW1Oq8Xu9 +q+slmwbjTuymsbgfBJ27P09PU+FM0VNVQTCEXfZTMlDsCl6o19QmRbCLAqY0VhKZ +qPeL0atvdkaczDrNReZYRHcCfa9sO74Kt/m10UW7vEL5bIjYTN7kWvLh5HAuMvZo +Ta77PJpD0X0HbPUrX0/2YXZchxt3is1Tfy03T9aO4iWE+0Qy6wYDggEGAAKCAQEA +4AxqBHt4LMlsK330/0YXhyKYJEBjDHftz8vFuyq7Zob0t5euDExqtkjnDTo9BD/m +4tOE3/12IHL8kPpB0augGHONyoCO7Fdm+CR+mWNMqg2qo5mdPxEzP74WFrryhvh3 +z/GMhBPfZ/qSbfOvI9snc2KS6Pi34L+Je1UiYt8+gmN/uF/cUTWIkOUavI6AuGIB +oCkWGpEYjAYfZkR80/pKNQq2qLc9hiUAj1VpY5B6pxlelmos+/F62Je+E6Fd1VZN +cJfvL2kp/9bPU35cye4/FGkrW94DgRBw3IpAVrnwjnglJn2JUr7BySLO7PhFfTvO +ZbWeowFp6qKpOugZ7kS//w== +-----END PUBLIC KEY----- diff --git a/publish/publish.rb b/publish/publish.rb new file mode 100755 index 0000000..51dbb82 --- /dev/null +++ b/publish/publish.rb @@ -0,0 +1,40 @@ +#!/usr/bin/env ruby -wKU +require 'time' + +path = File.dirname File.expand_path(__FILE__) + +# system "cd \"#{path}/build/Release/\"; zip -r Tentia.app.zip Tentia.app; cd \"#{path}\"" +version = `defaults read \"#{path}/build/Release/Tentia.app/Contents/Info\" CFBundleVersion`.gsub(/\n/,'') +length = `stat -f %z \"#{path}/build/Release/Tentia.app.zip\"`.gsub(/\n/,'') +signature = `ruby \"#{path}/../Sparkle\ 1.5b6/Extras/Signing Tools/sign_update.rb\" \"#{path}/build/Release/Tentia.app.zip\" \"#{path}/dsa_priv.pem\"`.gsub(/\n/,'') + +xml = < + + + Tentia's Changelog + http://jabs.nu/Tentia/download/Appcast.xml + Most recent changes with links to updates. + en + + Version #{version} + 10.5.0 + http://jabs.nu/Tentia/download/ReleaseNotes.html + #{Time.now.rfc2822} + + + + +XML + + +File.open("#{path}/Appcast.xml", 'w') {|f| f.write(xml) } +system "scp \"#{path}/build/Release/Tentia.app.zip\" jeena@jeena.net:~/jabs.nu/public/Tentia/download/" +system "scp \"#{path}/ReleaseNotes.html\" jeena@jeena.net:~/jabs.nu/public/Tentia/download/" +system "scp \"#{path}/Appcast.xml\" jeena@jeena.net:~/jabs.nu/public/Tentia/download/" + +puts "Done." \ No newline at end of file