Skip to content

Commit dc8fa25

Browse files
committed
PWV Detection Changes
1 parent 98397d5 commit dc8fa25

File tree

4 files changed

+37
-42
lines changed

4 files changed

+37
-42
lines changed

index.html

Lines changed: 16 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,21 @@
2222
<meta name="twitter:description" content="GraphScript is a general-purpose visual scripting editor that lets you build logic by connecting visual nodes. No code, just flow.">
2323
<meta name="twitter:image" content="https://github.com/GraphScript-Labs/.github/blob/main/Banner.png?raw=true">
2424

25+
<script src="/pwv.js"></script>
26+
27+
<script defer>
28+
if (!window.hasPWV) {
29+
const element = document.querySelector(".pywebview-drag-region");
30+
element.remove();
31+
}
32+
</script>
33+
34+
<script>
35+
document.addEventListener("contextmenu", (event) => {
36+
event.preventDefault();
37+
});
38+
</script>
39+
2540
<style>
2641
.pywebview-drag-region {
2742
position: fixed;
@@ -39,31 +54,6 @@
3954
<body>
4055
<span class="pywebview-drag-region"></span>
4156
<div id="root"></div>
42-
43-
<script defer>
44-
let checkCount = 0;
45-
46-
const pwvCheckInterval = setInterval(() => {
47-
if (window.pywebview !== undefined) {
48-
const dragRegion = document.querySelector('.pywebview-drag-region');
49-
if (dragRegion) dragRegion.style.display = 'block';
50-
}
51-
52-
if (checkCount > 1000 || window.pywebview !== undefined) {
53-
clearInterval(pwvCheckInterval);
54-
return;
55-
}
56-
57-
checkCount++;
58-
}, 10);
59-
</script>
60-
61-
<script>
62-
document.addEventListener("contextmenu", (event) => {
63-
event.preventDefault();
64-
});
65-
</script>
66-
67-
<script type="module" src="/src/main.tsx" defer></script>
57+
<script type="module" src="/src/main.tsx"></script>
6858
</body>
6959
</html>

public/pwv.js

Whitespace-only changes.

src/utils/desktopTools.ts

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,40 @@
11
import type { PyWebview } from "@defs/PyWebview";
22

33
const setupDesktopTools = () => {
4-
const pwv: PyWebview | undefined = window.pywebview;
4+
const getApi = (): PyWebview["api"] | undefined => {
5+
return window.pywebview?.api;
6+
};
7+
8+
const checkApiState = (): boolean => {
9+
return !!Object.keys(getApi() || {}).length;
10+
};
511

612
const isDesktop = (): boolean => {
7-
return document.body.getAttribute("data-pywebview-id") !== null;
13+
return !!window.hasPWV;
814
}
915

1016
const waitForPWV = (): Promise<void> => {
1117
return (new Promise((resolve) => {
12-
if (!isDesktop()) {
18+
if (!isDesktop() || checkApiState()) {
1319
resolve();
1420
return;
1521
}
1622

17-
if (Object.keys(pwv?.api || {}).length) {
18-
resolve();
19-
return;
20-
}
21-
22-
setTimeout(() => {
23-
resolve();
24-
}, 100);
23+
const checkInterval = setInterval(() => {
24+
if (checkApiState()) {
25+
resolve();
26+
clearInterval(checkInterval);
27+
}
28+
}, 10);
2529
}));
2630
}
2731

2832
const closeWindow = async () => {
29-
return pwv?.api.close();
33+
return getApi()?.close();
3034
}
3135

3236
const toggleWindowFullscreen = async () => {
33-
return pwv?.api.toggle_fullscreen();
37+
return getApi()?.toggle_fullscreen();
3438
}
3539

3640
const saveFile = async (
@@ -39,7 +43,7 @@ const setupDesktopTools = () => {
3943
fileTypes?: string[],
4044
) => {
4145
if (isDesktop())
42-
return pwv!.api.save_file(content, saveName, fileTypes);
46+
return getApi()!.save_file(content, saveName, fileTypes);
4347

4448
const blob = new Blob([content], { type: "text/plain" });
4549
const url = URL.createObjectURL(blob);
@@ -57,7 +61,7 @@ const setupDesktopTools = () => {
5761

5862
const loadFile = async (): Promise<string | null> => {
5963
if (isDesktop())
60-
return pwv!.api.load_file() || null;
64+
return getApi()!.load_file() || null;
6165

6266
const promise = new Promise<string | null>((resolve) => {
6367
const input = document.createElement("input");
@@ -92,7 +96,7 @@ const setupDesktopTools = () => {
9296
const loadProjectId = async (): Promise<string | null> => {
9397
if (!isDesktop()) return null;
9498
await waitForPWV();
95-
return (await pwv!.api.load_project_id()) || null;
99+
return (await getApi()!.load_project_id()) || null;
96100
}
97101

98102
return {

src/vite-env.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@ export {};
77
declare global {
88
interface Window {
99
pywebview?: PyWebview;
10+
hasPWV?: boolean;
1011
}
1112
}

0 commit comments

Comments
 (0)