3
3
// @namespace V@no
4
4
// @description Adds "Open with VSCode" button
5
5
// @match https://github.com/*
6
- // @version 23.10.28-125044
6
+ // @version 24.5.9-085044
7
7
// @license MIT
8
8
// @run -at document-end
9
9
// @grant none
14
14
"use strict" ;
15
15
const fixLink = ( ) =>
16
16
{
17
- const elA_DownloadZip = document . querySelector ( `[data-open-app="link"] ` ) ;
18
- if ( ! elA_DownloadZip )
17
+ const elUL = document . querySelector ( `#__primerPortalRoot__ > div > div > div > ul > div > ul ` ) ;
18
+ if ( ! elUL )
19
19
return true ;
20
20
21
- const elLi_DownloadZip = elA_DownloadZip . parentNode ;
22
- const elA_VStudio = document . querySelector ( '[data-open-app="visual-studio"]' ) ;
23
- let elLi_VSCode ;
24
- let elA_VSCode ;
25
- if ( elA_VStudio )
21
+ const elLiVStudio = elUL . querySelector ( `[id]:nth-child(2)` ) ;
22
+ if ( elLiVStudio && ! elLiVStudio . querySelector ( ".icon" ) )
26
23
{
27
- const elLiVStudio = elA_VStudio . parentNode ;
28
- elLi_VSCode = elLiVStudio . cloneNode ( true ) ;
29
- elA_VSCode = elLi_VSCode . querySelector ( "a" ) ;
30
24
const elImg_Vstudio = document . createElement ( "img" ) ;
31
- elImg_Vstudio . classList . add ( "mr-2" ) ;
25
+ elImg_Vstudio . classList . add ( "mr-2" , "icon" ) ;
32
26
elImg_Vstudio . src = "https://raw.githubusercontent.com/vanowm/userscript_github-open_with_vscode/master/media/vstudio.svg" ;
33
- elA_VStudio . prepend ( elImg_Vstudio ) ;
27
+ elLiVStudio . prepend ( elImg_Vstudio ) ;
34
28
}
35
- else
29
+ const elLi_DownloadZip = elUL . querySelector ( `li:last-child` ) ;
30
+ const elLi_VSCode = ( elUL . querySelector ( ".vscode" ) || elLi_DownloadZip . cloneNode ( true ) ) ;
31
+ if ( ! elLi_VSCode . parentNode )
36
32
{
37
- elLi_VSCode = elLi_DownloadZip . cloneNode ( true ) ;
38
- elA_VSCode = elLi_VSCode . querySelector ( "a" ) ;
39
- elA_VSCode . dataset . action = "click:get-repo#showDownloadMessage" ;
40
- }
41
- try
42
- {
43
- const hydroClick = JSON . parse ( elA_VSCode . dataset . hydroClick ) ;
44
- hydroClick . payload . feature_clicked = "OPEN_WITH_VSCODE" ;
45
- elA_VSCode . dataset . hydroClick = JSON . stringify ( hydroClick ) ;
46
- }
47
- catch { }
48
- elA_VSCode . textContent = "Open with VSCode" ;
49
- const elImg_Vscode = document . createElement ( "img" ) ;
50
- elImg_Vscode . classList . add ( "mr-2" ) ;
51
- elImg_Vscode . src = "https://raw.githubusercontent.com/vanowm/userscript_github-open_with_vscode/master/media/vscode.svg" ;
52
- elA_VSCode . prepend ( elImg_Vscode ) ;
53
- // display "Launching Visual Studio Code..." message
54
- elA_VSCode . dataset . openApp = "vscode" ;
55
- const cloneURL = ( document . querySelector ( ".input-group > .form-control" ) || { } ) . value ;
33
+ elLi_VSCode . classList . add ( "vscode" ) ;
34
+ const elA_VSCode = elLi_VSCode . querySelector ( "a" ) ;
35
+ elA_VSCode . textContent = "Open with VSCode" ;
36
+ const elImg_Vscode = document . createElement ( "img" ) ;
37
+ elImg_Vscode . classList . add ( "mr-2" , "icon" ) ;
38
+ elImg_Vscode . src = "https://raw.githubusercontent.com/vanowm/userscript_github-open_with_vscode/master/media/vscode.svg" ;
39
+ elA_VSCode . prepend ( elImg_Vscode ) ;
56
40
57
- if ( cloneURL )
41
+ const cloneURL = ( elUL . parentNode . querySelector ( `input` ) || { } ) . value
42
+ || location . origin + location . pathname + ".git" ;
58
43
elA_VSCode . href = "vscode://vscode.git/clone?url=" + encodeURI ( cloneURL ) ;
59
- else
60
- elA_VSCode . href = elA_VSCode . href . replace ( "git-client://" , "vscode://vscode.git/" ) ;
61
44
62
- elLi_DownloadZip . parentNode . insertBefore ( elLi_VSCode , elLi_DownloadZip ) ;
63
- //we don't need keep observing DOM changes anymore
64
- observer . disconnect ( ) ;
45
+ elLi_DownloadZip . parentNode . insertBefore ( elLi_VSCode , elLi_DownloadZip ) ;
46
+ }
65
47
} ;
66
48
67
49
const observer = new MutationObserver ( fixLink ) ;
68
- if ( fixLink ( ) )
69
- observer . observe ( document , { childList : true , subtree : true } ) ;
50
+ fixLink ( ) ;
51
+ observer . observe ( document , { childList : true , subtree : true } ) ;
70
52
} ) ( ) ;
0 commit comments