2 // PBWebGitController.m
5 // Created by Pieter de Bie on 14-06-08.
6 // Copyright 2008 __MyCompanyName__. All rights reserved.
9 #import "PBWebHistoryController.h"
11 @implementation PBWebHistoryController
17 startFile = @"history";
19 [historyController addObserver:self forKeyPath:@"webCommit" options:0 context:@"ChangedCommit"];
24 [self changeContentTo: historyController.webCommit];
27 - (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(NSString *)context
29 if ([context isEqualToString: @"ChangedCommit"])
30 [self changeContentTo: historyController.webCommit];
32 [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
35 - (void) changeContentTo: (PBGitCommit *) content
37 if (content == nil || !finishedLoading)
40 // The sha is the same, but refs may have changed.. reload it lazy
41 if ([currentSha isEqualToString: content.sha])
43 [[self script] callWebScriptMethod:@"reload" withArguments: nil];
46 currentSha = content.sha;
48 NSArray *arguments = [NSArray arrayWithObjects:content, [[[historyController repository] headRef] simpleRef], nil];
49 [[self script] callWebScriptMethod:@"loadCommit" withArguments: arguments];
52 - (void) selectCommit: (NSString*) sha
54 [historyController selectCommit:sha];
57 - (void) sendKey: (NSString*) key
59 id script = [view windowScriptObject];
60 [script callWebScriptMethod:@"handleKeyFromCocoa" withArguments: [NSArray arrayWithObject:key]];
65 NSString *source = [(DOMHTMLElement *)[[[view mainFrame] DOMDocument] documentElement] outerHTML];
66 NSPasteboard *a =[NSPasteboard generalPasteboard];
67 [a declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:self];
68 [a setString:source forType: NSStringPboardType];
71 - (NSArray *) webView:(WebView *)sender
72 contextMenuItemsForElement:(NSDictionary *)element
73 defaultMenuItems:(NSArray *)defaultMenuItems
75 DOMNode *node = [element valueForKey:@"WebElementDOMNode"];
77 // If clicked on the text, select the containing div
78 if ([[node className] isEqualToString:@"DOMText"])
79 node = [node parentNode];
81 // Every ref has a class name of 'refs' and some other class. We check on that to see if we pressed on a ref.
82 if (![[node className] hasPrefix:@"refs "])
83 return defaultMenuItems;
85 NSString *selectedRefString = [[[node childNodes] item:0] textContent];
86 for (PBGitRef *ref in historyController.webCommit.refs)
88 if ([[ref shortName] isEqualToString:selectedRefString])
89 return [contextMenuDelegate menuItemsForRef:ref commit:historyController.webCommit];
91 NSLog(@"Could not find selected ref!");
93 return defaultMenuItems;
97 // Open external links in the default browser
98 - (void)webView:(WebView *)sender decidePolicyForNewWindowAction:(NSDictionary *)actionInformation
99 request:(NSURLRequest *)request
100 newFrameName:(NSString *)frameName
101 decisionListener:(id < WebPolicyDecisionListener >)listener
103 [[NSWorkspace sharedWorkspace] openURL:[request URL]];
106 - getConfig:(NSString *)config
108 return [historyController valueForKeyPath:[@"repository.config." stringByAppendingString:config]];