From f0b995bd9e416995fe693bdb277e8d76caff1bf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Soba=C5=84ski?= Date: Sun, 8 Dec 2024 16:54:48 +0100 Subject: [PATCH 1/2] Add "Open in Web Browser" in file-viewer --- index.html | 3 ++- main.js | 8 +++++++ .../services/gitlab-api/models/project.ts | 1 + .../services/gitlab-web/gitlab-www.service.ts | 22 +++++++++++++++++++ .../file-viewer/file-viewer.component.html | 8 +++++++ .../file-viewer/file-viewer.component.scss | 5 +++++ .../file-viewer/file-viewer.component.ts | 12 +++++++++- 7 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 src/app/core/services/gitlab-web/gitlab-www.service.ts diff --git a/index.html b/index.html index a201e6c..f4b681e 100644 --- a/index.html +++ b/index.html @@ -18,7 +18,8 @@ active: true, webviewAttributes: { nodeintegration: true, - webPreferences: 'contextIsolation=false' + webPreferences: 'contextIsolation=false', + allowpopups: true, }, ready: (tab) => { tab.webview.addEventListener('ipc-message', (event) => { diff --git a/main.js b/main.js index 147fd42..6feb4da 100644 --- a/main.js +++ b/main.js @@ -44,6 +44,14 @@ app.on('activate', () => { } }); +// allow open external links in webview (electron-tabs) context +app.on('web-contents-created', (_, webContents) => { + webContents.setWindowOpenHandler(({url}) => { + shell.openExternal(url); + return {action : "deny"}; + }); +}); + ipcMain.on('SETTINGS_CHANGED', (event, electronSettings) => { const unsafeRequestsEnabled = store.get('enableUnsafeRequests'); if (electronSettings && electronSettings.enableUnsafeRequests !== unsafeRequestsEnabled) { diff --git a/src/app/core/services/gitlab-api/models/project.ts b/src/app/core/services/gitlab-api/models/project.ts index ea1f4e6..456da6d 100644 --- a/src/app/core/services/gitlab-api/models/project.ts +++ b/src/app/core/services/gitlab-api/models/project.ts @@ -6,4 +6,5 @@ export interface Project { name: string; name_with_namespace: string; path_with_namespace: string; + web_url: string; } diff --git a/src/app/core/services/gitlab-web/gitlab-www.service.ts b/src/app/core/services/gitlab-web/gitlab-www.service.ts new file mode 100644 index 0000000..d0823a1 --- /dev/null +++ b/src/app/core/services/gitlab-web/gitlab-www.service.ts @@ -0,0 +1,22 @@ +import { Injectable } from '@angular/core'; +import { Project } from '../gitlab-api/models/project'; + +@Injectable({ + providedIn: 'root' +}) +export class GitlabWwwService { + + public openFile(project: Project, file_with_path: string, line?: number): void { + let url = `${project.web_url}/-/blob/${project.default_branch}/${file_with_path}`; + if (line !== undefined && line !== null) { + url += `#L${line}`; + } + this.openNewWindow(new URL(url)); + } + + + private openNewWindow(url: URL): void { + window.open(url, '_blank'); + } + +} diff --git a/src/app/shared/components/file-viewer/file-viewer.component.html b/src/app/shared/components/file-viewer/file-viewer.component.html index 5e78001..f99e217 100644 --- a/src/app/shared/components/file-viewer/file-viewer.component.html +++ b/src/app/shared/components/file-viewer/file-viewer.component.html @@ -1,6 +1,14 @@