float CYScrollViewDecelerationRateNormal;
-@interface WebView (Apple)
-- (void) _setLayoutInterval:(float)interval;
-- (void) _setAllowsMessaging:(BOOL)allows;
-@end
-
@interface WebFrame (Cydia)
- (void) cydia$updateHeight;
@end
}
[page setDelegate:delegate_];
+ [page setPageColor:color_];
if (!pop) {
[[self navigationItem] setTitle:title_];
float blue([[rgb blue] getFloatValue:DOM_CSS_NUMBER]);
float alpha([[rgb alpha] getFloatValue:DOM_CSS_NUMBER]);
- if (red == 0xc7 && green == 0xce && blue == 0xd5)
- uic = [UIColor pinStripeColor];
- else if (alpha != 0)
+ if (alpha == 1)
uic = [UIColor
colorWithRed:(red / 255)
green:(green / 255)
}
}
- [scroller_ setBackgroundColor:(uic ?: [UIColor clearColor])];
+ [super setPageColor:uic];
+ [scroller_ setBackgroundColor:color_];
break;
}
}
[self _didStartLoading];
}
+- (void) webView:(WebView *)view resource:(id)identifier didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge fromDataSource:(WebDataSource *)source {
+ challenge_ = [challenge retain];
+
+ NSURLProtectionSpace *space([challenge protectionSpace]);
+ NSString *realm([space realm]);
+ if (realm == nil)
+ realm = @"";
+
+ UIAlertView *alert = [[[UIAlertView alloc]
+ initWithTitle:realm
+ message:nil
+ delegate:self
+ cancelButtonTitle:UCLocalize("CANCEL")
+ otherButtonTitles:UCLocalize("LOGIN"), nil
+ ] autorelease];
+
+ [alert setContext:@"challenge"];
+ [alert setNumberOfRows:1];
+
+ [alert addTextFieldWithValue:@"" label:UCLocalize("USERNAME")];
+ [alert addTextFieldWithValue:@"" label:UCLocalize("PASSWORD")];
+
+ UITextField *username([alert textFieldAtIndex:0]); {
+ UITextInputTraits *traits([username textInputTraits]);
+ [traits setAutocapitalizationType:UITextAutocapitalizationTypeNone];
+ [traits setAutocorrectionType:UITextAutocorrectionTypeNo];
+ [traits setKeyboardType:UIKeyboardTypeASCIICapable];
+ [traits setReturnKeyType:UIReturnKeyNext];
+ }
+
+ UITextField *password([alert textFieldAtIndex:1]); {
+ UITextInputTraits *traits([password textInputTraits]);
+ [traits setAutocapitalizationType:UITextAutocapitalizationTypeNone];
+ [traits setAutocorrectionType:UITextAutocorrectionTypeNo];
+ [traits setKeyboardType:UIKeyboardTypeASCIICapable];
+ // XXX: UIReturnKeyDone
+ [traits setReturnKeyType:UIReturnKeyNext];
+ [traits setSecureTextEntry:YES];
+ }
+
+ [alert show];
+}
+
- (NSURLRequest *) webView:(WebView *)view resource:(id)identifier willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response fromDataSource:(WebDataSource *)source {
#if LogBrowser
NSLog(@"resource:%@ willSendRequest:%@ redirectResponse:%@ fromDataSource:%@", identifier, request, response, source);
} else if ([context isEqualToString:@"challenge"]) {
id<NSURLAuthenticationChallengeSender> sender([challenge_ sender]);
- switch (button) {
- case 1: {
- NSString *username([[alert textFieldAtIndex:0] text]);
- NSString *password([[alert textFieldAtIndex:1] text]);
-
- NSURLCredential *credential([NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistenceForSession]);
+ if (button == [alert cancelButtonIndex])
+ [sender cancelAuthenticationChallenge:challenge_];
+ else if (button == [alert firstOtherButtonIndex]) {
+ NSString *username([[alert textFieldAtIndex:0] text]);
+ NSString *password([[alert textFieldAtIndex:1] text]);
- [sender useCredential:credential forAuthenticationChallenge:challenge_];
- } break;
-
- case 2:
- [sender cancelAuthenticationChallenge:challenge_];
- break;
+ NSURLCredential *credential([NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistenceForSession]);
- _nodefault
+ [sender useCredential:credential forAuthenticationChallenge:challenge_];
}
challenge_ = nil;
width_ = width;
class_ = _class;
+ [super setPageColor:nil];
+
allowsNavigationAction_ = true;
loading_ = [NSMutableSet setWithCapacity:5];
// XXX: I think this improves scrolling; the hardcoded-ness sucks
[document setTileSize:CGSizeMake(320, 500)];
- [document setBackgroundColor:[UIColor clearColor]];
-
- // XXX: this is terribly (too?) expensive
- [document setDrawsBackground:NO];
-
WebView *webview([document webView]);
WebPreferences *preferences([webview preferences]);
[preferences _setLayoutInterval:0];
[preferences setCacheModel:WebCacheModelDocumentBrowser];
- [preferences setJavaScriptCanOpenWindowsAutomatically:YES];
+ [preferences setJavaScriptCanOpenWindowsAutomatically:NO];
if ([preferences respondsToSelector:@selector(setOfflineWebApplicationCacheEnabled:)])
[preferences setOfflineWebApplicationCacheEnabled:YES];
//[scroller setAllowsRubberBanding:YES];
}
+ [webview_ setOpaque:NO];
+ [webview_ setBackgroundColor:nil];
+
[scroller_ setFixedBackgroundPattern:YES];
- [scroller_ setBackgroundColor:[UIColor clearColor]];
+ [scroller_ setBackgroundColor:color_];
[scroller_ setClipsSubviews:YES];
[scroller_ setBounces:YES];
[self setViewportWidth:width_];
- UITableView *table([[[UITableView alloc] initWithFrame:[webview_ bounds] style:UITableViewStyleGrouped] autorelease]);
- [table setScrollsToTop:NO];
- [webview_ insertSubview:table atIndex:0];
+ if ([[UIColor groupTableViewBackgroundColor] isEqual:[UIColor clearColor]]) {
+ UITableView *table([[[UITableView alloc] initWithFrame:[webview_ bounds] style:UITableViewStyleGrouped] autorelease]);
+ [table setScrollsToTop:NO];
+ [webview_ insertSubview:table atIndex:0];
+ [table setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)];
+ }
- [table setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)];
[webview_ setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)];
ready_ = false;
} return self;
}
++ (void) _lockJavaScript:(WebPreferences *)preferences {
+ WebThreadLocked lock;
+ [preferences setJavaScriptCanOpenWindowsAutomatically:NO];
+}
+
- (void) callFunction:(WebScriptObject *)function {
WebThreadLocked lock;
WebView *webview([[[self webView] _documentView] webView]);
- WebFrame *frame([webview mainFrame]);
+ WebPreferences *preferences([webview preferences]);
+ [preferences setJavaScriptCanOpenWindowsAutomatically:YES];
+ if ([webview respondsToSelector:@selector(_preferencesChanged:)])
+ [webview _preferencesChanged:preferences];
+ else
+ [webview _preferencesChangedNotification:[NSNotification notificationWithName:@"" object:preferences]];
+
+ WebFrame *frame([webview mainFrame]);
JSGlobalContextRef context([frame globalContext]);
+
JSObjectRef object([function JSObject]);
if ($JSObjectCallAsFunction != NULL)
($JSObjectCallAsFunction)(context, object, NULL, 0, NULL, NULL);
+
+ // XXX: the JavaScript code submits a form, which seems to happen asynchronously
+ NSObject *target([CyteWebViewController class]);
+ [NSObject cancelPreviousPerformRequestsWithTarget:target selector:@selector(_lockJavaScript:) object:preferences];
+ [target performSelector:@selector(_lockJavaScript:) withObject:preferences afterDelay:1];
}
- (void) reloadButtonClicked {