GitX version 0.5
[GitX.git] / PBWebHistoryController.m
blobd546c8bc4c562aebb2ea9c9fdccd0d1bef933881
1 //
2 //  PBWebGitController.m
3 //  GitTest
4 //
5 //  Created by Pieter de Bie on 14-06-08.
6 //  Copyright 2008 __MyCompanyName__. All rights reserved.
7 //
9 #import "PBWebHistoryController.h"
11 @implementation PBWebHistoryController
13 @synthesize diff;
15 - (void) awakeFromNib
17         startFile = @"history";
18         [super awakeFromNib];
19         [historyController addObserver:self forKeyPath:@"webCommit" options:0 context:@"ChangedCommit"];
22 - (void) didLoad
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];
31         else
32                 [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
35 - (void) changeContentTo: (PBGitCommit *) content
37         if (content == nil || !finishedLoading)
38                 return;
40         // The sha is the same, but refs may have changed.. reload it lazy
41         if ([currentSha isEqualToString: content.sha])
42         {
43                 [[self script] callWebScriptMethod:@"reload" withArguments: nil];
44                 return;
45         }
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]];
63 - (void) copySource
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)
87         {
88                 if ([[ref shortName] isEqualToString:selectedRefString])
89                         return [contextMenuDelegate menuItemsForRef:ref commit:historyController.webCommit];
90         }
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]];
111 @end