1
1
import { ConfigProvider } from "../config" ;
2
2
import { renderGitpodUrl } from "../utils" ;
3
+ import { isVisible } from "../utils" ;
3
4
4
5
export interface Injector {
5
6
@@ -67,6 +68,48 @@ export abstract class InjectorBase implements Injector {
67
68
}
68
69
}
69
70
71
+ function openInGitpod ( e : MouseEvent | KeyboardEvent , inNewTab : boolean ) {
72
+ const currentUrl = window . location . href ;
73
+ window . open ( `https://gitpod.io/#${ currentUrl } ` , inNewTab ? '_blank' : '_self' ) ;
74
+ e . preventDefault ( ) ;
75
+ e . stopPropagation ( ) ;
76
+ }
77
+
78
+ export async function rewritePeriodKeybindGitHub ( ) {
79
+ const configProvider = await ConfigProvider . create ( ) ;
80
+ const config = configProvider . getConfig ( ) ;
81
+
82
+ if ( config . rewritePeriodKeybind ) {
83
+ document . querySelectorAll ( '.js-github-dev-shortcut, .js-github-dev-new-tab-shortcut' ) . forEach ( ( elem ) => {
84
+ const new_element = elem . cloneNode ( true ) as HTMLElement ;
85
+ elem . parentNode ?. replaceChild ( new_element , elem ) ;
86
+ new_element . addEventListener ( 'click' , ( e ) => {
87
+ if ( new_element && isVisible ( new_element ) && ! confirm ( 'Are you sure you want to open gitpod.io?' ) ) {
88
+ return ;
89
+ }
90
+ openInGitpod ( e , elem . classList . contains ( 'js-github-dev-new-tab-shortcut' ) || config . openAsPopup ) ;
91
+ } ) ;
92
+ } ) ;
93
+ }
94
+ }
95
+
96
+ export async function rewritePeriodKeybindGitLab ( ) {
97
+ const configProvider = await ConfigProvider . create ( ) ;
98
+ const config = configProvider . getConfig ( ) ;
99
+
100
+ if ( config . rewritePeriodKeybind ) {
101
+ const unbindMousetrapScript = document . createElement ( 'script' ) ;
102
+ unbindMousetrapScript . innerHTML = 'window.Mousetrap.unbind(".");' ;
103
+ document . head . appendChild ( unbindMousetrapScript ) ;
104
+
105
+ document . onkeydown = ( e : KeyboardEvent ) => {
106
+ if ( e . code === 'Period' ) {
107
+ openInGitpod ( e , e . shiftKey || config . openAsPopup ) ;
108
+ }
109
+ } ;
110
+ }
111
+ }
112
+
70
113
export const checkIsBtnUpToDate = ( button : HTMLElement | null , currentUrl : string ) : boolean => {
71
114
return ! ! button && button instanceof HTMLAnchorElement && button . href === currentUrl ;
72
115
} ;
0 commit comments