GitX v0.4.1
[GitX.git] / PBWebHistoryController.m
blobcf725ad880b7fca7ee7414e8dea16c4af051b7e4
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"
10 @interface RefMenuItem : NSMenuItem
12         NSString *ref;
14 @property (copy) NSString *ref;
15 @end
16 @implementation RefMenuItem
17 @synthesize ref;
18 @end
21 @implementation PBWebHistoryController
23 @synthesize diff;
25 - (void) awakeFromNib
27         startFile = @"commit";
28         [super awakeFromNib];
29         [historyController addObserver:self forKeyPath:@"webCommit" options:0 context:@"ChangedCommit"];
32 - (void) didLoad
34         [self changeContentTo: historyController.webCommit];
37 - (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(NSString *)context
39     if ([context isEqualToString: @"ChangedCommit"])
40                 [self changeContentTo: historyController.webCommit];
41         else
42                 [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
45 - (void) changeContentTo: (PBGitCommit *) content
47         if (content == nil || !finishedLoading)
48                 return;
50         id script = [view windowScriptObject];
51         [script setValue: content forKey:@"CommitObject"];
53         // The sha is the same, but refs may have changed.. reload it lazy
54         if ([currentSha isEqualToString: content.sha])
55         {
56                 [script callWebScriptMethod:@"reload" withArguments: nil];
57                 return;
58         }
59         
60         currentSha = content.sha;
62         [script callWebScriptMethod:@"loadCommit" withArguments: nil];
65 - (void) selectCommit: (NSString*) sha
67         [historyController selectCommit:sha];
70 - (void) sendKey: (NSString*) key
72         id script = [view windowScriptObject];
73         [script callWebScriptMethod:@"handleKeyFromCocoa" withArguments: [NSArray arrayWithObject:key]];
76 - (void) copySource
78         NSString *source = [(DOMHTMLElement *)[[[view mainFrame] DOMDocument] documentElement] outerHTML];
79         NSPasteboard *a =[NSPasteboard generalPasteboard];
80         [a declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:self];
81         [a setString:source forType: NSStringPboardType];
84 - (void) removeRef:(RefMenuItem *)sender
86         NSLog(@"Removing ref: %@", [sender ref]);
87         if ([historyController.repository removeRef: [sender ref]])
88                 NSLog(@"Deletion succesful!");
89         else
90                 NSLog(@"Deletion failed!");
93 - (NSArray *)      webView:(WebView *)sender
94 contextMenuItemsForElement:(NSDictionary *)element
95                   defaultMenuItems:(NSArray *)defaultMenuItems
97         DOMNode *node = [element valueForKey:@"WebElementDOMNode"];
99         // If clicked on the text, select the containing div
100         if ([[node className] isEqualToString:@"DOMText"])
101                 node = [node parentNode];
103         // Every ref has a class name of 'refs' and some other class. We check on that to see if we pressed on a ref.
104         if (![[node className] hasPrefix:@"refs "])
105                 return defaultMenuItems;
107         RefMenuItem *item = [[RefMenuItem alloc] initWithTitle:@"Remove"
108                                                                                                         action:@selector(removeRef:)
109                                                                                          keyEquivalent: @""];
110         [item setTarget: self];
111         [item setRef: [[[node childNodes] item:0] textContent]];
112         return [NSArray arrayWithObject: item];
116 // Open external links in the default browser
117 -   (void)webView:(WebView *)sender decidePolicyForNewWindowAction:(NSDictionary *)actionInformation
118                   request:(NSURLRequest *)request
119      newFrameName:(NSString *)frameName
120  decisionListener:(id < WebPolicyDecisionListener >)listener
122         [[NSWorkspace sharedWorkspace] openURL:[request URL]];
125 @end