+#pragma mark -
+#pragma mark WebView UI Delegate
+
+- (WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request
+{
+ WebView *newWebView = [[WebView alloc] initWithFrame:NSZeroRect frameName:nil groupName:nil];
+ [newWebView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
+ [newWebView setUIDelegate:self];
+ [newWebView setPolicyDelegate:self];
+ [newWebView setFrameLoadDelegate:self];
+ if (request)
+ [[newWebView mainFrame] loadRequest:request];
+
+ NSWindow *window = [[NSWindow alloc] initWithContentRect:NSZeroRect styleMask:(NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSResizableWindowMask | NSUnifiedTitleAndToolbarWindowMask) backing:NSBackingStoreBuffered defer:NO screen:[[webView window] screen]];
+ [window setReleasedWhenClosed:YES];
+ [newWebView setFrame:[[window contentView] frame]];
+ [[window contentView] addSubview:newWebView];
+ [newWebView release];
+
+ return newWebView;
+}
+
+- (void)webViewShow:(WebView *)sender
+{
+ [[sender window] makeKeyAndOrderFront:sender];
+}
+
+- (BOOL)webViewAreToolbarsVisible:(WebView *)sender
+{
+ return [[[sender window] toolbar] isVisible];
+}
+
+- (void)webView:(WebView *)sender setToolbarsVisible:(BOOL)visible
+{
+ [[[sender window] toolbar] setVisible:visible];
+}
+
+- (void)webView:(WebView *)sender setResizable:(BOOL)resizable
+{
+ [[sender window] setShowsResizeIndicator:resizable];
+ [[[sender window] standardWindowButton:NSWindowZoomButton] setEnabled:resizable];
+}
+
+- (void)webView:(WebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame
+{
+ NSRange range = [message rangeOfString:@"\t"];
+ NSString *title = @"Alert";
+ if (range.location != NSNotFound) {
+ title = [message substringToIndex:range.location];
+ message = [message substringFromIndex:(range.location + range.length)];
+ }
+
+ NSBeginInformationalAlertSheet(title, nil, nil, nil, [sender window], nil, NULL, NULL, NULL, message);
+}
+
+- (void)scriptConfirmSheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(int *)contextInfo
+{
+ *contextInfo = returnCode;
+}
+
+- (BOOL)webView:(WebView *)sender runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame
+{
+ NSRange range = [message rangeOfString:@"\t"];
+ NSString *title = @"Alert";
+ if (range.location != NSNotFound) {
+ title = [message substringToIndex:range.location];
+ message = [message substringFromIndex:(range.location + range.length)];
+ }
+
+ int result = NSNotFound;
+ NSBeginInformationalAlertSheet(title, nil, @"Cancel", nil, [sender window], self, @selector(scriptConfirmSheetDidEnd:returnCode:contextInfo:), NULL, &result, message);
+
+ while (result == NSNotFound) {
+ NSEvent *nextEvent = [[NSApplication sharedApplication] nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate distantFuture] inMode:NSDefaultRunLoopMode dequeue:YES];
+ [[NSApplication sharedApplication] sendEvent:nextEvent];
+ }
+
+ return result;
+}
+