diff --git a/src/config.ts b/src/config.ts index e69d097..8581376 100644 --- a/src/config.ts +++ b/src/config.ts @@ -4,11 +4,13 @@ import { EventEmitter } from "events"; export interface Config { gitpodURL: string; openAsPopup: boolean; + isEnabledPrebuildButton: boolean; } export const DEFAULT_CONFIG: Config = { gitpodURL: "https://gitpod.io", - openAsPopup: false + openAsPopup: false, + isEnabledPrebuildButton: false, }; export interface ConfigListener { diff --git a/src/injectors/gitlab-injector.ts b/src/injectors/gitlab-injector.ts index 5e73785..d74b7b9 100644 --- a/src/injectors/gitlab-injector.ts +++ b/src/injectors/gitlab-injector.ts @@ -55,7 +55,7 @@ class RepositoryInjector implements ButtonInjector { return result; } - inject(currentUrl: string, openAsPopup: boolean) { + inject(currentUrl: string, openAsPopup: boolean, isEnabledPrebuildButton: boolean) { const parent = select(RepositoryInjector.PARENT_SELECTOR); if (!parent || !parent.firstElementChild) { return; @@ -68,7 +68,7 @@ class RepositoryInjector implements ButtonInjector { return; } - const btn = this.renderButton(currentUrl, openAsPopup); + const btn = this.renderButton(currentUrl, openAsPopup, isEnabledPrebuildButton); parent.firstElementChild.appendChild(btn); const primaryButtons = parent.firstElementChild.getElementsByClassName("btn-primary"); @@ -82,7 +82,7 @@ class RepositoryInjector implements ButtonInjector { } } - protected renderButton(url: string, openAsPopup: boolean): HTMLElement { + protected renderButton(url: string, openAsPopup: boolean, isEnabledPrebuildButton: boolean): HTMLElement { const container = document.createElement('div'); container.className = "project-clone-holder d-none d-md-inline-block"; @@ -96,12 +96,24 @@ class RepositoryInjector implements ButtonInjector { a.href = url; a.target = "_blank"; a.className = "gl-button btn btn-info"; - + if (openAsPopup) { makeOpenInPopup(a); } container2ndLevel.appendChild(a); + + if(isEnabledPrebuildButton){ + const pb = document.createElement('a'); + pb.id = Gitpodify.BTN_ID; + pb.title = "PreBuild"; + pb.text = "PreBuild" + pb.href = url.replace("#","#prebuild/"); + pb.target = "_blank"; + pb.className = "gl-button btn btn-info"; + container2ndLevel.appendChild(pb) + } + container.appendChild(container2ndLevel); return container; } diff --git a/src/injectors/injector.ts b/src/injectors/injector.ts index d5ae457..ad40f15 100644 --- a/src/injectors/injector.ts +++ b/src/injectors/injector.ts @@ -36,7 +36,7 @@ export interface ButtonInjector { * Injects the actual button * @param currentUrl The currently configured Gitpod URL */ - inject(currentUrl: string, openAsPopup: boolean): void; + inject(currentUrl: string, openAsPopup: boolean, isEnabledPrebuildButton:boolean): void; } export abstract class InjectorBase implements Injector { @@ -54,7 +54,7 @@ export abstract class InjectorBase implements Injector { const currentUrl = renderGitpodUrl(this.config.gitpodURL); for (const injector of this.buttonInjectors) { if (injector.isApplicableToCurrentPage()) { - injector.inject(currentUrl, this.config.openAsPopup); + injector.inject(currentUrl, this.config.openAsPopup, this.config.isEnabledPrebuildButton); if (singleInjector) { break; } diff --git a/src/options/options.html b/src/options/options.html index 098d938..7986f8c 100644 --- a/src/options/options.html +++ b/src/options/options.html @@ -10,6 +10,10 @@ +