]> git.saurik.com Git - cydia.git/blobdiff - UICaboodle/BrowserView.m
Polished browser and finished repotagging.
[cydia.git] / UICaboodle / BrowserView.m
index fa41f2e9918cb30a70d831691eded66af42959a8..d2a97c840f7eb771ffb7e608aeaabfd751a16392 100644 (file)
@@ -73,6 +73,8 @@
 + (NSString *) webScriptNameForSelector:(SEL)selector {
     if (selector == @selector(getPackageById:))
         return @"getPackageById";
+    else if (selector == @selector(setAutoPopup:))
+        return @"setAutoPopup";
     else if (selector == @selector(setButtonImage:withStyle:toFunction:))
         return @"setButtonImage";
     else if (selector == @selector(setButtonTitle:withStyle:toFunction:))
     return value;
 }
 
+- (void) setAutoPopup:(BOOL)popup {
+    [indirect_ setAutoPopup:popup];
+}
+
 - (void) setButtonImage:(NSString *)button withStyle:(NSString *)style toFunction:(id)function {
     [indirect_ setButtonImage:button withStyle:style toFunction:function];
 }
 #endif
 
 - (void) dealloc {
-    NSLog(@"deallocating WebView");
+#if ForSaurik
+    NSLog(@"[BrowserView dealloc]");
+#endif
 
     if (challenge_ != nil)
         [challenge_ release];
     /* XXX: this is where I cry myself to sleep */
 }
 
+- (bool) _allowJavaScriptPanel {
+    return true;
+}
+
 - (void) webView:(WebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame {
+    if ([self _allowJavaScriptPanel])
+        return;
+
     UIActionSheet *sheet = [[[UIActionSheet alloc]
         initWithTitle:nil
         buttons:[NSArray arrayWithObjects:@"OK", nil]
 }
 
 - (BOOL) webView:(WebView *)sender runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame {
+    if (![self _allowJavaScriptPanel])
+        return NO;
+
     UIActionSheet *sheet = [[[UIActionSheet alloc]
         initWithTitle:nil
         buttons:[NSArray arrayWithObjects:@"OK", @"Cancel", nil]
     return [confirm boolValue];
 }
 
+- (void) setAutoPopup:(BOOL)popup {
+    popup_ = popup;
+}
+
 - (void) setButtonImage:(NSString *)button withStyle:(NSString *)style toFunction:(id)function {
     if (button_ != nil)
         [button_ autorelease];
 }
 
 - (void) webView:(WebView *)sender decidePolicyForNewWindowAction:(NSDictionary *)action request:(NSURLRequest *)request newFrameName:(NSString *)name decisionListener:(id<WebPolicyDecisionListener>)listener {
+#if ForSaurik
     NSLog(@"nwa:%@", name);
+#endif
 
     if (NSURL *url = [request URL]) {
         if (name == nil) unknown: {
 
             RVPage *page([delegate_ pageForURL:url hasTag:NULL]);
             if (page == nil) {
-                /* XXX: call createWebViewWithRequest instead */
+                /* XXX: call createWebViewWithRequest instead? */
 
                 [self setBackButtonTitle:title_];
 
 
     int store(_not(int));
     if (NSURL *itms = [url itmsURL:&store]) {
+#if ForSaurik
         NSLog(@"itms#%@#%u#%@", url, store, itms);
+#endif
+
         if (
             store == 1 && [capability containsObject:@"com.apple.MobileStore"] ||
             store == 2 && [capability containsObject:@"com.apple.AppStore"]
 }
 
 - (WebView *) webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request windowFeatures:(NSDictionary *)features {
+//- (WebView *) webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request userGesture:(BOOL)gesture {
 #if ForSaurik
-    NSLog(@"cwv:%@ (%@)", request, title_);
+    NSLog(@"cwv:%@ (%@): %@", request, title_, features == nil ? @"{}" : [features description]);
+    //NSLog(@"cwv:%@ (%@): %@", request, title_, gesture ? @"Yes" : @"No");
 #endif
 
-    BrowserView *browser = [[[BrowserView alloc] initWithBook:book_] autorelease];
+    NSNumber *value([features objectForKey:@"width"]);
+    float width(value == nil ? [BrowserView defaultWidth] : [value floatValue]);
+
+    RVBook *book(!popup_ ? book_ : [[[RVPopUpBook alloc] initWithFrame:[delegate_ popUpBounds]] autorelease]);
+
+    /* XXX: deal with cydia:// pages */
+    BrowserView *browser([[[BrowserView alloc] initWithBook:book forWidth:width] autorelease]);
+
+    if (features == nil && popup_) {
+        [book setDelegate:delegate_];
+        [browser setDelegate:delegate_];
+
+        [browser loadRequest:request];
 
-    if (request == nil) {
+        [book setPage:browser];
+        [book_ pushBook:book];
+    } else if (request == nil) {
         [self setBackButtonTitle:title_];
         [browser setDelegate:delegate_];
         [browser retain];
 
 - (WebView *) webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request {
     return [self webView:sender createWebViewWithRequest:request windowFeatures:nil];
+    //return [self webView:sender createWebViewWithRequest:request userGesture:YES];
 }
 
 - (void) webView:(WebView *)sender didReceiveTitle:(NSString *)title forFrame:(WebFrame *)frame {
 #endif
 }
 
-- (id) initWithBook:(RVBook *)book {
+- (id) initWithBook:(RVBook *)book forWidth:(float)width {
     if ((self = [super initWithBook:book]) != nil) {
         loading_ = false;
+        width_ = width;
+        popup_ = false;
 
         struct CGRect bounds = [self bounds];
 
             [webview_ setAutoresizes:YES];
 
             [webview_ setMinimumScale:0.25f forDocumentTypes:0x10];
+            [webview_ setMaximumScale:5.00f forDocumentTypes:0x10];
             [webview_ setInitialScale:UIWebViewScalesToFitScale forDocumentTypes:0x10];
-            [webview_ setViewportSize:CGSizeMake(980, UIWebViewGrowsAndShrinksToFitHeight) forDocumentTypes:0x10];
+            //[webview_ setViewportSize:CGSizeMake(980, UIWebViewGrowsAndShrinksToFitHeight) forDocumentTypes:0x10];
 
             [webview_ setViewportSize:CGSizeMake(320, UIWebViewGrowsAndShrinksToFitHeight) forDocumentTypes:0x2];
 
-            [webview_ setMinimumScale:1.0f forDocumentTypes:0x8];
+            [webview_ setMinimumScale:1.00f forDocumentTypes:0x8];
             [webview_ setInitialScale:UIWebViewScalesToFitScale forDocumentTypes:0x8];
             [webview_ setViewportSize:CGSizeMake(320, UIWebViewGrowsAndShrinksToFitHeight) forDocumentTypes:0x8];
 
             [webview_ setValue:[NSNumber numberWithBool:YES] forGestureAttribute:UIGestureAttributeUpdatesScroller];
 
             [webview_ setSmoothsFonts:YES];
-
+            [webview_ setAllowsImageSheet:YES];
             [webview _setUsesLoaderCache:YES];
-            [webview setGroupName:@"Cydia"];
+
+            [webview setGroupName:@"CydiaGroup"];
             [webview _setLayoutInterval:0];
         }
 
+        [webview_ setViewportSize:CGSizeMake(width_, UIWebViewGrowsAndShrinksToFitHeight) forDocumentTypes:0x10];
+
         [webview_ setDelegate:self];
         [webview_ setGestureDelegate:self];
         [scroller_ addSubview:webview_];
             [package installed]
         ];
 
+        if (Product_ != nil)
+            application = [NSString stringWithFormat:@"%@ Version/%@", application, Product_];
         if (Build_ != nil)
-            application = [NSString stringWithFormat:@"Mobile/%@ %@", Build_, application];
+            application = [NSString stringWithFormat:@"%@ Mobile/%@", application, Build_];
+        if (Safari_ != nil)
+            application = [NSString stringWithFormat:@"%@ Safari/%@", application, Safari_];
 
         /* XXX: lookup application directory? */
         /*if (NSDictionary *safari = [NSDictionary dictionaryWithContentsOfFile:@"/Applications/MobileSafari.app/Info.plist"])
     } return self;
 }
 
+- (id) initWithBook:(RVBook *)book {
+    return [self initWithBook:book forWidth:[[self class] defaultWidth]];
+}
+
 - (void) didFinishGesturesInView:(UIView *)view forEvent:(id)event {
     [webview_ redrawScaledDocument];
 }
     pushed_ = pushed;
 }
 
++ (float) defaultWidth {
+    return 980;
+}
+
 @end