@@ -104,9 +104,16 @@ abstract class GitHubTreeItem extends UpdatableTreeItem<GitHubTreeItem> {
104
104
}
105
105
106
106
class GitHubLeafTreeItem extends GitHubTreeItem {
107
- constructor ( label : string , id : string , icon : string ,
107
+ constructor ( label : string , id : string , icon : string , targetUrl : string | undefined ,
108
108
onDidChangeTreeDataEmitter : vscode . EventEmitter < vscode . TreeItem | undefined > ) {
109
109
super ( label , id , vscode . TreeItemCollapsibleState . None , false , icon , onDidChangeTreeDataEmitter ) ;
110
+ if ( targetUrl !== undefined ) {
111
+ this . command = {
112
+ command : 'vscode.open' ,
113
+ title : 'Open in Browser' ,
114
+ arguments : [ vscode . Uri . parse ( targetUrl ) ]
115
+ } ;
116
+ }
110
117
}
111
118
112
119
protected loadChildrenArrayFromWeb ( ) : Promise < GitHubTreeItem [ ] > {
@@ -133,7 +140,8 @@ class AlertsRootItem extends GitHubTreeItem {
133
140
for ( const alert of json ) {
134
141
if ( alert . unread && alert . repository . owner . login === 'openjdk' ) {
135
142
const notInfo = new AlertTreeItem ( alert . subject . title , 'alert-' + alert . id ,
136
- alert . subject . latest_comment_url , alert . subject . url , new Date ( alert . updated_at ) , alert . repository . full_name , this . onDidChangeTreeDataEmitter ) ;
143
+ alert . subject . latest_comment_url , alert . subject . url , new Date ( alert . updated_at ) ,
144
+ alert . repository . full_name , this . onDidChangeTreeDataEmitter ) ;
137
145
newAlerts . push ( notInfo ) ;
138
146
}
139
147
}
@@ -147,42 +155,56 @@ class AlertsRootItem extends GitHubTreeItem {
147
155
}
148
156
149
157
class AlertTreeItem extends GitHubTreeItem {
158
+ prWebUrl : string ;
150
159
constructor ( label : string , id : string , private commentUrl : string , private prUrl : string , private updatedAt : Date ,
151
160
private repository : string , onDidChangeTreeDataEmitter : vscode . EventEmitter < vscode . TreeItem | undefined > ) {
152
161
super ( label , id , vscode . TreeItemCollapsibleState . Collapsed , false , 'github-item.svg' , onDidChangeTreeDataEmitter ) ;
162
+ // Technically we should look this up, but keep it simple and just rewrite URL
163
+ this . prWebUrl = this . prUrl . replace ( / h t t p s : \/ \/ a p i \. g i t h u b \. c o m \/ r e p o s \/ ( .* \/ .* ) \/ p u l l s \/ ( .* ) / ,
164
+ 'https://github.com/$1/pull/$2' ) ;
153
165
}
154
166
155
- protected loadChildrenArrayFromWeb ( ) : Promise < GitHubTreeItem [ ] > {
156
- return GitHubProvider . getGHjson ( this . commentUrl , ( comment : any , resolveJson : any , rejectJson : any ) => {
157
- const newCommentInfo : GitHubTreeItem [ ] = [ ] ;
167
+ private fillInTimeStampAndPR ( items : GitHubTreeItem [ ] ) {
168
+ const prNumber = this . prUrl . split ( '/' ) . pop ( ) ;
158
169
159
- // Stupid cleaning of html tags; will likely work ok since GitHub does the real work for us
160
- const cleanedComment = comment . body . replace ( / < \/ ? [ ^ > ] + ( > | $ ) / g, '' ) . trim ( ) ;
170
+ let localeConf = vscode . workspace . getConfiguration ( 'openjdkDevel' ) . get ( 'locale' , '' ) ;
171
+ let locale ;
172
+ if ( localeConf === '' ) {
173
+ locale = undefined ;
174
+ } else {
175
+ locale = localeConf ;
176
+ }
161
177
162
- const prNumber = this . prUrl . split ( '/' ) . pop ( ) ;
178
+ items . push ( new GitHubLeafTreeItem ( this . updatedAt . toLocaleString ( locale ) ,
179
+ this . commentUrl + '+date' , 'github-time.svg' , this . prWebUrl , this . onDidChangeTreeDataEmitter ) ) ;
163
180
164
- let localeConf = vscode . workspace . getConfiguration ( 'openjdkDevel' ) . get ( 'locale' , '' ) ;
165
- let locale ;
166
- if ( localeConf === '' ) {
167
- locale = undefined ;
168
- } else {
169
- locale = localeConf ;
170
- }
181
+ items . push ( new GitHubLeafTreeItem ( `${ this . repository } #${ prNumber } ` ,
182
+ this . commentUrl + '+pr' , 'github-pullrequest.svg' , this . prWebUrl , this . onDidChangeTreeDataEmitter ) ) ;
183
+ }
171
184
172
- newCommentInfo . push ( new GitHubLeafTreeItem ( cleanedComment ,
173
- this . commentUrl + '+comment' , 'github-conversation.svg' , this . onDidChangeTreeDataEmitter ) ) ;
185
+ protected loadChildrenArrayFromWeb ( ) : Promise < GitHubTreeItem [ ] > {
186
+ const newCommentInfo : GitHubTreeItem [ ] = [ ] ;
174
187
175
- newCommentInfo . push ( new GitHubLeafTreeItem ( comment . user . login ,
176
- this . commentUrl + '+username' , 'github-user.svg' , this . onDidChangeTreeDataEmitter ) ) ;
188
+ if ( this . commentUrl !== null ) {
189
+ return GitHubProvider . getGHjson ( this . commentUrl , ( comment : any , resolveJson : any , rejectJson : any ) => {
190
+ // Stupid cleaning of html tags; will likely work ok since GitHub does the real work for us
191
+ const cleanedComment = comment . body . replace ( / < \/ ? [ ^ > ] + ( > | $ ) / g, '' ) . trim ( ) ;
177
192
178
- newCommentInfo . push ( new GitHubLeafTreeItem ( this . updatedAt . toLocaleString ( locale ) ,
179
- this . commentUrl + '+date ' , 'github-time .svg' , this . onDidChangeTreeDataEmitter ) ) ;
193
+ newCommentInfo . push ( new GitHubLeafTreeItem ( cleanedComment ,
194
+ this . commentUrl + '+comment ' , 'github-conversation .svg' , this . prWebUrl , this . onDidChangeTreeDataEmitter ) ) ;
180
195
181
- newCommentInfo . push ( new GitHubLeafTreeItem ( ` ${ this . repository } # ${ prNumber } ` ,
182
- this . commentUrl + '+pr ' , 'github-pullrequest .svg' , this . onDidChangeTreeDataEmitter ) ) ;
196
+ newCommentInfo . push ( new GitHubLeafTreeItem ( comment . user . login ,
197
+ this . commentUrl + '+username ' , 'github-user .svg' , this . prWebUrl , this . onDidChangeTreeDataEmitter ) ) ;
183
198
184
- resolveJson ( newCommentInfo ) ;
185
- } ) ;
199
+ this . fillInTimeStampAndPR ( newCommentInfo ) ;
200
+
201
+ resolveJson ( newCommentInfo ) ;
202
+ } ) ;
203
+ } else {
204
+ this . fillInTimeStampAndPR ( newCommentInfo ) ;
205
+
206
+ return Promise . resolve ( newCommentInfo ) ;
207
+ }
186
208
}
187
209
188
210
protected updateSelfAfterWebLoad ( ) {
@@ -239,14 +261,17 @@ class PRTreeItem extends GitHubTreeItem {
239
261
this . tooltip = `${ label } \n${ repo } #${ prNumber } by @${ author } ` ;
240
262
241
263
this . convItem = new GitHubLeafTreeItem (
242
- `${ repo } #${ prNumber } by @${ author } ` , 'goto' + id , 'github-conversation.svg' , onDidChangeTreeDataEmitter
264
+ `${ repo } #${ prNumber } by @${ author } ` , 'goto' + id , 'github-conversation.svg' , undefined ,
265
+ onDidChangeTreeDataEmitter
243
266
) ;
244
267
this . generated . push ( this . convItem ) ;
245
268
// Diff description must be complemented from prUrl, which can only be done later
246
- this . diffItem = new GitHubLeafTreeItem ( 'Diff' , 'diff' + id , 'github-diff.svg' , onDidChangeTreeDataEmitter ) ;
269
+ this . diffItem = new GitHubLeafTreeItem ( 'Diff' , 'diff' + id , 'github-diff.svg' , undefined ,
270
+ onDidChangeTreeDataEmitter ) ;
247
271
this . generated . push ( this . diffItem ) ;
248
272
if ( tags ) {
249
- this . generated . push ( new GitHubLeafTreeItem ( tags , 'tags' + id , 'github-tags.svg' , onDidChangeTreeDataEmitter ) ) ;
273
+ this . generated . push ( new GitHubLeafTreeItem ( tags , 'tags' + id , 'github-tags.svg' , undefined ,
274
+ onDidChangeTreeDataEmitter ) ) ;
250
275
251
276
}
252
277
}
0 commit comments