2023-08-30 17:38:07 -07:00
|
|
|
const { ipcRenderer, contextBridge } = require('electron/renderer');
|
2019-10-18 12:57:09 -07:00
|
|
|
|
2021-01-25 17:08:58 +01:00
|
|
|
const policy = window.trustedTypes.createPolicy('electron-default-app', {
|
|
|
|
// we trust the SVG contents
|
|
|
|
createHTML: input => input
|
|
|
|
});
|
|
|
|
|
2019-10-18 12:57:09 -07:00
|
|
|
async function getOcticonSvg (name: string) {
|
|
|
|
try {
|
2020-03-20 13:28:31 -07:00
|
|
|
const response = await fetch(`octicon/${name}.svg`);
|
|
|
|
const div = document.createElement('div');
|
2021-01-25 17:08:58 +01:00
|
|
|
div.innerHTML = policy.createHTML(await response.text());
|
2020-03-20 13:28:31 -07:00
|
|
|
return div;
|
2019-10-18 12:57:09 -07:00
|
|
|
} catch {
|
2020-03-20 13:28:31 -07:00
|
|
|
return null;
|
2019-10-18 12:57:09 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async function loadSVG (element: HTMLSpanElement) {
|
|
|
|
for (const cssClass of element.classList) {
|
|
|
|
if (cssClass.startsWith('octicon-')) {
|
2020-03-20 13:28:31 -07:00
|
|
|
const icon = await getOcticonSvg(cssClass.substr(8));
|
2019-10-18 12:57:09 -07:00
|
|
|
if (icon) {
|
|
|
|
for (const elemClass of element.classList) {
|
2020-03-20 13:28:31 -07:00
|
|
|
icon.classList.add(elemClass);
|
2019-10-18 12:57:09 -07:00
|
|
|
}
|
2020-03-20 13:28:31 -07:00
|
|
|
element.before(icon);
|
|
|
|
element.remove();
|
|
|
|
break;
|
2019-10-18 12:57:09 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2019-03-12 00:13:46 +01:00
|
|
|
|
2019-06-04 18:13:35 +02:00
|
|
|
async function initialize () {
|
2020-03-20 13:28:31 -07:00
|
|
|
const electronPath = await ipcRenderer.invoke('bootstrap');
|
2025-02-22 21:45:36 +05:30
|
|
|
function replaceText (selector: string, text: string, link?: string) {
|
2020-03-20 13:28:31 -07:00
|
|
|
const element = document.querySelector<HTMLElement>(selector);
|
2019-03-12 00:13:46 +01:00
|
|
|
if (element) {
|
2025-02-22 21:45:36 +05:30
|
|
|
if (link) {
|
|
|
|
const anchor = document.createElement('a');
|
|
|
|
anchor.textContent = text;
|
|
|
|
anchor.href = link;
|
|
|
|
anchor.target = '_blank';
|
|
|
|
element.appendChild(anchor);
|
|
|
|
} else {
|
|
|
|
element.innerText = text;
|
|
|
|
}
|
2019-03-12 00:13:46 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-02-22 21:45:36 +05:30
|
|
|
replaceText('.electron-version', `Electron v${process.versions.electron}`, 'https://electronjs.org/docs');
|
|
|
|
replaceText('.chrome-version', `Chromium v${process.versions.chrome}`, 'https://developer.chrome.com/docs/chromium');
|
|
|
|
replaceText('.node-version', `Node v${process.versions.node}`, `https://nodejs.org/docs/v${process.versions.node}/api`);
|
|
|
|
replaceText('.v8-version', `v8 v${process.versions.v8}`, 'https://v8.dev/docs');
|
2020-03-20 13:28:31 -07:00
|
|
|
replaceText('.command-example', `${electronPath} path-to-app`);
|
2019-10-18 12:57:09 -07:00
|
|
|
|
|
|
|
for (const element of document.querySelectorAll<HTMLSpanElement>('.octicon')) {
|
2020-03-20 13:28:31 -07:00
|
|
|
loadSVG(element);
|
2019-10-18 12:57:09 -07:00
|
|
|
}
|
2019-03-12 00:13:46 +01:00
|
|
|
}
|
|
|
|
|
2019-10-18 12:57:09 -07:00
|
|
|
contextBridge.exposeInMainWorld('electronDefaultApp', {
|
|
|
|
initialize
|
2020-03-20 13:28:31 -07:00
|
|
|
});
|